diff --git a/platform/identity/bundle.json b/platform/identity/bundle.json index b10e221261..1e0a9d0e03 100644 --- a/platform/identity/bundle.json +++ b/platform/identity/bundle.json @@ -2,10 +2,17 @@ "extensions": { "components": [ { + "implementation": "IdentityAggregator.js", "type": "aggregator", "provides": "identityService", "depends": [ "$q" ] } + ], + "indicators": [ + { + "implementation": "IdentityIndicator.js", + "depends": [ "identityService" ] + } ] } } diff --git a/platform/identity/src/IdentityIndicator.js b/platform/identity/src/IdentityIndicator.js new file mode 100644 index 0000000000..a39ff54849 --- /dev/null +++ b/platform/identity/src/IdentityIndicator.js @@ -0,0 +1,63 @@ +/***************************************************************************** + * 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*/ + +define( + [], + function () { + "use strict"; + + /** + * Indicator showing the currently logged-in user. + * @constructor + * @memberof platform/identity + * @implements {Indicator} + * @param {IdentityService} identityService the identity service + */ + function IdentityIndicator(identityService) { + // Track the current connection state + var self = this; + + identityService.getUser().then(function (user) { + if (user && user.key) { + self.text = user.name || user.key; + self.description = "Logged in as " + user.key; + } + }); + } + + IdentityIndicator.prototype.getGlyph = function () { + return this.text && "\u0050"; + }; + IdentityIndicator.prototype.getGlyphClass = function () { + return undefined; + }; + IdentityIndicator.prototype.getText = function () { + return this.text; + }; + IdentityIndicator.prototype.getDescription = function () { + return this.description; + }; + + return IdentityIndicator; + } +); diff --git a/platform/identity/test/IdentityIndicatorSpec.js b/platform/identity/test/IdentityIndicatorSpec.js new file mode 100644 index 0000000000..335ca69669 --- /dev/null +++ b/platform/identity/test/IdentityIndicatorSpec.js @@ -0,0 +1,76 @@ +/***************************************************************************** + * 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,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ + +define( + ["../src/IdentityIndicator"], + function (IdentityIndicator) { + "use strict"; + + describe("The identity indicator", function () { + var mockPromise, + mockIdentityService, + indicator; + + beforeEach(function () { + mockPromise = jasmine.createSpyObj('promise', ['then']); + mockIdentityService = jasmine.createSpyObj( + 'identityService', + ['getUser'] + ); + + mockIdentityService.getUser.andReturn(mockPromise); + + indicator = new IdentityIndicator(mockIdentityService); + }); + + it("shows information about the current user", function () { + mockPromise.then.mostRecentCall.args[0]({ + key: "testuserid", + name: "A User" + }); + // Should have a single character glyph + expect(indicator.getGlyph().length).toEqual(1); + expect(indicator.getGlyphClass()).toBeUndefined(); + expect(indicator.getText()).toEqual("A User"); + expect(indicator.getDescription().indexOf("testuserid")) + .not.toEqual(-1); + }); + + it("shows nothing while no user information is available", function () { + expect(indicator.getGlyph()).toBeUndefined(); + expect(indicator.getGlyphClass()).toBeUndefined(); + expect(indicator.getText()).toBeUndefined(); + expect(indicator.getDescription()).toBeUndefined(); + }); + + it("shows nothing when there is no identity information", function () { + mockPromise.then.mostRecentCall.args[0](undefined); + expect(indicator.getGlyph()).toBeUndefined(); + expect(indicator.getGlyphClass()).toBeUndefined(); + expect(indicator.getText()).toBeUndefined(); + expect(indicator.getDescription()).toBeUndefined(); + }); + + }); + } +); diff --git a/platform/identity/test/suite.json b/platform/identity/test/suite.json index 9575d0263c..f49d9f1a4a 100644 --- a/platform/identity/test/suite.json +++ b/platform/identity/test/suite.json @@ -1,3 +1,4 @@ [ - "IdentityAggregator" + "IdentityAggregator", + "IdentityIndicator" ]