From a14f30c03cd6a8c2b4d3d74f1f9fee0622603edb Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 10 Nov 2015 13:43:22 -0800 Subject: [PATCH] [Persistence] Test PersistenceAggregator --- .../test/PersistenceAggregatorSpec.js | 103 ++++++++++++++++++ .../persistence/aggregator/test/suite.json | 3 + 2 files changed, 106 insertions(+) create mode 100644 platform/persistence/aggregator/test/PersistenceAggregatorSpec.js create mode 100644 platform/persistence/aggregator/test/suite.json diff --git a/platform/persistence/aggregator/test/PersistenceAggregatorSpec.js b/platform/persistence/aggregator/test/PersistenceAggregatorSpec.js new file mode 100644 index 0000000000..5e2b5c5fa8 --- /dev/null +++ b/platform/persistence/aggregator/test/PersistenceAggregatorSpec.js @@ -0,0 +1,103 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ + +/*global define,describe,beforeEach,it,jasmine,expect,spyOn */ +define( + ['../src/PersistenceAggregator'], + function (PersistenceAggregator) { + 'use strict'; + + var PERSISTENCE_SERVICE_METHODS = [ + 'listSpaces', + 'listObjects', + 'createObject', + 'readObject', + 'updateObject', + 'deleteObject' + ], + WRAPPED_METHODS = PERSISTENCE_SERVICE_METHODS.filter(function (m) { + return m !== 'listSpaces'; + }); + + function fakePromise(value) { + return (value || {}).then ? value : { + then: function (callback) { + return fakePromise(callback(value)); + } + }; + } + + describe("PersistenceAggregator", function () { + var mockQ, + mockProviders, + mockCallback, + testSpaces, + aggregator; + + beforeEach(function () { + testSpaces = ['a', 'b', 'c']; + mockQ = jasmine.createSpyObj("$q", ['all']); + mockProviders = testSpaces.map(function (space) { + var mockProvider = jasmine.createSpyObj( + 'provider-' + space, + PERSISTENCE_SERVICE_METHODS + ); + PERSISTENCE_SERVICE_METHODS.forEach(function (m) { + mockProvider[m].andReturn(fakePromise(true)); + }); + mockProvider.listSpaces.andReturn(fakePromise([space])); + return mockProvider; + }); + mockCallback = jasmine.createSpy(); + + mockQ.all.andCallFake(function (fakePromises) { + var result = []; + fakePromises.forEach(function (p) { + p.then(function (v) { result.push(v); }); + }); + return fakePromise(result); + }); + + aggregator = new PersistenceAggregator(mockQ, mockProviders); + }); + + it("exposes spaces for all providers", function () { + aggregator.listSpaces().then(mockCallback); + expect(mockCallback).toHaveBeenCalledWith(testSpaces); + }); + + WRAPPED_METHODS.forEach(function (m) { + it("redirects " + m + " calls to an appropriate provider", function () { + testSpaces.forEach(function (space, index) { + var key = 'key-' + space, + value = 'val-' + space; + expect(aggregator[m](space, key, value)) + .toEqual(mockProviders[index][m]()); + expect(mockProviders[index][m]) + .toHaveBeenCalledWith(space, key, value); + }); + }); + }); + + }); + } +); diff --git a/platform/persistence/aggregator/test/suite.json b/platform/persistence/aggregator/test/suite.json new file mode 100644 index 0000000000..7585e88ee9 --- /dev/null +++ b/platform/persistence/aggregator/test/suite.json @@ -0,0 +1,3 @@ +[ + "PersistenceAggregator" +]