]> git.proxmox.com Git - ceph.git/blame - ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/services/task-list.service.spec.ts
import ceph 16.2.6
[ceph.git] / ceph / src / pybind / mgr / dashboard / frontend / src / app / shared / services / task-list.service.spec.ts
CommitLineData
11fdf7f2
TL
1import { HttpClientTestingModule } from '@angular/common/http/testing';
2import { TestBed } from '@angular/core/testing';
3import { RouterTestingModule } from '@angular/router/testing';
4
5import { of } from 'rxjs';
6
f67539c2 7import { configureTestBed, expectItemTasks } from '~/testing/unit-test-helper';
9f95a23c 8import { RbdService } from '../api/rbd.service';
11fdf7f2
TL
9import { ExecutingTask } from '../models/executing-task';
10import { SummaryService } from './summary.service';
11import { TaskListService } from './task-list.service';
12import { TaskMessageService } from './task-message.service';
13
14describe('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});