[Test] Add tests for root registration

Add unit tests for RootRegistry and RootObjectProvider.

https://github.com/nasa/openmct/issues/1251
This commit is contained in:
Pete Richards 2016-10-14 13:12:45 -07:00
parent b0940eb33e
commit 08c0aeb2d5
4 changed files with 167 additions and 3 deletions

View File

@ -37,7 +37,7 @@ define([
composition: roots
};
});
}
};
return RootObjectProvider;
});

View File

@ -38,11 +38,14 @@ define([
.then(_.flatten);
};
function isKey(key) {
return _.isObject(key) && _.has(key, 'key') && _.has(key, 'namespace');
}
RootRegistry.prototype.addRoot = function (key) {
if (_.isObject(key) && _.has(key, 'identifier') && _.has(key, 'namespace')) {
if (isKey(key) || (_.isArray(key) && _.every(key, isKey))) {
this.providers.push(function () {
return Promise.resolve(key);
return key;
});
} else if (_.isFunction(key)) {
this.providers.push(key);

View File

@ -0,0 +1,59 @@
/*****************************************************************************
* Open MCT, Copyright (c) 2014-2016, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT 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 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.
*****************************************************************************/
define([
'../RootObjectProvider'
], function (
RootObjectProvider
) {
describe('RootObjectProvider', function () {
var rootRegistry,
rootObjectProvider;
function done() {
var isDone = false;
waitsFor(function () {
return isDone;
});
return function () {
isDone = true;
};
}
beforeEach(function () {
rootRegistry = jasmine.createSpyObj('rootRegistry', ['getRoots']);
rootRegistry.getRoots.andReturn(Promise.resolve(['some root']));
rootObjectProvider = new RootObjectProvider(rootRegistry);
});
it('supports fetching root', function () {
rootObjectProvider.get()
.then(function (root) {
expect(root).toEqual({
name: 'The root object',
type: 'root',
composition: ['some root']
});
})
.then(done());
});
});
});

View File

@ -0,0 +1,102 @@
/*****************************************************************************
* Open MCT, Copyright (c) 2014-2016, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT 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 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.
*****************************************************************************/
define([
'../RootRegistry'
], function (
RootRegistry
) {
describe('RootRegistry', function () {
var idA,
idB,
idC,
registry;
function done() {
var isDone = false;
waitsFor(function () {
return isDone;
});
return function () {
isDone = true;
};
}
beforeEach(function () {
idA = {key: 'keyA', namespace: 'something'};
idB = {key: 'keyB', namespace: 'something'};
idC = {key: 'keyC', namespace: 'something'};
registry = new RootRegistry();
});
it('can register a root by key', function () {
registry.addRoot(idA);
registry.getRoots()
.then(function (roots) {
expect(roots).toEqual([idA]);
})
.then(done());
});
it('can register multiple roots by key', function () {
registry.addRoot([idA, idB]);
registry.getRoots()
.then(function (roots) {
expect(roots).toEqual([idA, idB]);
})
.then(done());
});
it('can register an asynchronous root ', function () {
registry.addRoot(function () {
return Promise.resolve(idA);
});
registry.getRoots()
.then(function (roots) {
expect(roots).toEqual([idA]);
})
.then(done());
});
it('can register multiple asynchronous roots', function () {
registry.addRoot(function () {
return Promise.resolve([idA, idB]);
});
registry.getRoots()
.then(function (roots) {
expect(roots).toEqual([idA, idB]);
})
.then(done());
});
it('can combine different types of registration', function () {
registry.addRoot([idA, idB]);
registry.addRoot(function () {
return Promise.resolve([idC]);
});
registry.getRoots()
.then(function (roots) {
expect(roots).toEqual([idA, idB, idC]);
})
.then(done());
});
});
});