0997e0712ac4f3ca67277f15e453c1e384c137f8
[portal/sdk.git] /
1 // 'use strict';
2
3 describe('Directive: widget', function () {
4
5   var element, scope, rootScope, isoScope, compile, provide;
6
7   function Type() {
8   }
9
10   Type.prototype = {
11     setup: function () {
12     },
13     init: function () {
14     },
15     destroy: function () {
16     }
17   };
18
19   beforeEach(function () {
20     spyOn(Type.prototype, 'setup');
21     spyOn(Type.prototype, 'init');
22     spyOn(Type.prototype, 'destroy');
23     // define mock objects here
24   });
25
26   // load the directive's module
27   beforeEach(module('ui.dashboard', function ($provide, $controllerProvider) {
28     provide = $provide;
29     // Inject dependencies like this:
30     $controllerProvider.register('DashboardWidgetCtrl', function ($scope) {
31
32     });
33
34   }));
35
36   beforeEach(inject(function ($compile, $rootScope) {
37     // Cache these for reuse
38     rootScope = $rootScope;
39     compile = $compile;
40
41     // Other setup, e.g. helper functions, etc.
42
43     // Set up the outer scope
44     scope = $rootScope.$new();
45     scope.widget = {
46       dataModelType: Type
47     };
48
49     compileTemplate = jasmine.createSpy('compileTemplate');
50     scope.compileTemplate = compileTemplate;
51   }));
52
53   function compileWidget() {
54     // Define and compile the element
55     element = angular.element('<div widget><div class="widget-content"></div></div>');
56     element = compile(element)(scope);
57     scope.$digest();
58     isoScope = element.isolateScope();
59   }
60
61   it('should create a new instance of dataModelType if provided in scope.widget', function () {
62     compileWidget();
63     expect(scope.widget.dataModel instanceof Type).toBe(true);
64   });
65
66   it('should call setup and init on the new dataModel', function () {
67     compileWidget();
68     expect(Type.prototype.setup).toHaveBeenCalled();
69     expect(Type.prototype.init).toHaveBeenCalled();
70   });
71
72   it('should call compile template', function () {
73     compileWidget();
74     expect(scope.compileTemplate).toHaveBeenCalled();
75   });
76
77   it('should create a new instance of dataModelType from string name', function () {
78     // register data model with $injector
79     provide.factory('StringNameDataModel', function () {
80       return Type;
81     });
82
83     scope.widget = {
84       dataModelType: 'StringNameDataModel'
85     };
86
87     compileWidget();
88
89     expect(scope.widget.dataModel instanceof Type).toBe(true);
90     expect(Type.prototype.setup).toHaveBeenCalled();
91     expect(Type.prototype.init).toHaveBeenCalled();
92   });
93
94   it('should validate data model type', function () {
95     scope.widget = {
96       dataModelType: {}
97     };
98
99     expect(function () {
100       compileWidget()
101     }).toThrowError();
102   });
103
104 });