]> git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/services/task-list.service.spec.ts
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / pybind / mgr / dashboard / frontend / src / app / shared / services / task-list.service.spec.ts
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
7 import { configureTestBed, i18nProviders } from '../../../testing/unit-test-helper';
8 import { ExecutingTask } from '../models/executing-task';
9 import { SummaryService } from './summary.service';
10 import { TaskListService } from './task-list.service';
11 import { TaskMessageService } from './task-message.service';
12
13 describe('TaskListService', () => {
14 let service: TaskListService;
15 let summaryService: SummaryService;
16 let taskMessageService: TaskMessageService;
17
18 let list: any[];
19 let apiResp: any;
20 let tasks: any[];
21
22 const addItem = (name) => {
23 apiResp.push({ name: name });
24 };
25
26 configureTestBed({
27 providers: [TaskListService, TaskMessageService, SummaryService, i18nProviders],
28 imports: [HttpClientTestingModule, RouterTestingModule]
29 });
30
31 beforeEach(() => {
32 service = TestBed.get(TaskListService);
33 summaryService = TestBed.get(SummaryService);
34 taskMessageService = TestBed.get(TaskMessageService);
35 summaryService['summaryDataSource'].next({ executing_tasks: [] });
36
37 taskMessageService.messages['test/create'] = taskMessageService.messages['rbd/create'];
38 taskMessageService.messages['test/edit'] = taskMessageService.messages['rbd/edit'];
39 taskMessageService.messages['test/delete'] = taskMessageService.messages['rbd/delete'];
40
41 tasks = [];
42 apiResp = [];
43 list = [];
44 addItem('a');
45 addItem('b');
46 addItem('c');
47
48 service.init(
49 () => of(apiResp),
50 undefined,
51 (updatedList) => (list = updatedList),
52 () => true,
53 (task) => task.name.startsWith('test'),
54 (item, task) => item.name === task.metadata['name'],
55 {
56 default: (task) => ({ name: task.metadata['name'] })
57 }
58 );
59 });
60
61 it('should be created', () => {
62 expect(service).toBeTruthy();
63 });
64
65 const addTask = (name: string, itemName: string) => {
66 const task = new ExecutingTask();
67 task.name = name;
68 task.metadata = { name: itemName };
69 tasks.push(task);
70 summaryService.addRunningTask(task);
71 };
72
73 const expectItemTasks = (item: any, executing: string) => {
74 expect(item.cdExecuting).toBe(executing);
75 };
76
77 it('gets all items without any executing items', () => {
78 expect(list.length).toBe(3);
79 expect(list.every((item) => !item.cdExecuting)).toBeTruthy();
80 });
81
82 it('gets an item from a task during creation', () => {
83 addTask('test/create', 'd');
84 expect(list.length).toBe(4);
85 expectItemTasks(list[3], 'Creating');
86 });
87
88 it('gets all items with one executing items', () => {
89 addTask('test/create', 'a');
90 expect(list.length).toBe(3);
91 expectItemTasks(list[0], 'Creating');
92 expectItemTasks(list[1], undefined);
93 expectItemTasks(list[2], undefined);
94 });
95
96 it('gets all items with multiple executing items', () => {
97 addTask('test/create', 'a');
98 addTask('test/edit', 'a');
99 addTask('test/delete', 'a');
100 addTask('test/edit', 'b');
101 addTask('test/delete', 'b');
102 addTask('test/delete', 'c');
103 expect(list.length).toBe(3);
104 expectItemTasks(list[0], 'Creating, Updating, Deleting');
105 expectItemTasks(list[1], 'Updating, Deleting');
106 expectItemTasks(list[2], 'Deleting');
107 });
108
109 it('gets all items with multiple executing tasks (not only item tasks', () => {
110 addTask('rbd/create', 'a');
111 addTask('rbd/edit', 'a');
112 addTask('test/delete', 'a');
113 addTask('test/edit', 'b');
114 addTask('rbd/delete', 'b');
115 addTask('rbd/delete', 'c');
116 expect(list.length).toBe(3);
117 expectItemTasks(list[0], 'Deleting');
118 expectItemTasks(list[1], 'Updating');
119 expectItemTasks(list[2], undefined);
120 });
121
122 it('should call ngOnDestroy', () => {
123 expect(service.summaryDataSubscription.closed).toBeFalsy();
124 service.ngOnDestroy();
125 expect(service.summaryDataSubscription.closed).toBeTruthy();
126 });
127 });