node-microsvc-lib
Version:
NodeJS microservice framework library
203 lines • 9.16 kB
JavaScript
/**
* Created by pedrosousabarreto@gmail.com on 01/Feb/2019.
*/
;
Object.defineProperty(exports, "__esModule", { value: true });
require("mocha");
const chai_1 = require("chai");
const http = require('http');
const index_1 = require("../index");
const health_check_1 = require("./factories/health_check");
const bunyan_logger_1 = require("../bunyan_logger");
const console_logger_1 = require("../console_logger");
const json_logger_1 = require("../json_logger");
const service_params_1 = require("../service_params");
process.env["TEST_PARAM"] = "env_var_value";
process.env["APP_ENV"] = "stage";
describe('main', () => {
let logger;
let app;
let configs;
const start_time = Date.now();
configs = require("./config/config");
logger = new console_logger_1.ConsoleLogger();
//logger = new BunyanLogger(configs, "./log/sub/tests.log");
// create microservice app, no init yet
const app_without_logger = new index_1.Microservice(configs); // for test coverage only
app = new index_1.Microservice(configs, logger);
app.register_dependency("logger", logger);
app.register_dependency("test_dep", { key: "abc", value: 123 });
// register factories, order matters
// app.register_factory("request_logger", RequestLogger);
app.register_factory("health_check", health_check_1.HealthCheck);
process.on("uncaughtException", (err) => {
logger.fatal(err);
});
before((done) => {
app.init().catch((err) => {
done(err);
}).then(() => {
done();
});
});
after((done) => {
app.destroy().catch((err) => {
done(err);
}).then(() => {
console.log("---all destroys done");
done();
});
});
describe("di container", () => {
it("dependency exists", (done) => {
const test_dep = app.get("test_dep");
const logger_dep = app.get("logger");
chai_1.expect(test_dep).to.exist;
chai_1.expect(logger_dep).to.exist;
done();
});
it("dependency does not exist", (done) => {
try {
const non_existing_dep = app.get("non_existing_dep");
chai_1.expect(non_existing_dep).to.not.exist;
}
catch (e) {
chai_1.expect(e).to.exist;
}
done();
});
it("duplicate name", () => {
// expect(app.register_dependency.bind(app,"logger", {})).to.throw;
try {
app.register_dependency("logger", {});
}
catch (err) {
chai_1.expect(err);
}
});
});
describe("express app", () => {
it("heath_check", (done) => {
http.get('http://localhost:3000/_health_check', (res) => {
chai_1.expect(res.statusCode).to.be.eq(200);
done();
});
});
it("non existent path", (done) => {
http.get('http://localhost:3000/non_existing', (res) => {
chai_1.expect(res.statusCode).to.be.eq(404);
done();
});
});
});
describe("Loggers", () => {
it("console logger", () => {
const logger = new console_logger_1.ConsoleLogger();
logger.debug("debug test");
logger.info("info test");
logger.warn("warn test");
logger.error(new Error("new error for error test"), "desc for error test");
logger.fatal("fatal test");
});
it("bunyan logger", () => {
const logger = new bunyan_logger_1.BunyanLogger(configs, "./log/sub/tests.log");
logger.create_child({ "test_child_attr": "test_child_attr_value" });
logger.debug("debug test");
logger.info("info test");
logger.warn("warn test");
logger.error(new Error("new error for error test"), "desc for error test");
logger.fatal("fatal test");
logger.create_child();
});
it("JSON logger", () => {
const logger = new json_logger_1.JSONLogger(configs);
logger.debug("debug test");
logger.info("info test");
logger.warn("warn test");
logger.error(new Error("new error for error test"), "desc for error test");
logger.fatal("fatal test");
});
});
describe("object_utils", () => {
it("ToCamelCase log", () => {
const src = { my_key: "my_value" };
const dst = index_1.ObjectUtils.ToCamelCase(src);
chai_1.expect(dst).to.haveOwnProperty("myKey");
chai_1.expect(dst).to.not.haveOwnProperty("my_key");
});
it("ToSnakeCase log", () => {
const src = { myKey: "my_value" };
const dst = index_1.ObjectUtils.ToSnakeCase(src);
chai_1.expect(dst).to.haveOwnProperty("my_key");
chai_1.expect(dst).to.not.haveOwnProperty("myKey");
});
});
describe("configs", () => {
it("fixed configs", () => {
chai_1.expect(configs.env).to.eq(process.env["APP_ENV"]);
chai_1.expect(configs.solution_name).to.eq("my_solution");
chai_1.expect(configs.app_name).to.eq("my_app");
chai_1.expect(configs.app_version).to.eq("0.0.1");
chai_1.expect(configs.app_api_prefix).to.eq("");
chai_1.expect(configs.app_api_version).to.eq("1");
});
it("computed configs", () => {
chai_1.expect(configs.dev_mode).to.eq(false);
chai_1.expect(configs.app_full_name).to.eq(configs.solution_name + "__" + configs.env + "__" + configs.app_name);
chai_1.expect(configs.app_full_name_version).to.eq(configs.app_full_name + "__" + configs.app_version);
chai_1.expect(configs.app_base_url).to.eq("/");
chai_1.expect(configs.instance_id).to.be.not.null;
chai_1.expect(configs.instance_name).to.be.eq(configs.app_full_name_version + "__" + configs.instance_id);
});
});
describe("params", () => {
it("override from param file with env name", () => {
const param_val = configs.get_param_value("kafka_conn_string");
chai_1.expect(param_val).be.equal("stage:9092");
});
it("override from env_vars", () => {
const param_val = configs.get_param_value("test_param");
chai_1.expect(param_val).be.equal("env_var_value");
});
it("override from service provider", () => {
const secret_val = configs.get_secret_value("secret1");
chai_1.expect(secret_val).be.equal("my_secret1_value");
});
it("duplicate param detection", () => {
let params = new service_params_1.ServiceParams();
params.add_param("dupe_test_param", service_params_1.ParamTypes.STRING, "dupe_test_param_val", "dupe_test_param param to test duplicate check");
chai_1.expect(params.add_param.bind(params, "dupe_test_param", service_params_1.ParamTypes.STRING, "dupe_test_param_val", "dupe_test_param param to test duplicate check")).to.throw();
});
it("get param", () => {
let params = new service_params_1.ServiceParams();
params.add_param("get_param", service_params_1.ParamTypes.STRING, "value", "get_param param to test get check");
const param = params.get_param("get_param");
chai_1.expect(param === null || param === void 0 ? void 0 : param.default_value).to.eq("value");
const not_param = params.get_param("not_found");
chai_1.expect(not_param).to.be.null;
});
it("get feature flag", () => {
let params = new service_params_1.ServiceParams();
params.add_feature_flag("flag1", true, "test feature flag");
const feature_flag = params.get_feature_flag("flag1");
chai_1.expect(feature_flag === null || feature_flag === void 0 ? void 0 : feature_flag.default_value).to.eq(true);
const not_feature_flag = params.get_feature_flag("not_found");
chai_1.expect(not_feature_flag).to.be.null;
});
it("get secret", () => {
let params = new service_params_1.ServiceParams();
params.add_secret("secret1", "ultra_top_max_secret", "test secrets");
const secret = params.get_secret("secret1");
chai_1.expect(secret === null || secret === void 0 ? void 0 : secret.default_value).to.eq("ultra_top_max_secret");
});
it("get secret", () => {
let params = new service_params_1.ServiceParams();
params.add_secret("secret2", null, "test secrets");
const secret = params.get_secret("secret2");
chai_1.expect(secret === null || secret === void 0 ? void 0 : secret.default_value).to.null;
const not_found_secret = params.get_secret("not_found_secret");
chai_1.expect(not_found_secret).to.be.null;
});
});
});
//# sourceMappingURL=index.js.map