From a55f8e1ab53ac33d3620df5a234fe6751733e7d8 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 10 Apr 2015 18:39:57 -0700 Subject: [PATCH] [Containment] Test compose action policy Test compose action policy, which prevents the 'compose' action when composition rules would be violated. WTD-962. --- .../test/ComposeActionPolicySpec.js | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/platform/containment/test/ComposeActionPolicySpec.js b/platform/containment/test/ComposeActionPolicySpec.js index 51c2086ddf..15a15ebad3 100644 --- a/platform/containment/test/ComposeActionPolicySpec.js +++ b/platform/containment/test/ComposeActionPolicySpec.js @@ -5,7 +5,70 @@ define( 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(); + }); }); } ); \ No newline at end of file