From 41ecb1f8c202966381a33799c1cc0d27c05974a8 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 21 Nov 2014 11:52:14 -0800 Subject: [PATCH] [Core] Add spec for StaticModelProvider Add spec for StaticModelProvider to increase coverage in platform/core, for WTD-573. --- platform/core/bundle.json | 2 +- platform/core/src/models/RootModelProvider.js | 2 +- .../core/src/models/StaticModelProvider.js | 4 +- .../test/models/StaticModelProviderSpec.js | 66 +++++++++++++++++++ 4 files changed, 70 insertions(+), 4 deletions(-) diff --git a/platform/core/bundle.json b/platform/core/bundle.json index 1fff000281..c4bd842306 100644 --- a/platform/core/bundle.json +++ b/platform/core/bundle.json @@ -20,7 +20,7 @@ "provides": "modelService", "type": "provider", "implementation": "models/StaticModelProvider.js", - "depends": [ "models[]", "$log" ] + "depends": [ "models[]", "$q", "$log" ] }, { "provides": "modelService", diff --git a/platform/core/src/models/RootModelProvider.js b/platform/core/src/models/RootModelProvider.js index 21917d05e7..a0195205f1 100644 --- a/platform/core/src/models/RootModelProvider.js +++ b/platform/core/src/models/RootModelProvider.js @@ -4,7 +4,7 @@ * Module defining RootModelProvider. Created by vwoeltje on 11/7/14. */ define( - ['./StaticModelProvider.js'], + ['./StaticModelProvider'], function (StaticModelProvider) { "use strict"; diff --git a/platform/core/src/models/StaticModelProvider.js b/platform/core/src/models/StaticModelProvider.js index 4a434ae9ac..d5539ae5f7 100644 --- a/platform/core/src/models/StaticModelProvider.js +++ b/platform/core/src/models/StaticModelProvider.js @@ -12,7 +12,7 @@ define( * Loads static models, provided as declared extensions of bundles. * @constructor */ - function StaticModelProvider(models, $log) { + function StaticModelProvider(models, $q, $log) { var modelMap = {}; function addModelToMap(model) { @@ -54,7 +54,7 @@ define( ids.forEach(function (id) { result[id] = modelMap[id]; }); - return Promise.resolve(result); + return $q.when(result); } }; } diff --git a/platform/core/test/models/StaticModelProviderSpec.js b/platform/core/test/models/StaticModelProviderSpec.js index f6e35b7968..f7989b8b01 100644 --- a/platform/core/test/models/StaticModelProviderSpec.js +++ b/platform/core/test/models/StaticModelProviderSpec.js @@ -9,6 +9,72 @@ define( "use strict"; describe("The static model provider", function () { + var models = [ + { + "id": "a", + "model": { + "name": "Thing A", + "someProperty": "Some Value A" + } + }, + { + "id": "b", + "model": { + "name": "Thing B", + "someProperty": "Some Value B" + } + } + ], + mockLog, + mockQ, + provider; + + beforeEach(function () { + mockQ = jasmine.createSpyObj("$q", ["when"]); + mockLog = jasmine.createSpyObj("$log", ["error", "warn", "info", "debug"]); + provider = new StaticModelProvider(models, mockQ, mockLog); + }); + + it("provides models from extension declarations", function () { + var mockPromise = { then: function () { return; } }; + mockQ.when.andReturn(mockPromise); + + // Verify that we got the promise as the return value + expect(provider.getModels(["a", "b"])).toEqual(mockPromise); + + // Verify that the promise has the desired models + expect(mockQ.when.callCount).toEqual(1); + expect(mockQ.when.mostRecentCall.args[0].a.name).toEqual("Thing A"); + expect(mockQ.when.mostRecentCall.args[0].a.someProperty).toEqual("Some Value A"); + expect(mockQ.when.mostRecentCall.args[0].b.name).toEqual("Thing B"); + expect(mockQ.when.mostRecentCall.args[0].b.someProperty).toEqual("Some Value B"); + }); + + + it("does not provide models which are not in extension declarations", function () { + provider.getModels(["c"]); + + // Verify that the promise has the desired models + expect(mockQ.when.callCount).toEqual(1); + expect(mockQ.when.mostRecentCall.args[0].c).toBeUndefined(); + }); + + it("logs a warning when model definitions are malformed", function () { + // Verify precondition + expect(mockLog.warn).not.toHaveBeenCalled(); + + // Shouldn't fail with an exception + expect(new StaticModelProvider([ + { "bad": "no id" }, + { "id": "...but no model..." }, + { "model": "...and no id..." }, + { "id": -40, "model": {} }, + { "model": "should be an object", "id": "x" } + ], mockQ, mockLog)).toBeDefined(); + + // Should show warnings + expect(mockLog.warn.callCount).toEqual(5); + }); }); }