2015-11-25 17:04:11 +00:00
|
|
|
/*****************************************************************************
|
2016-07-12 23:21:58 +00:00
|
|
|
* Open MCT, Copyright (c) 2014-2016, United States Government
|
2015-11-25 17:04:11 +00:00
|
|
|
* as represented by the Administrator of the National Aeronautics and Space
|
|
|
|
* Administration. All rights reserved.
|
|
|
|
*
|
2016-07-12 23:21:58 +00:00
|
|
|
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
2015-11-25 17:04:11 +00:00
|
|
|
* "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.
|
|
|
|
*
|
2016-07-12 23:21:58 +00:00
|
|
|
* Open MCT includes source code licensed under additional open source
|
2015-11-25 17:04:11 +00:00
|
|
|
* 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.
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
define(
|
|
|
|
['../src/PersistenceAggregator'],
|
|
|
|
function (PersistenceAggregator) {
|
|
|
|
|
|
|
|
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) {
|
2016-05-19 18:29:13 +00:00
|
|
|
p.then(function (v) {
|
|
|
|
result.push(v);
|
|
|
|
});
|
2015-11-25 17:04:11 +00:00
|
|
|
});
|
|
|
|
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);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
}
|
|
|
|
);
|