openmct/platform/containment/test/ComposeActionPolicySpec.js
Victor Woeltjen a55f8e1ab5 [Containment] Test compose action policy
Test compose action policy, which prevents the 'compose' action
when composition rules would be violated. WTD-962.
2015-04-10 18:39:57 -07:00

74 lines
2.9 KiB
JavaScript

/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/
define(
["../src/ComposeActionPolicy"],
function (ComposeActionPolicy) {
"use strict";
describe("The compose action policy", function () {
var mockInjector,
mockPolicyService,
mockTypes,
mockDomainObjects,
mockAction,
testContext,
policy;
beforeEach(function () {
mockInjector = jasmine.createSpyObj('$injector', ['get']);
mockPolicyService = jasmine.createSpyObj(
'policyService',
[ 'allow' ]
);
mockTypes = ['a', 'b'].map(function (type) {
var mockType = jasmine.createSpyObj('type-' + type, ['getKey']);
mockType.getKey.andReturn(type);
return mockType;
});
mockDomainObjects = ['a', 'b'].map(function (id, index) {
var mockDomainObject = jasmine.createSpyObj(
'domainObject-' + id,
['getId', 'getCapability']
);
mockDomainObject.getId.andReturn(id);
mockDomainObject.getCapability.andCallFake(function (c) {
return c === 'type' && mockTypes[index];
});
return mockDomainObject;
});
mockAction = jasmine.createSpyObj('action', ['getMetadata']);
testContext = {
key: 'compose',
domainObject: mockDomainObjects[0],
selectedObject: mockDomainObjects[1]
};
mockAction.getMetadata.andReturn(testContext);
mockInjector.get.andCallFake(function (service) {
return service === 'policyService' && mockPolicyService;
});
policy = new ComposeActionPolicy(mockInjector);
});
it("defers to composition policy", function () {
mockPolicyService.allow.andReturn(false);
expect(policy.allow(mockAction, testContext)).toBeFalsy();
mockPolicyService.allow.andReturn(true);
expect(policy.allow(mockAction, testContext)).toBeTruthy();
expect(mockPolicyService.allow).toHaveBeenCalledWith(
'composition',
mockTypes[0],
mockTypes[1]
);
});
it("allows actions other than compose", function () {
testContext.key = 'somethingElse';
mockPolicyService.allow.andReturn(false);
expect(policy.allow(mockAction, testContext)).toBeTruthy();
});
});
}
);