summaryrefslogtreecommitdiffstats
path: root/ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/view-models/reportdashboard-page/src/components/directives/widget/widget.spec.js
blob: 0997e0712ac4f3ca67277f15e453c1e384c137f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// 'use strict';

describe('Directive: widget', function () {

  var element, scope, rootScope, isoScope, compile, provide;

  function Type() {
  }

  Type.prototype = {
    setup: function () {
    },
    init: function () {
    },
    destroy: function () {
    }
  };

  beforeEach(function () {
    spyOn(Type.prototype, 'setup');
    spyOn(Type.prototype, 'init');
    spyOn(Type.prototype, 'destroy');
    // define mock objects here
  });

  // load the directive's module
  beforeEach(module('ui.dashboard', function ($provide, $controllerProvider) {
    provide = $provide;
    // Inject dependencies like this:
    $controllerProvider.register('DashboardWidgetCtrl', function ($scope) {

    });

  }));

  beforeEach(inject(function ($compile, $rootScope) {
    // Cache these for reuse
    rootScope = $rootScope;
    compile = $compile;

    // Other setup, e.g. helper functions, etc.

    // Set up the outer scope
    scope = $rootScope.$new();
    scope.widget = {
      dataModelType: Type
    };

    compileTemplate = jasmine.createSpy('compileTemplate');
    scope.compileTemplate = compileTemplate;
  }));

  function compileWidget() {
    // Define and compile the element
    element = angular.element('<div widget><div class="widget-content"></div></div>');
    element = compile(element)(scope);
    scope.$digest();
    isoScope = element.isolateScope();
  }

  it('should create a new instance of dataModelType if provided in scope.widget', function () {
    compileWidget();
    expect(scope.widget.dataModel instanceof Type).toBe(true);
  });

  it('should call setup and init on the new dataModel', function () {
    compileWidget();
    expect(Type.prototype.setup).toHaveBeenCalled();
    expect(Type.prototype.init).toHaveBeenCalled();
  });

  it('should call compile template', function () {
    compileWidget();
    expect(scope.compileTemplate).toHaveBeenCalled();
  });

  it('should create a new instance of dataModelType from string name', function () {
    // register data model with $injector
    provide.factory('StringNameDataModel', function () {
      return Type;
    });

    scope.widget = {
      dataModelType: 'StringNameDataModel'
    };

    compileWidget();

    expect(scope.widget.dataModel instanceof Type).toBe(true);
    expect(Type.prototype.setup).toHaveBeenCalled();
    expect(Type.prototype.init).toHaveBeenCalled();
  });

  it('should validate data model type', function () {
    scope.widget = {
      dataModelType: {}
    };

    expect(function () {
      compileWidget()
    }).toThrowError();
  });

});