openmct/platform/framework/test/register/CustomRegistrarsSpec.js
Victor Woeltjen f70fca081e [Framework] Add specs for built-in extension for run
Add tests for a built-in extension type to framework to allow app.run
to be invoked via bundle extensions. This supports stylesheet
injection, which should happen on load but isn't triggered
from any particular part of the page. WTD-591.
2015-01-14 16:33:37 -08:00

140 lines
6.0 KiB
JavaScript

/*global define,Promise,describe,it,expect,beforeEach,jasmine,waitsFor*/
/**
* CustomRegistrarsSpec. Created by vwoeltje on 11/6/14.
*/
define(
["../../src/register/CustomRegistrars"],
function (CustomRegistrars) {
"use strict";
describe("Custom registrars", function () {
var mockLog,
mockApp,
customRegistrars;
// Set up mock test dependencies
beforeEach(function () {
mockApp = jasmine.createSpyObj("app", [
"controller",
"directive",
"service",
"constant",
"config",
"run"
]);
mockLog = jasmine.createSpyObj("$log", [
"error",
"warn",
"info",
"debug"
]);
customRegistrars = new CustomRegistrars(mockApp, mockLog);
});
it("has custom registrars for Angular built-ins", function () {
expect(customRegistrars.directives).toBeTruthy();
expect(customRegistrars.controllers).toBeTruthy();
expect(customRegistrars.services).toBeTruthy();
expect(customRegistrars.routes).toBeTruthy();
expect(customRegistrars.constants).toBeTruthy();
expect(customRegistrars.runs).toBeTruthy();
});
it("invokes built-in functions on the app", function () {
// Verify preconditions, invoke, expect to have been called
expect(mockApp.directive.calls.length).toEqual(0);
customRegistrars.directives([{ key: "a" }, { key: "b" }, { key: "c" }]);
expect(mockApp.directive.calls.length).toEqual(3);
expect(mockApp.controller.calls.length).toEqual(0);
customRegistrars.controllers([{ key: "a" }, { key: "b" }, { key: "c" }]);
expect(mockApp.controller.calls.length).toEqual(3);
expect(mockApp.service.calls.length).toEqual(0);
customRegistrars.services([{ key: "a" }, { key: "b" }, { key: "c" }]);
expect(mockApp.service.calls.length).toEqual(3);
expect(mockApp.constant.calls.length).toEqual(0);
customRegistrars.constants([{ key: "a", value: "b" }, { key: "b", value: "c" }, { key: "c", value: "d" }]);
expect(mockApp.constant.calls.length).toEqual(3);
expect(mockApp.run.calls.length).toEqual(0);
customRegistrars.runs([jasmine.createSpy("a"), jasmine.createSpy("a"), jasmine.createSpy("a")]);
expect(mockApp.run.calls.length).toEqual(3);
});
it("warns when keys are not defined, then skips", function () {
// Verify preconditions, invoke, expect to have been called
expect(mockApp.directive.calls.length).toEqual(0);
customRegistrars.directives([{ key: "a" }, { }, { key: "c" }]);
expect(mockApp.directive.calls.length).toEqual(2);
expect(mockLog.warn.calls.length).toEqual(1);
expect(mockApp.controller.calls.length).toEqual(0);
customRegistrars.controllers([{ }, { }, { key: "c" }]);
expect(mockApp.controller.calls.length).toEqual(1);
expect(mockLog.warn.calls.length).toEqual(3);
expect(mockApp.service.calls.length).toEqual(0);
customRegistrars.services([{ }, { }, { }]);
expect(mockApp.service.calls.length).toEqual(0);
expect(mockLog.warn.calls.length).toEqual(6);
expect(mockApp.constant.calls.length).toEqual(0);
customRegistrars.constants([{ }, { }, { }]);
expect(mockApp.constant.calls.length).toEqual(0);
expect(mockLog.warn.calls.length).toEqual(9);
// Notably, keys are not needed for run calls
});
it("allows routes to be registered", function () {
var mockRouteProvider = jasmine.createSpyObj(
"$routeProvider",
["when", "otherwise"]
),
bundle = { path: "test/bundle", resources: "res" },
routes = [
{
when: "foo",
templateUrl: "templates/test.html",
bundle: bundle
},
{
templateUrl: "templates/default.html",
bundle: bundle
}
];
customRegistrars.routes(routes);
// Give it the route provider based on its config call
mockApp.config.calls.forEach(function (call) {
// Invoke the provided callback
call.args[0][1](mockRouteProvider);
});
// The "when" clause should have been mapped to the when method...
expect(mockRouteProvider.when).toHaveBeenCalled();
expect(mockRouteProvider.when.mostRecentCall.args[0]).toEqual("foo");
expect(mockRouteProvider.when.mostRecentCall.args[1].templateUrl)
.toEqual("test/bundle/res/templates/test.html");
// ...while the other should have been treated as a default route
expect(mockRouteProvider.otherwise).toHaveBeenCalled();
expect(mockRouteProvider.otherwise.mostRecentCall.args[0].templateUrl)
.toEqual("test/bundle/res/templates/default.html");
});
it("accepts components for service compositing", function () {
// Most relevant code will be exercised in service compositor spec
expect(customRegistrars.components).toBeTruthy();
customRegistrars.components([]);
});
});
}
);