blob: 82a5e7a398e29cdb16e0f2d96befb4583e24afac [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');
46 });
47
Matteo Scandoloaa024ff2017-01-04 15:04:46 -080048 describe('when updating a collection', () => {
49
50 beforeEach(() => {
51 subject = new BehaviorSubject([
52 new resource({id: 1, name: 'test'})
53 ]);
54 });
55
56 it('should remove a model if it has been deleted', () => {
57 const event: IWSEvent = {
58 model: 'Test',
59 msg: {
60 object: {
61 id: 1,
62 name: 'test'
63 },
64 changed_fields: ['deleted']
65 }
66 };
67 service.updateCollection(event, subject);
68 expect(subject.value.length).toBe(0);
69 });
70
71 it('should update a model if it has been updated', () => {
72 const event: IWSEvent = {
73 model: 'Test',
74 msg: {
75 object: {
76 id: 1,
77 name: 'test-updated'
78 },
79 changed_fields: ['name']
80 }
81 };
82 service.updateCollection(event, subject);
83 expect(subject.value.length).toBe(1);
84 expect(subject.value[0].name).toBe('test-updated');
85 });
86
87 it('should add a model if it has been created', () => {
88 const event: IWSEvent = {
89 model: 'Test',
90 msg: {
91 object: {
92 id: 2,
93 name: 'another-test'
94 },
95 changed_fields: ['created']
96 }
97 };
98 service.updateCollection(event, subject);
99 expect(subject.value.length).toBe(2);
100 expect(subject.value[0].name).toBe('test');
101 expect(subject.value[1].name).toBe('another-test');
102 });
103
104 describe('when adding a model', () => {
105
106 beforeEach(() => {
107 const event: IWSEvent = {
108 model: 'Test',
109 msg: {
110 object: {
111 id: 2,
112 name: 'another-test'
113 },
114 changed_fields: ['created']
115 }
116 };
117 service.updateCollection(event, subject);
118 });
119
120 it('should create a resource', () => {
121 expect(subject.value[1].$save).toBeDefined();
122 expect(subject.value[1].$delete).toBeDefined();
123 });
124
125 xit('should automatically create the appropriate resource', () => {
126 // TODO test that the url of the resource is the correct one,
127 // use httpbackend and mock a call?? any faster way??
128 });
129 });
130 });
131
132});