blob: 4e4507095511fd3597a2ae600f87a1ffeb1588a8 [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)
24 .service('AuthService', AuthService);
Matteo Scandoloaa024ff2017-01-04 15:04:46 -080025
26 angular.mock.module('test');
27 });
28
29 beforeEach(angular.mock.inject((
30 StoreHelpers: IStoreHelpersService,
31 _$resource_: ng.resource.IResourceService
32 ) => {
33 $resource = _$resource_;
34 resource = $resource('/test');
35 service = StoreHelpers;
36 }));
37
38 it('should have an update collection method', () => {
39 expect(service.updateCollection).toBeDefined();
40 });
41
Matteo Scandolo04964232017-01-07 12:53:46 -080042
43 it('should convert a core model name in an URL', () => {
44 expect(service.urlFromCoreModel('Slice')).toBe('/core/slices');
45 expect(service.urlFromCoreModel('Xos')).toBe('/core/xosses');
Matteo Scandolo07e2f622017-01-09 10:54:13 -080046
47 // handling exceptions
48 expect(service.urlFromCoreModel('SiteRole')).toBe('/core/site_roles');
49 expect(service.urlFromCoreModel('SliceRole')).toBe('/core/slice_roles');
50 expect(service.urlFromCoreModel('SlicePrivilege')).toBe('/core/slice_privileges');
Matteo Scandolo04964232017-01-07 12:53:46 -080051 });
52
Matteo Scandoloaa024ff2017-01-04 15:04:46 -080053 describe('when updating a collection', () => {
54
55 beforeEach(() => {
56 subject = new BehaviorSubject([
57 new resource({id: 1, name: 'test'})
58 ]);
59 });
60
61 it('should remove a model if it has been deleted', () => {
62 const event: IWSEvent = {
63 model: 'Test',
64 msg: {
65 object: {
66 id: 1,
67 name: 'test'
68 },
69 changed_fields: ['deleted']
70 }
71 };
72 service.updateCollection(event, subject);
73 expect(subject.value.length).toBe(0);
74 });
75
76 it('should update a model if it has been updated', () => {
77 const event: IWSEvent = {
78 model: 'Test',
79 msg: {
80 object: {
81 id: 1,
82 name: 'test-updated'
83 },
84 changed_fields: ['name']
85 }
86 };
87 service.updateCollection(event, subject);
88 expect(subject.value.length).toBe(1);
89 expect(subject.value[0].name).toBe('test-updated');
90 });
91
92 it('should add a model if it has been created', () => {
93 const event: IWSEvent = {
94 model: 'Test',
95 msg: {
96 object: {
97 id: 2,
98 name: 'another-test'
99 },
100 changed_fields: ['created']
101 }
102 };
103 service.updateCollection(event, subject);
104 expect(subject.value.length).toBe(2);
105 expect(subject.value[0].name).toBe('test');
106 expect(subject.value[1].name).toBe('another-test');
107 });
108
109 describe('when adding a model', () => {
110
111 beforeEach(() => {
112 const event: IWSEvent = {
113 model: 'Test',
114 msg: {
115 object: {
116 id: 2,
117 name: 'another-test'
118 },
119 changed_fields: ['created']
120 }
121 };
122 service.updateCollection(event, subject);
123 });
124
125 it('should create a resource', () => {
126 expect(subject.value[1].$save).toBeDefined();
127 expect(subject.value[1].$delete).toBeDefined();
128 });
129
130 xit('should automatically create the appropriate resource', () => {
131 // TODO test that the url of the resource is the correct one,
132 // use httpbackend and mock a call?? any faster way??
133 });
134 });
135 });
136
137});