diff --git a/platform/commonUI/edit/test/actions/CancelActionSpec.js b/platform/commonUI/edit/test/actions/CancelActionSpec.js index 6c6ab6ee22..4bcce1b016 100644 --- a/platform/commonUI/edit/test/actions/CancelActionSpec.js +++ b/platform/commonUI/edit/test/actions/CancelActionSpec.js @@ -6,7 +6,72 @@ define( "use strict"; describe("The Cancel action", function () { + var mockLocation, + mockDomainObject, + mockEditorCapability, + actionContext, + action; + function mockPromise(value) { + return { + then: function (callback) { + return mockPromise(callback(value)); + } + }; + } + + beforeEach(function () { + mockLocation = jasmine.createSpyObj( + "$location", + [ "path" ] + ); + mockDomainObject = jasmine.createSpyObj( + "domainObject", + [ "getCapability", "hasCapability" ] + ); + mockEditorCapability = jasmine.createSpyObj( + "editor", + [ "save", "cancel" ] + ); + + + actionContext = { + domainObject: mockDomainObject + }; + + mockDomainObject.hasCapability.andReturn(true); + mockDomainObject.getCapability.andReturn(mockEditorCapability); + mockEditorCapability.cancel.andReturn(mockPromise(true)); + + action = new CancelAction(mockLocation, actionContext); + + }); + + it("only applies to domain object with an editor capability", function () { + expect(CancelAction.appliesTo(actionContext)).toBeTruthy(); + expect(mockDomainObject.hasCapability).toHaveBeenCalledWith("editor"); + + mockDomainObject.hasCapability.andReturn(false); + mockDomainObject.getCapability.andReturn(undefined); + expect(CancelAction.appliesTo(actionContext)).toBeFalsy(); + }); + + it("invokes the editor capability's save functionality when performed", function () { + // Verify precondition + expect(mockEditorCapability.cancel).not.toHaveBeenCalled(); + action.perform(); + + // Should have called cancel + expect(mockEditorCapability.cancel).toHaveBeenCalled(); + + // Definitely shouldn't call save! + expect(mockEditorCapability.save).not.toHaveBeenCalled(); + }); + + it("returns to browse when performed", function () { + action.perform(); + expect(mockLocation.path).toHaveBeenCalledWith("/browse"); + }); }); } ); \ No newline at end of file diff --git a/platform/commonUI/edit/test/actions/SaveActionSpec.js b/platform/commonUI/edit/test/actions/SaveActionSpec.js index 773dc52ed6..185a3d6e1e 100644 --- a/platform/commonUI/edit/test/actions/SaveActionSpec.js +++ b/platform/commonUI/edit/test/actions/SaveActionSpec.js @@ -6,7 +6,72 @@ define( "use strict"; describe("The Save action", function () { + var mockLocation, + mockDomainObject, + mockEditorCapability, + actionContext, + action; + function mockPromise(value) { + return { + then: function (callback) { + return mockPromise(callback(value)); + } + }; + } + + beforeEach(function () { + mockLocation = jasmine.createSpyObj( + "$location", + [ "path" ] + ); + mockDomainObject = jasmine.createSpyObj( + "domainObject", + [ "getCapability", "hasCapability" ] + ); + mockEditorCapability = jasmine.createSpyObj( + "editor", + [ "save", "cancel" ] + ); + + + actionContext = { + domainObject: mockDomainObject + }; + + mockDomainObject.hasCapability.andReturn(true); + mockDomainObject.getCapability.andReturn(mockEditorCapability); + mockEditorCapability.save.andReturn(mockPromise(true)); + + action = new SaveAction(mockLocation, actionContext); + + }); + + it("only applies to domain object with an editor capability", function () { + expect(SaveAction.appliesTo(actionContext)).toBeTruthy(); + expect(mockDomainObject.hasCapability).toHaveBeenCalledWith("editor"); + + mockDomainObject.hasCapability.andReturn(false); + mockDomainObject.getCapability.andReturn(undefined); + expect(SaveAction.appliesTo(actionContext)).toBeFalsy(); + }); + + it("invokes the editor capability's save functionality when performed", function () { + // Verify precondition + expect(mockEditorCapability.save).not.toHaveBeenCalled(); + action.perform(); + + // Should have called cancel + expect(mockEditorCapability.save).toHaveBeenCalled(); + + // Also shouldn't call cancel + expect(mockEditorCapability.cancel).not.toHaveBeenCalled(); + }); + + it("returns to browse when performed", function () { + action.perform(); + expect(mockLocation.path).toHaveBeenCalledWith("/browse"); + }); }); } ); \ No newline at end of file