diff --git a/platform/core/test/views/ViewCapabilitySpec.js b/platform/core/test/views/ViewCapabilitySpec.js index 393cc68ab9..a81adf09dc 100644 --- a/platform/core/test/views/ViewCapabilitySpec.js +++ b/platform/core/test/views/ViewCapabilitySpec.js @@ -9,6 +9,30 @@ define( "use strict"; describe("A view capability", function () { + var mockViewService, + mockDomainObject, + views = [ {key: "someView"} ], + view; + + beforeEach(function () { + mockViewService = jasmine.createSpyObj( + "viewService", + [ "getViews" ] + ); + mockDomainObject = jasmine.createSpyObj( + "domainObject", + [ "getId", "getModel", "getCapability" ] + ); + mockViewService.getViews.andReturn(views); + view = new ViewCapability(mockViewService, mockDomainObject); + }); + + it("issues invocations to the view service", function () { + expect(view.invoke()).toEqual(views); + expect(mockViewService.getViews).toHaveBeenCalledWith( + mockDomainObject + ); + }); }); } diff --git a/platform/core/test/views/ViewProviderSpec.js b/platform/core/test/views/ViewProviderSpec.js index 3a1b5f0fe8..7c70f7c937 100644 --- a/platform/core/test/views/ViewProviderSpec.js +++ b/platform/core/test/views/ViewProviderSpec.js @@ -9,6 +9,67 @@ define( "use strict"; describe("The view provider", function () { + var viewA = { + key: "a" + }, + viewB = { + key: "b", + needs: [ "someCapability" ] + }, + viewC = { + key: "c", + needs: [ "someCapability" ], + delegation: true + }, + capabilities = {}, + delegates = {}, + delegation, + mockDomainObject = {}, + provider; + + beforeEach(function () { + // Simulate the expected API + mockDomainObject.hasCapability = function (c) { + return capabilities[c] !== undefined; + }; + mockDomainObject.getCapability = function (c) { + return capabilities[c]; + }; + mockDomainObject.useCapability = function (c, v) { + return capabilities[c] && capabilities[c].invoke(v); + }; + + capabilities = {}; + delegates = {}; + + delegation = { + doesDelegateCapability: function (c) { + return delegates[c] !== undefined; + } + }; + + provider = new ViewProvider([viewA, viewB, viewC]); + }); + + it("reports views provided as extensions", function () { + capabilities.someCapability = true; + expect(provider.getViews(mockDomainObject)) + .toEqual([viewA, viewB, viewC]); + }); + + it("filters views by needed capabilities", function () { + //capabilities.someCapability = true; + expect(provider.getViews(mockDomainObject)) + .toEqual([viewA]); + }); + + it("allows delegation of needed capabilities when specified", function () { + //capabilities.someCapability = true; + capabilities.delegation = delegation; + delegates.someCapability = true; + expect(provider.getViews(mockDomainObject)) + .toEqual([viewA, viewC]); + }); }); }