1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
import { TestBed } from '@angular/core/testing';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import { TodoListService, WorkItem, AzureDevOpsAccessInfo, WiqlResult, WiqlWorkItemResult, WorkItemResult } from './todo-list.service';
describe('TodoListServiceService', () => {
beforeEach(() => TestBed.configureTestingModule({
imports: [HttpClientTestingModule]
}));
it('should be created', () => {
const service: TodoListService = TestBed.get(TodoListService);
expect(service).toBeTruthy();
});
it('should work well', () => {
const service: TodoListService = TestBed.get(TodoListService);
expect(service).toBeTruthy();
const mockWorkItems: WorkItem[] = [{
id: 0,
title: 'Test work item 1',
closed: true
}, {
id: 1,
title: 'Test work item 2',
closed: false
}];
service.getWorkItemList().subscribe(data => {
expect(data).toEqual(mockWorkItems);
});
const httpController: HttpTestingController = TestBed.get(HttpTestingController);
const mockAccessInfo: AzureDevOpsAccessInfo = {
username: 'testusername',
personalAccessToken: 'testtoken',
organization: 'testorganization',
project: 'testproject'
};
httpController.expectOne('/api/TodoPage/AzureDevOpsAccessInfo').flush(mockAccessInfo);
const mockWiqlWorkItems: WiqlWorkItemResult[] = [{
id: 0,
url: `https://dev.azure.com/${mockAccessInfo.organization}/${mockAccessInfo.project}/_apis/wit/workItems/0`
}, {
id: 1,
url: `https://dev.azure.com/${mockAccessInfo.organization}/${mockAccessInfo.project}/_apis/wit/workItems/1`
}];
const authorizationHeader = 'Basic ' + btoa(mockAccessInfo.username + ':' + mockAccessInfo.personalAccessToken);
httpController.expectOne(req =>
req.url === `https://dev.azure.com/${mockAccessInfo.organization}/${mockAccessInfo.project}/_apis/wit/wiql?api-version=5.0` &&
req.headers.get('Authorization') === authorizationHeader
).flush(<WiqlResult>{ workItems: mockWiqlWorkItems });
function mapWorkItemToResult(workItem: WorkItem): WorkItemResult {
return {
id: workItem.id,
fields: {
[TodoListService.titleFieldName]: workItem.title,
[TodoListService.stateFieldName]: (workItem.closed ? 'Closed' : 'Active')
}
};
}
for (let i = 0; i < mockWorkItems.length; i++) {
httpController.expectOne(req =>
req.url === mockWiqlWorkItems[i].url &&
req.headers.get('Authorization') === authorizationHeader
).flush(mapWorkItemToResult(mockWorkItems[i]));
}
});
});
|