blob: b8ba6620a84822f4190ed07098bd2cd9918a6289 [file] [log] [blame]
Matteo Scandoloaa024ff2017-01-04 15:04:46 -08001import * as angular from 'angular';
2import 'angular-mocks';
3import 'angular-ui-router';
4import {StoreHelpers, IStoreHelpersService} from './store.helpers';
Matteo Scandoloaa024ff2017-01-04 15:04:46 -08005import {ModelRest} from '../rest/model.rest';
6import {BehaviorSubject} from 'rxjs';
7import {IWSEvent} from '../websocket/global';
Matteo Scandolo1c5905f2017-01-04 17:41:15 -08008import {ConfigHelpers} from '../../core/services/helpers/config.helpers';
Matteo Scandolo0a8b02e2017-01-06 14:43:36 -08009import {AuthService} from '../rest/auth.rest';
Matteo Scandoloaa024ff2017-01-04 15:04:46 -080010
11let service: IStoreHelpersService;
12let subject: BehaviorSubject<any>;
13let resource: ng.resource.IResourceClass<any>;
14let $resource: ng.resource.IResourceService;
15
16describe('The StoreHelpers service', () => {
17
18 beforeEach(() => {
19 angular
Matteo Scandolo0a8b02e2017-01-06 14:43:36 -080020 .module('test', ['ngResource', 'toastr', 'ngCookies'])
Matteo Scandolo1c5905f2017-01-04 17:41:15 -080021 .service('ConfigHelpers', ConfigHelpers) // NOTE evaluate mock
Matteo Scandoloaa024ff2017-01-04 15:04:46 -080022 .service('ModelRest', ModelRest) // NOTE evaluate mock
Matteo Scandolo0a8b02e2017-01-06 14:43:36 -080023 .service('StoreHelpers', StoreHelpers)
Matteo Scandolo828d1e82017-01-17 14:49:38 -080024 .service('AuthService', AuthService)
25 .value('AppConfig', {});
Matteo Scandoloaa024ff2017-01-04 15:04:46 -080026
27 angular.mock.module('test');
28 });
29
30 beforeEach(angular.mock.inject((
31 StoreHelpers: IStoreHelpersService,
32 _$resource_: ng.resource.IResourceService
33 ) => {
34 $resource = _$resource_;
35 resource = $resource('/test');
36 service = StoreHelpers;
37 }));
38
39 it('should have an update collection method', () => {
40 expect(service.updateCollection).toBeDefined();
41 });
42
Matteo Scandolo04964232017-01-07 12:53:46 -080043
44 it('should convert a core model name in an URL', () => {
45 expect(service.urlFromCoreModel('Slice')).toBe('/core/slices');
46 expect(service.urlFromCoreModel('Xos')).toBe('/core/xosses');
Matteo Scandolo07e2f622017-01-09 10:54:13 -080047
48 // handling exceptions
49 expect(service.urlFromCoreModel('SiteRole')).toBe('/core/site_roles');
50 expect(service.urlFromCoreModel('SliceRole')).toBe('/core/slice_roles');
51 expect(service.urlFromCoreModel('SlicePrivilege')).toBe('/core/slice_privileges');
Matteo Scandolo04964232017-01-07 12:53:46 -080052 });
53
Matteo Scandoloaa024ff2017-01-04 15:04:46 -080054 describe('when updating a collection', () => {
55
56 beforeEach(() => {
57 subject = new BehaviorSubject([
58 new resource({id: 1, name: 'test'})
59 ]);
60 });
61
62 it('should remove a model if it has been deleted', () => {
63 const event: IWSEvent = {
64 model: 'Test',
65 msg: {
66 object: {
67 id: 1,
68 name: 'test'
69 },
70 changed_fields: ['deleted']
71 }
72 };
73 service.updateCollection(event, subject);
74 expect(subject.value.length).toBe(0);
75 });
76
77 it('should update a model if it has been updated', () => {
78 const event: IWSEvent = {
79 model: 'Test',
80 msg: {
81 object: {
82 id: 1,
83 name: 'test-updated'
84 },
85 changed_fields: ['name']
86 }
87 };
88 service.updateCollection(event, subject);
89 expect(subject.value.length).toBe(1);
90 expect(subject.value[0].name).toBe('test-updated');
91 });
92
93 it('should add a model if it has been created', () => {
94 const event: IWSEvent = {
95 model: 'Test',
96 msg: {
97 object: {
98 id: 2,
99 name: 'another-test'
100 },
101 changed_fields: ['created']
102 }
103 };
104 service.updateCollection(event, subject);
105 expect(subject.value.length).toBe(2);
106 expect(subject.value[0].name).toBe('test');
107 expect(subject.value[1].name).toBe('another-test');
108 });
109
110 describe('when adding a model', () => {
111
112 beforeEach(() => {
113 const event: IWSEvent = {
114 model: 'Test',
115 msg: {
116 object: {
117 id: 2,
118 name: 'another-test'
119 },
120 changed_fields: ['created']
121 }
122 };
123 service.updateCollection(event, subject);
124 });
125
126 it('should create a resource', () => {
127 expect(subject.value[1].$save).toBeDefined();
128 expect(subject.value[1].$delete).toBeDefined();
129 });
130
131 xit('should automatically create the appropriate resource', () => {
132 // TODO test that the url of the resource is the correct one,
133 // use httpbackend and mock a call?? any faster way??
134 });
135 });
136 });
137
138});