nodefony
Version:
Nodefony Framework Core
233 lines (175 loc) • 6.58 kB
JavaScript
/*
* MODEFONY FRAMEWORK UNIT TEST
*
* MOCHA STYLE
*
* In the global context you can find :
*
* nodefony : namespace to get library
* kernel : instance of kernel who launch the test
*
*/
const assert = require("assert");
const myObject = {
foo: "bar",
bar: "foo"
};
const myObject2 = {
foo: "bar2",
bar: "foo2"
};
const myClass = function () {
this.settings = {
foo: "bar"
};
this.setting2 = {
"crypto": {},
"modules": {},
"controllers": {},
"browser": {
"navigator": "Chrome",
"version": 57,
"Ie": false,
"Gecko": false,
"Webkit": true,
"Opera": false,
"platform": "mac"
},
"functions": {},
"notificationsCenter": {},
"io": {
"nativeWebSocket": true,
"protocols": {},
"authentication": {
"mechanisms": {}
},
"transports": {}
},
"xml": {}
};
};
myClass.prototype.getConfig = function () {
return this.settings;
};
myClass.prototype.getConfig2 = function () {
return this.setting2;
};
describe("NODEFONY KERNEL ", () => {
describe("CONTAINER", () => {
beforeEach(() => {});
before(() => {
if (!global.globalContainer) {
global.globalContainer = new nodefony.Container();
}
});
it("LIB LOADED", (done) => {
// check nodefony namespace
assert.equal(typeof nodefony, "object");
// check instance kernel
assert.equal(kernel instanceof nodefony.kernel, true);
assert.equal(typeof nodefony.Container, "function");
done();
});
it("INSTANCE CONTAINER", (done) => {
// YOU CAN REGISTER INSTANCE HERSELF HAS SERVICES
global.globalContainer.set("global", global.globalContainer);
let res = global.globalContainer.get("global");
assert.deepStrictEqual(res, global.globalContainer);
global.globalContainer.set("obj", myObject);
assert.deepStrictEqual(global.globalContainer.protoService.prototype.obj, myObject);
res = global.globalContainer.get("obj");
assert.deepStrictEqual(res, myObject);
const service = global.globalContainer.set("myService", new myClass());
assert.deepEqual(service.getConfig(), {
foo: "bar"
});
// parameters
global.globalContainer.setParameters("config", service.getConfig());
assert.deepEqual(global.globalContainer.getParameters("config"), service.getConfig());
assert.equal(global.globalContainer.getParameters("config.foo"), "bar");
done();
});
it("SCOPE CONTAINER", (done) => {
// CREATE SCOPE WITH NAME
global.globalContainer.addScope("request");
assert.deepEqual(global.globalContainer.scope.request, {});
// CLONE ;
global.scope = global.globalContainer.enterScope("request");
const {id} = global.scope;
assert(global.globalContainer.scope.request[id], "SCOPE ID ERROR");
assert.deepStrictEqual(global.globalContainer, global.scope.parent);
assert.deepStrictEqual(global.globalContainer.scope.request[id], global.scope);
assert.deepStrictEqual(global.scope.get("obj"), myObject);
global.scope.set("obj2", myObject2);
assert.deepStrictEqual(global.scope.get("obj2"), myObject2);
const service = global.scope.get("myService");
assert.deepEqual(service.getConfig(), {
foo: "bar"
});
assert.equal(global.globalContainer.get("obj2"), null);
// parameters
assert.deepEqual(global.scope.getParameters("config"), service.getConfig());
assert.equal(global.scope.getParameters("config.foo"), "bar");
// parameters
global.scope.setParameters("config2", service.getConfig2());
assert.equal(global.scope.getParameters("config2.browser.navigator"), "Chrome");
done();
});
it("EXTENDED SCOPE ALREADY SCOPED", (done) => {
global.scope.addScope("response");
assert.deepEqual(global.scope.scope.response, {});
// CLONE ;
const scope = global.scope.enterScopeExtended("response");
const {id} = scope;
assert(global.scope.scope.response[id], "SCOPE ID ERROR");
assert.deepStrictEqual(global.scope, scope.parent);
assert.deepStrictEqual(global.scope.scope.response[id], scope);
assert.deepStrictEqual(scope.get("obj"), null);
assert.deepStrictEqual(scope.get("obj2"), myObject2);
const myObj = {
bar: "foo"
};
scope.set("myObj", myObj);
assert.deepStrictEqual(scope.get("myObj"), myObj);
assert.equal(global.scope.get("myObj"), null);
// CHECK extended recursif
scope.addScope("websocket");
// clone
const scope2 = scope.enterScope("websocket");
assert.deepStrictEqual(scope2.get("obj2"), myObject2);
scope.removeScope("websocket");
// parameters
assert.equal(scope.getParameters("config2.browser.navigator"), "Chrome");
scope.setParameters("config2.browser.navigator", "Firefox");
assert.equal(global.scope.getParameters("config2.browser.navigator"), "Firefox");
scope.setParameters("config2.browser.navigator", "Chrome");
scope.setParameters("config2.browser.nodefony", "1.0.1");
assert.equal(scope.getParameters("config2.browser.nodefony"), "1.0.1");
assert.equal(global.scope.getParameters("config2.browser.nodefony"), "1.0.1");
done();
});
it("Leave and remove Scope ", (done) => {
global.scope.removeScope("response");
assert.deepEqual(global.scope.scope.response, undefined);
global.globalContainer.leaveScope(global.scope);
assert.deepEqual(global.scope.scope.request, {});
global.globalContainer.removeScope("request");
assert.deepEqual(global.globalContainer.scope.request, undefined);
done();
});
it("After remove scope ", (done) => {
const service = global.globalContainer.get("myService");
assert.deepEqual(service.getConfig(), {
foo: "bar"
});
assert.deepEqual(global.globalContainer.getParameters("config"), service.getConfig());
assert.equal(global.globalContainer.getParameters("config.foo"), "bar");
// parameters
global.globalContainer.setParameters("config2", service.getConfig2());
assert.equal(global.globalContainer.getParameters("config2.browser.navigator"), "Chrome");
global.globalContainer.setParameters("config2.browser.navigator", "Firefox");
assert.equal(global.globalContainer.getParameters("config2.browser.navigator"), "Firefox");
done();
});
});
});