[Policy] Add spec for action decorator
Add spec for decorator which prunes out applicable actions based on policy. WTD-973.
This commit is contained in:
@@ -14,6 +14,7 @@
|
|||||||
"platform/forms",
|
"platform/forms",
|
||||||
"platform/persistence/cache",
|
"platform/persistence/cache",
|
||||||
"platform/persistence/couch",
|
"platform/persistence/couch",
|
||||||
|
"platform/policy",
|
||||||
|
|
||||||
"example/generator"
|
"example/generator"
|
||||||
]
|
]
|
||||||
|
|||||||
0
platform/policy/src/PolicyActionDecorator.js
Normal file
0
platform/policy/src/PolicyActionDecorator.js
Normal file
79
platform/policy/test/PolicyActionDecoratorSpec.js
Normal file
79
platform/policy/test/PolicyActionDecoratorSpec.js
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/
|
||||||
|
|
||||||
|
define(
|
||||||
|
["../src/PolicyActionDecorator"],
|
||||||
|
function (PolicyActionDecorator) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
describe("The policy action decorator", function () {
|
||||||
|
var mockPolicyService,
|
||||||
|
mockActionService,
|
||||||
|
testContext,
|
||||||
|
testActions,
|
||||||
|
decorator;
|
||||||
|
|
||||||
|
beforeEach(function () {
|
||||||
|
mockPolicyService = jasmine.createSpyObj(
|
||||||
|
'policyService',
|
||||||
|
['allow']
|
||||||
|
);
|
||||||
|
mockActionService = jasmine.createSpyObj(
|
||||||
|
'actionService',
|
||||||
|
['getActions']
|
||||||
|
);
|
||||||
|
|
||||||
|
// Content of actions should be irrelevant to this
|
||||||
|
// decorator, so just give it some objects to pass
|
||||||
|
// around.
|
||||||
|
testActions = [
|
||||||
|
{ someKey: "a" },
|
||||||
|
{ someKey: "b" },
|
||||||
|
{ someKey: "c" }
|
||||||
|
];
|
||||||
|
testContext = { someKey: "some value" };
|
||||||
|
|
||||||
|
mockActionService.getActions.andReturn(testActions);
|
||||||
|
mockPolicyService.allow.andReturn(true);
|
||||||
|
|
||||||
|
decorator = new PolicyActionDecorator(
|
||||||
|
mockPolicyService,
|
||||||
|
mockActionService
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("delegates to its decorated action service", function () {
|
||||||
|
decorator.getActions(testContext);
|
||||||
|
expect(mockActionService.getActions)
|
||||||
|
.toHaveBeenCalledWith(testContext);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("provides actions from its decorated action service", function () {
|
||||||
|
// Mock policy service allows everything by default,
|
||||||
|
// so everything should be returned
|
||||||
|
expect(decorator.getActions(testContext))
|
||||||
|
.toEqual(testActions);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("consults the policy service for each candidate action", function () {
|
||||||
|
decorator.getActions(testContext);
|
||||||
|
testActions.forEach(function (testAction) {
|
||||||
|
expect(mockPolicyService.allow).toHaveBeenCalledWith(
|
||||||
|
'action',
|
||||||
|
testAction,
|
||||||
|
testContext
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("filters out policy-disallowed actions", function () {
|
||||||
|
// Disallow the second action
|
||||||
|
mockPolicyService.allow.andCallFake(function (cat, candidate, ctxt) {
|
||||||
|
return candidate.someKey !== 'b';
|
||||||
|
});
|
||||||
|
expect(decorator.getActions(testContext))
|
||||||
|
.toEqual([ testActions[0], testActions[2] ]);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
[
|
[
|
||||||
|
"PolicyActionDecorator",
|
||||||
"PolicyProvider"
|
"PolicyProvider"
|
||||||
]
|
]
|
||||||
Reference in New Issue
Block a user