mirror of
https://github.com/nasa/openmct.git
synced 2024-12-30 09:58:52 +00:00
104 lines
4.1 KiB
JavaScript
104 lines
4.1 KiB
JavaScript
|
/*****************************************************************************
|
||
|
* 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);
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
});
|
||
|
}
|
||
|
);
|