]>
Commit | Line | Data |
---|---|---|
11fdf7f2 TL |
1 | import { HttpClientTestingModule } from '@angular/common/http/testing'; |
2 | import { TestBed } from '@angular/core/testing'; | |
3 | import { RouterTestingModule } from '@angular/router/testing'; | |
4 | ||
5 | import { of } from 'rxjs'; | |
6 | ||
f67539c2 | 7 | import { configureTestBed, expectItemTasks } from '~/testing/unit-test-helper'; |
9f95a23c | 8 | import { RbdService } from '../api/rbd.service'; |
11fdf7f2 TL |
9 | import { ExecutingTask } from '../models/executing-task'; |
10 | import { SummaryService } from './summary.service'; | |
11 | import { TaskListService } from './task-list.service'; | |
12 | import { TaskMessageService } from './task-message.service'; | |
13 | ||
14 | describe('TaskListService', () => { | |
15 | let service: TaskListService; | |
16 | let summaryService: SummaryService; | |
17 | let taskMessageService: TaskMessageService; | |
18 | ||
19 | let list: any[]; | |
20 | let apiResp: any; | |
21 | let tasks: any[]; | |
22 | ||
9f95a23c | 23 | const addItem = (name: string) => { |
11fdf7f2 TL |
24 | apiResp.push({ name: name }); |
25 | }; | |
26 | ||
27 | configureTestBed({ | |
f67539c2 | 28 | providers: [TaskListService, TaskMessageService, SummaryService, RbdService], |
11fdf7f2 TL |
29 | imports: [HttpClientTestingModule, RouterTestingModule] |
30 | }); | |
31 | ||
32 | beforeEach(() => { | |
f67539c2 TL |
33 | service = TestBed.inject(TaskListService); |
34 | summaryService = TestBed.inject(SummaryService); | |
35 | taskMessageService = TestBed.inject(TaskMessageService); | |
11fdf7f2 TL |
36 | summaryService['summaryDataSource'].next({ executing_tasks: [] }); |
37 | ||
38 | taskMessageService.messages['test/create'] = taskMessageService.messages['rbd/create']; | |
39 | taskMessageService.messages['test/edit'] = taskMessageService.messages['rbd/edit']; | |
40 | taskMessageService.messages['test/delete'] = taskMessageService.messages['rbd/delete']; | |
41 | ||
42 | tasks = []; | |
43 | apiResp = []; | |
44 | list = []; | |
45 | addItem('a'); | |
46 | addItem('b'); | |
47 | addItem('c'); | |
48 | ||
49 | service.init( | |
50 | () => of(apiResp), | |
51 | undefined, | |
52 | (updatedList) => (list = updatedList), | |
53 | () => true, | |
54 | (task) => task.name.startsWith('test'), | |
55 | (item, task) => item.name === task.metadata['name'], | |
56 | { | |
9f95a23c | 57 | default: (metadata: object) => ({ name: metadata['name'] }) |
11fdf7f2 TL |
58 | } |
59 | ); | |
60 | }); | |
61 | ||
62 | it('should be created', () => { | |
63 | expect(service).toBeTruthy(); | |
64 | }); | |
65 | ||
eafe8130 | 66 | const addTask = (name: string, itemName: string, progress?: number) => { |
11fdf7f2 TL |
67 | const task = new ExecutingTask(); |
68 | task.name = name; | |
eafe8130 | 69 | task.progress = progress; |
11fdf7f2 TL |
70 | task.metadata = { name: itemName }; |
71 | tasks.push(task); | |
72 | summaryService.addRunningTask(task); | |
73 | }; | |
74 | ||
11fdf7f2 TL |
75 | it('gets all items without any executing items', () => { |
76 | expect(list.length).toBe(3); | |
77 | expect(list.every((item) => !item.cdExecuting)).toBeTruthy(); | |
78 | }); | |
79 | ||
80 | it('gets an item from a task during creation', () => { | |
81 | addTask('test/create', 'd'); | |
82 | expect(list.length).toBe(4); | |
83 | expectItemTasks(list[3], 'Creating'); | |
84 | }); | |
85 | ||
eafe8130 TL |
86 | it('shows progress of current task if any above 0', () => { |
87 | addTask('test/edit', 'd', 97); | |
88 | addTask('test/edit', 'e', 0); | |
89 | expect(list.length).toBe(5); | |
90 | expectItemTasks(list[3], 'Updating', 97); | |
91 | expectItemTasks(list[4], 'Updating'); | |
92 | }); | |
93 | ||
11fdf7f2 TL |
94 | it('gets all items with one executing items', () => { |
95 | addTask('test/create', 'a'); | |
96 | expect(list.length).toBe(3); | |
97 | expectItemTasks(list[0], 'Creating'); | |
98 | expectItemTasks(list[1], undefined); | |
99 | expectItemTasks(list[2], undefined); | |
100 | }); | |
101 | ||
102 | it('gets all items with multiple executing items', () => { | |
103 | addTask('test/create', 'a'); | |
104 | addTask('test/edit', 'a'); | |
105 | addTask('test/delete', 'a'); | |
106 | addTask('test/edit', 'b'); | |
107 | addTask('test/delete', 'b'); | |
108 | addTask('test/delete', 'c'); | |
109 | expect(list.length).toBe(3); | |
eafe8130 TL |
110 | expectItemTasks(list[0], 'Creating..., Updating..., Deleting'); |
111 | expectItemTasks(list[1], 'Updating..., Deleting'); | |
11fdf7f2 TL |
112 | expectItemTasks(list[2], 'Deleting'); |
113 | }); | |
114 | ||
115 | it('gets all items with multiple executing tasks (not only item tasks', () => { | |
116 | addTask('rbd/create', 'a'); | |
117 | addTask('rbd/edit', 'a'); | |
118 | addTask('test/delete', 'a'); | |
119 | addTask('test/edit', 'b'); | |
120 | addTask('rbd/delete', 'b'); | |
121 | addTask('rbd/delete', 'c'); | |
122 | expect(list.length).toBe(3); | |
123 | expectItemTasks(list[0], 'Deleting'); | |
124 | expectItemTasks(list[1], 'Updating'); | |
125 | expectItemTasks(list[2], undefined); | |
126 | }); | |
127 | ||
128 | it('should call ngOnDestroy', () => { | |
129 | expect(service.summaryDataSubscription.closed).toBeFalsy(); | |
130 | service.ngOnDestroy(); | |
131 | expect(service.summaryDataSubscription.closed).toBeTruthy(); | |
132 | }); | |
133 | }); |