diff options
Diffstat (limited to 'ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.spec.js')
-rw-r--r-- | ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.spec.js | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.spec.js b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.spec.js new file mode 100644 index 00000000..151e560a --- /dev/null +++ b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/models/WidgetModel.spec.js @@ -0,0 +1,156 @@ +'use strict'; + +describe('Factory: WidgetModel', function () { + + // load the service's module + beforeEach(module('ui.dashboard')); + + // instantiate service + var WidgetModel; + beforeEach(inject(function (_WidgetModel_) { + WidgetModel = _WidgetModel_; + })); + + it('should be a function', function() { + expect(typeof WidgetModel).toEqual('function'); + }); + + describe('the constructor', function() { + var m, Class, Class2, overrides; + + beforeEach(function() { + Class = { + name: 'TestWidget', + attrs: {}, + dataAttrName: 'attr-name', + dataModelType: function TestType() {}, + dataModelOptions: {}, + style: { width: '10em' }, + settingsModalOptions: {}, + onSettingsClose: function() {}, + onSettingsDismiss: function() {}, + funkyChicken: { + cool: false, + fun: true + } + }; + + Class2 = { + name: 'TestWidget2', + attrs: {}, + dataAttrName: 'attr-name', + dataModelType: function TestType() {}, + dataModelOptions: {}, + style: { width: '10em' }, + templateUrl: 'my/url.html', + template: '<div>some template</div>' + }; + + overrides = { + style: { + width: '15em' + } + }; + spyOn(WidgetModel.prototype, 'setWidth'); + m = new WidgetModel(Class, overrides); + }); + + it('should copy class defaults, so that changes on an instance do not change the Class', function() { + m.style.width = '20em'; + expect(Class.style.width).toEqual('10em'); + }); + + it('should call setWidth', function() { + expect(WidgetModel.prototype.setWidth).toHaveBeenCalled(); + }); + + it('should take overrides as precedent over Class defaults', function() { + expect(m.style.width).toEqual('15em'); + }); + + it('should copy arbitrary data from the widget definition', function() { + expect(m.funkyChicken.cool).toEqual(false); + expect(m.funkyChicken.fun).toEqual(true); + expect(m.funkyChicken===Class.funkyChicken).toEqual(false); + }); + + it('should set templateUrl if and only if it is present on Class', function() { + var m2 = new WidgetModel(Class2, overrides); + expect(m2.templateUrl).toEqual('my/url.html'); + }); + + it('should set template if and only if it is present on Class', function() { + delete Class2.templateUrl; + var m2 = new WidgetModel(Class2, overrides); + expect(m2.template).toEqual('<div>some template</div>'); + }); + + it('should look for directive if neither templateUrl nor template is found on Class', function() { + delete Class2.templateUrl; + delete Class2.template; + Class2.directive = 'ng-bind'; + var m2 = new WidgetModel(Class2, overrides); + expect(m2.directive).toEqual('ng-bind'); + }); + + it('should set the name as directive if templateUrl, template, and directive are not defined', function() { + delete Class2.templateUrl; + delete Class2.template; + var m2 = new WidgetModel(Class2, overrides); + expect(m2.directive).toEqual('TestWidget2'); + }); + + it('should not require overrides', function() { + var fn = function() { + var m2 = new WidgetModel(Class); + } + expect(fn).not.toThrow(); + }); + + it('should copy references to settingsModalOptions, onSettingsClose, onSettingsDismiss', function() { + var m = new WidgetModel(Class); + expect(m.settingsModalOptions).toEqual(Class.settingsModalOptions); + expect(m.onSettingsClose).toEqual(Class.onSettingsClose); + expect(m.onSettingsDismiss).toEqual(Class.onSettingsDismiss); + }); + + }); + + describe('setWidth method', function() { + + var context, setWidth; + + beforeEach(function() { + context = new WidgetModel({}); + setWidth = WidgetModel.prototype.setWidth; + }); + + it('should take one argument as a string with units', function() { + setWidth.call(context, '100px'); + expect(context.containerStyle.width).toEqual('100px'); + }); + + it('should take two args as a number and string as units', function() { + setWidth.call(context, 100, 'px'); + expect(context.containerStyle.width).toEqual('100px'); + }); + + it('should return false and not set anything if width is less than 0', function() { + var result = setWidth.call(context, -100, 'em'); + expect(result).toEqual(false); + expect(context.containerStyle.width).not.toEqual('-100em'); + }); + + it('should assume % if no unit is given', function() { + setWidth.call(context, 50); + expect(context.containerStyle.width).toEqual('50%'); + }); + + it('should force greater than 0% and less than or equal 100%', function() { + setWidth.call(context, '110%'); + expect(context.containerStyle.width).toEqual('100%'); + }); + + }); + +});
\ No newline at end of file |