@elisra-devops/docgen-data-provider 1.22.0 → 1.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/bin/helpers/helper.js.map +1 -1
  2. package/bin/helpers/test/tfs.test.d.ts +1 -0
  3. package/bin/helpers/test/tfs.test.js +613 -0
  4. package/bin/helpers/test/tfs.test.js.map +1 -0
  5. package/bin/helpers/tfs.js +1 -1
  6. package/bin/helpers/tfs.js.map +1 -1
  7. package/bin/modules/GitDataProvider.js.map +1 -1
  8. package/bin/modules/PipelinesDataProvider.js +3 -2
  9. package/bin/modules/PipelinesDataProvider.js.map +1 -1
  10. package/bin/modules/ResultDataProvider.d.ts +200 -17
  11. package/bin/modules/ResultDataProvider.js +628 -195
  12. package/bin/modules/ResultDataProvider.js.map +1 -1
  13. package/bin/modules/TestDataProvider.js +7 -7
  14. package/bin/modules/TestDataProvider.js.map +1 -1
  15. package/bin/modules/TicketsDataProvider.d.ts +1 -1
  16. package/bin/modules/TicketsDataProvider.js +3 -2
  17. package/bin/modules/TicketsDataProvider.js.map +1 -1
  18. package/bin/modules/test/JfrogDataProvider.test.d.ts +1 -0
  19. package/bin/modules/test/JfrogDataProvider.test.js +110 -0
  20. package/bin/modules/test/JfrogDataProvider.test.js.map +1 -0
  21. package/bin/modules/test/ResultDataProvider.test.d.ts +1 -0
  22. package/bin/modules/test/ResultDataProvider.test.js +478 -0
  23. package/bin/modules/test/ResultDataProvider.test.js.map +1 -0
  24. package/bin/modules/test/gitDataProvider.test.js +424 -120
  25. package/bin/modules/test/gitDataProvider.test.js.map +1 -1
  26. package/bin/modules/test/managmentDataProvider.test.js +283 -28
  27. package/bin/modules/test/managmentDataProvider.test.js.map +1 -1
  28. package/bin/modules/test/pipelineDataProvider.test.js +229 -45
  29. package/bin/modules/test/pipelineDataProvider.test.js.map +1 -1
  30. package/bin/modules/test/testDataProvider.test.js +225 -81
  31. package/bin/modules/test/testDataProvider.test.js.map +1 -1
  32. package/bin/modules/test/ticketsDataProvider.test.js +310 -82
  33. package/bin/modules/test/ticketsDataProvider.test.js.map +1 -1
  34. package/package.json +1 -1
  35. package/src/helpers/helper.ts +16 -14
  36. package/src/helpers/test/tfs.test.ts +748 -0
  37. package/src/helpers/tfs.ts +1 -1
  38. package/src/modules/GitDataProvider.ts +10 -10
  39. package/src/modules/PipelinesDataProvider.ts +2 -2
  40. package/src/modules/ResultDataProvider.ts +834 -260
  41. package/src/modules/TestDataProvider.ts +8 -8
  42. package/src/modules/TicketsDataProvider.ts +5 -9
  43. package/src/modules/test/JfrogDataProvider.test.ts +171 -0
  44. package/src/modules/test/ResultDataProvider.test.ts +581 -0
  45. package/src/modules/test/gitDataProvider.test.ts +671 -187
  46. package/src/modules/test/managmentDataProvider.test.ts +386 -26
  47. package/src/modules/test/pipelineDataProvider.test.ts +281 -52
  48. package/src/modules/test/testDataProvider.test.ts +307 -105
  49. package/src/modules/test/ticketsDataProvider.test.ts +425 -129
@@ -1,31 +1,286 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const __1 = require("../..");
4
- require("dotenv").config();
5
- jest.setTimeout(60000);
6
- const orgUrl = process.env.ORG_URL;
7
- const token = process.env.PAT;
8
- const dgDataProviderAzureDevOps = new __1.default(orgUrl, token);
9
- describe("Common functions module - tests", () => {
10
- test("should return all collecttion projects", async () => {
11
- let managmentDataProvider = await dgDataProviderAzureDevOps.getMangementDataProvider();
12
- let json = await managmentDataProvider.GetProjects();
13
- expect(json.count).toBeGreaterThanOrEqual(1);
14
- });
15
- test("should return project by name", async () => {
16
- let managmentDataProvider = await dgDataProviderAzureDevOps.getMangementDataProvider();
17
- let json = await managmentDataProvider.GetProjectByName("tests");
18
- expect(json.name).toBe("tests");
19
- });
20
- test("should return project by id", async () => {
21
- let managmentDataProvider = await dgDataProviderAzureDevOps.getMangementDataProvider();
22
- let json = await managmentDataProvider.GetProjectByID("45a48633-890c-42bb-ace3-148d17806857");
23
- expect(json.name).toBe("tests");
24
- });
25
- test("should return all collecttion link types", async () => {
26
- let managmentDataProvider = await dgDataProviderAzureDevOps.getMangementDataProvider();
27
- let json = await managmentDataProvider.GetCllectionLinkTypes();
28
- expect(json.count).toBeGreaterThan(1);
29
- });
30
- }); //describe
3
+ const tfs_1 = require("../../helpers/tfs");
4
+ const MangementDataProvider_1 = require("../MangementDataProvider");
5
+ jest.mock('../../helpers/tfs');
6
+ describe('MangementDataProvider', () => {
7
+ let managementDataProvider;
8
+ const mockOrgUrl = 'https://dev.azure.com/organization/';
9
+ const mockToken = 'mock-token';
10
+ beforeEach(() => {
11
+ jest.clearAllMocks();
12
+ managementDataProvider = new MangementDataProvider_1.default(mockOrgUrl, mockToken);
13
+ });
14
+ describe('GetCllectionLinkTypes', () => {
15
+ it('should return collection link types when API call succeeds', async () => {
16
+ // Arrange
17
+ const mockResponse = {
18
+ value: [
19
+ { id: 'link-1', name: 'Child' },
20
+ { id: 'link-2', name: 'Related' }
21
+ ]
22
+ };
23
+ tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(mockResponse);
24
+ // Act
25
+ const result = await managementDataProvider.GetCllectionLinkTypes();
26
+ // Assert
27
+ expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}_apis/wit/workitemrelationtypes`, mockToken, 'get', null, null);
28
+ expect(result).toEqual(mockResponse);
29
+ });
30
+ it('should throw an error when the API call fails', async () => {
31
+ // Arrange
32
+ const expectedError = new Error('API call failed');
33
+ tfs_1.TFSServices.getItemContent.mockRejectedValueOnce(expectedError);
34
+ // Act & Assert
35
+ await expect(managementDataProvider.GetCllectionLinkTypes())
36
+ .rejects.toThrow('API call failed');
37
+ expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}_apis/wit/workitemrelationtypes`, mockToken, 'get', null, null);
38
+ });
39
+ });
40
+ describe('GetProjects', () => {
41
+ it('should return projects when API call succeeds', async () => {
42
+ // Arrange
43
+ const mockResponse = {
44
+ count: 2,
45
+ value: [
46
+ { id: 'project-1', name: 'Project One' },
47
+ { id: 'project-2', name: 'Project Two' }
48
+ ]
49
+ };
50
+ tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(mockResponse);
51
+ // Act
52
+ const result = await managementDataProvider.GetProjects();
53
+ // Assert
54
+ expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}_apis/projects?$top=1000`, mockToken);
55
+ expect(result).toEqual(mockResponse);
56
+ });
57
+ it('should throw an error when the API call fails', async () => {
58
+ // Arrange
59
+ const expectedError = new Error('Projects API call failed');
60
+ tfs_1.TFSServices.getItemContent.mockRejectedValueOnce(expectedError);
61
+ // Act & Assert
62
+ await expect(managementDataProvider.GetProjects())
63
+ .rejects.toThrow('Projects API call failed');
64
+ expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}_apis/projects?$top=1000`, mockToken);
65
+ });
66
+ });
67
+ describe('GetProjectByName', () => {
68
+ it('should return a project when project exists with given name', async () => {
69
+ // Arrange
70
+ const mockProjects = {
71
+ count: 2,
72
+ value: [
73
+ { id: 'project-1', name: 'Project One' },
74
+ { id: 'project-2', name: 'Project Two' }
75
+ ]
76
+ };
77
+ const expectedProject = { id: 'project-2', name: 'Project Two' };
78
+ // Mock GetProjects to return our mock data
79
+ jest.spyOn(managementDataProvider, 'GetProjects').mockResolvedValueOnce(mockProjects);
80
+ // Act
81
+ const result = await managementDataProvider.GetProjectByName('Project Two');
82
+ // Assert
83
+ expect(managementDataProvider.GetProjects).toHaveBeenCalledTimes(1);
84
+ expect(result).toEqual(expectedProject);
85
+ });
86
+ it('should return empty object when project does not exist with given name', async () => {
87
+ // Arrange
88
+ const mockProjects = {
89
+ count: 2,
90
+ value: [
91
+ { id: 'project-1', name: 'Project One' },
92
+ { id: 'project-2', name: 'Project Two' }
93
+ ]
94
+ };
95
+ // Mock GetProjects to return our mock data
96
+ jest.spyOn(managementDataProvider, 'GetProjects').mockResolvedValueOnce(mockProjects);
97
+ // Act
98
+ const result = await managementDataProvider.GetProjectByName('Non-Existent Project');
99
+ // Assert
100
+ expect(managementDataProvider.GetProjects).toHaveBeenCalledTimes(1);
101
+ expect(result).toEqual({});
102
+ });
103
+ it('should return empty object and log error when GetProjects throws', async () => {
104
+ // Arrange
105
+ const expectedError = new Error('Projects API call failed');
106
+ // Mock GetProjects to throw an error
107
+ jest.spyOn(managementDataProvider, 'GetProjects').mockRejectedValueOnce(expectedError);
108
+ // Mock console.log to capture the error
109
+ const consoleLogSpy = jest.spyOn(console, 'log');
110
+ // Act
111
+ const result = await managementDataProvider.GetProjectByName('Any Project');
112
+ // Assert
113
+ expect(managementDataProvider.GetProjects).toHaveBeenCalledTimes(1);
114
+ expect(consoleLogSpy).toHaveBeenCalledWith(expectedError);
115
+ expect(result).toEqual({});
116
+ });
117
+ });
118
+ describe('GetProjectByID', () => {
119
+ it('should return a project when API call succeeds', async () => {
120
+ // Arrange
121
+ const projectId = 'project-123';
122
+ const mockResponse = { id: projectId, name: 'Project 123' };
123
+ tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(mockResponse);
124
+ // Act
125
+ const result = await managementDataProvider.GetProjectByID(projectId);
126
+ // Assert
127
+ expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}_apis/projects/${projectId}`, mockToken);
128
+ expect(result).toEqual(mockResponse);
129
+ });
130
+ it('should throw an error when the API call fails', async () => {
131
+ // Arrange
132
+ const projectId = 'project-123';
133
+ const expectedError = new Error('Project API call failed');
134
+ tfs_1.TFSServices.getItemContent.mockRejectedValueOnce(expectedError);
135
+ // Act & Assert
136
+ await expect(managementDataProvider.GetProjectByID(projectId))
137
+ .rejects.toThrow('Project API call failed');
138
+ expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}_apis/projects/${projectId}`, mockToken);
139
+ });
140
+ });
141
+ describe('GetUserProfile', () => {
142
+ it('should return user profile when API call succeeds', async () => {
143
+ // Arrange
144
+ const mockResponse = {
145
+ id: 'user-123',
146
+ displayName: 'Test User',
147
+ emailAddress: 'test@example.com'
148
+ };
149
+ tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(mockResponse);
150
+ // Act
151
+ const result = await managementDataProvider.GetUserProfile();
152
+ // Assert
153
+ expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}_api/_common/GetUserProfile?__v=5`, mockToken);
154
+ expect(result).toEqual(mockResponse);
155
+ });
156
+ it('should throw an error when the API call fails', async () => {
157
+ // Arrange
158
+ const expectedError = new Error('User profile API call failed');
159
+ tfs_1.TFSServices.getItemContent.mockRejectedValueOnce(expectedError);
160
+ // Act & Assert
161
+ await expect(managementDataProvider.GetUserProfile())
162
+ .rejects.toThrow('User profile API call failed');
163
+ expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}_api/_common/GetUserProfile?__v=5`, mockToken);
164
+ });
165
+ });
166
+ it('should initialize with the provided organization URL and token', () => {
167
+ // Arrange
168
+ const customOrgUrl = 'https://dev.azure.com/custom-org/';
169
+ const customToken = 'custom-token';
170
+ // Act
171
+ const provider = new MangementDataProvider_1.default(customOrgUrl, customToken);
172
+ // Assert
173
+ expect(provider.orgUrl).toBe(customOrgUrl);
174
+ expect(provider.token).toBe(customToken);
175
+ });
176
+ });
177
+ describe('MangementDataProvider - Additional Tests', () => {
178
+ let managementDataProvider;
179
+ const mockOrgUrl = 'https://dev.azure.com/organization/';
180
+ const mockToken = 'mock-token';
181
+ beforeEach(() => {
182
+ jest.clearAllMocks();
183
+ managementDataProvider = new MangementDataProvider_1.default(mockOrgUrl, mockToken);
184
+ });
185
+ describe('GetProjectByName - Edge Cases', () => {
186
+ it('should return empty object when projects list is empty', async () => {
187
+ // Arrange
188
+ const mockEmptyProjects = {
189
+ count: 0,
190
+ value: []
191
+ };
192
+ jest.spyOn(managementDataProvider, 'GetProjects').mockResolvedValueOnce(mockEmptyProjects);
193
+ // Act
194
+ const result = await managementDataProvider.GetProjectByName('Any Project');
195
+ // Assert
196
+ expect(managementDataProvider.GetProjects).toHaveBeenCalledTimes(1);
197
+ expect(result).toEqual({});
198
+ });
199
+ it('should handle projects response with missing value property', async () => {
200
+ // Arrange
201
+ const mockInvalidProjects = {
202
+ count: 0
203
+ // no value property
204
+ };
205
+ jest.spyOn(managementDataProvider, 'GetProjects').mockResolvedValueOnce(mockInvalidProjects);
206
+ // Mock console.log to capture the error
207
+ const consoleLogSpy = jest.spyOn(console, 'log');
208
+ // Act
209
+ const result = await managementDataProvider.GetProjectByName('Any Project');
210
+ // Assert
211
+ expect(result).toEqual({});
212
+ expect(consoleLogSpy).toHaveBeenCalled();
213
+ });
214
+ it('should be case sensitive when matching project names', async () => {
215
+ // Arrange
216
+ const mockProjects = {
217
+ count: 1,
218
+ value: [
219
+ { id: 'project-1', name: 'Project One' }
220
+ ]
221
+ };
222
+ jest.spyOn(managementDataProvider, 'GetProjects').mockResolvedValueOnce(mockProjects);
223
+ // Act
224
+ const result = await managementDataProvider.GetProjectByName('project one'); // lowercase vs Project One
225
+ // Assert
226
+ expect(result).toEqual({});
227
+ });
228
+ });
229
+ describe('GetProjectByID - Edge Cases', () => {
230
+ it('should handle project IDs with special characters', async () => {
231
+ // Arrange
232
+ const projectId = 'project/with-special_chars%123';
233
+ const mockResponse = { id: projectId, name: 'Special Project' };
234
+ tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(mockResponse);
235
+ // Act
236
+ const result = await managementDataProvider.GetProjectByID(projectId);
237
+ // Assert
238
+ expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}_apis/projects/${projectId}`, mockToken);
239
+ expect(result).toEqual(mockResponse);
240
+ });
241
+ });
242
+ describe('Url Construction', () => {
243
+ it('should handle orgUrl with trailing slash properly', async () => {
244
+ // Arrange
245
+ const orgUrlWithTrailingSlash = 'https://dev.azure.com/organization/';
246
+ const provider = new MangementDataProvider_1.default(orgUrlWithTrailingSlash, mockToken);
247
+ const mockResponse = { value: [] };
248
+ tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(mockResponse);
249
+ // Act
250
+ await provider.GetCllectionLinkTypes();
251
+ // Assert
252
+ expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${orgUrlWithTrailingSlash}_apis/wit/workitemrelationtypes`, mockToken, 'get', null, null);
253
+ });
254
+ it('should handle orgUrl without trailing slash properly', async () => {
255
+ // Arrange
256
+ const orgUrlWithoutTrailingSlash = 'https://dev.azure.com/organization';
257
+ const provider = new MangementDataProvider_1.default(orgUrlWithoutTrailingSlash, mockToken);
258
+ const mockResponse = { value: [] };
259
+ tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(mockResponse);
260
+ // Act
261
+ await provider.GetCllectionLinkTypes();
262
+ // Assert
263
+ expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${orgUrlWithoutTrailingSlash}_apis/wit/workitemrelationtypes`, mockToken, 'get', null, null);
264
+ });
265
+ });
266
+ describe('GetUserProfile - Edge Cases', () => {
267
+ it('should handle unusual profile data structure', async () => {
268
+ // Arrange
269
+ const unusualProfileData = {
270
+ // Missing typical fields like displayName
271
+ id: 'user-123',
272
+ // Contains unexpected fields
273
+ unusualField: 'unusual value',
274
+ nestedData: {
275
+ someProperty: 'some value'
276
+ }
277
+ };
278
+ tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(unusualProfileData);
279
+ // Act
280
+ const result = await managementDataProvider.GetUserProfile();
281
+ // Assert
282
+ expect(result).toEqual(unusualProfileData);
283
+ });
284
+ });
285
+ });
31
286
  //# sourceMappingURL=managmentDataProvider.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"managmentDataProvider.test.js","sourceRoot":"","sources":["../../../src/modules/test/managmentDataProvider.test.ts"],"names":[],"mappings":";;AAAA,6BAA8C;AAE9C,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;AAC3B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAEvB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACnC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAC9B,MAAM,yBAAyB,GAAG,IAAI,WAAyB,CAAC,MAAM,EAAC,KAAK,CAAC,CAAC;AAG9E,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACxD,IAAI,qBAAqB,GAAG,MAAM,yBAAyB,CAAC,wBAAwB,EAAE,CAAC;QACvF,IAAI,IAAI,GAAG,MAAM,qBAAqB,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC/C,IAAI,qBAAqB,GAAG,MAAM,yBAAyB,CAAC,wBAAwB,EAAE,CAAC;QACvF,IAAI,IAAI,GAAG,MAAM,qBAAqB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC7C,IAAI,qBAAqB,GAAG,MAAM,yBAAyB,CAAC,wBAAwB,EAAE,CAAC;QACvF,IAAI,IAAI,GAAG,MAAM,qBAAqB,CAAC,cAAc,CACnD,sCAAsC,CACvC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QAC1D,IAAI,qBAAqB,GAAG,MAAM,yBAAyB,CAAC,wBAAwB,EAAE,CAAC;QACvF,IAAI,IAAI,GAAG,MAAM,qBAAqB,CAAC,qBAAqB,EAAE,CAAC;QAC/D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC,CAAC,UAAU"}
1
+ {"version":3,"file":"managmentDataProvider.test.js","sourceRoot":"","sources":["../../../src/modules/test/managmentDataProvider.test.ts"],"names":[],"mappings":"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"}
@@ -1,53 +1,237 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const __1 = require("../..");
4
- require('dotenv').config();
5
- jest.setTimeout(60000);
6
- const orgUrl = process.env.ORG_URL;
7
- const token = process.env.PAT;
8
- const dgDataProviderAzureDevOps = new __1.default(orgUrl, token);
9
- describe('pipeline module - tests', () => {
10
- test('should return pipeline info', async () => {
11
- let pipelinesDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
12
- let json = await pipelinesDataProvider.getPipelineBuildByBuildId('tests', 244);
13
- expect(json.id).toBe(244);
3
+ const tfs_1 = require("../../helpers/tfs");
4
+ const PipelinesDataProvider_1 = require("../PipelinesDataProvider");
5
+ const logger_1 = require("../../utils/logger");
6
+ jest.mock('../../helpers/tfs');
7
+ jest.mock('../../utils/logger');
8
+ jest.mock('../GitDataProvider');
9
+ describe('PipelinesDataProvider', () => {
10
+ let pipelinesDataProvider;
11
+ const mockOrgUrl = 'https://dev.azure.com/orgname/';
12
+ const mockToken = 'mock-token';
13
+ beforeEach(() => {
14
+ jest.clearAllMocks();
15
+ pipelinesDataProvider = new PipelinesDataProvider_1.default(mockOrgUrl, mockToken);
14
16
  });
15
- test('should return Release definition', async () => {
16
- let pipelinesDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
17
- let json = await pipelinesDataProvider.GetReleaseByReleaseId('tests', 1);
18
- expect(json.id).toBe(1);
17
+ describe('isMatchingPipeline', () => {
18
+ // Create test method to access private method
19
+ const invokeIsMatchingPipeline = (fromPipeline, targetPipeline, searchPrevPipelineFromDifferentCommit) => {
20
+ return pipelinesDataProvider.isMatchingPipeline(fromPipeline, targetPipeline, searchPrevPipelineFromDifferentCommit);
21
+ };
22
+ it('should return false when repository IDs are different', () => {
23
+ // Arrange
24
+ const fromPipeline = {
25
+ resources: {
26
+ repositories: {
27
+ '0': {
28
+ self: {
29
+ repository: { id: 'repo1' },
30
+ version: 'v1',
31
+ refName: 'refs/heads/main'
32
+ }
33
+ }
34
+ }
35
+ }
36
+ };
37
+ const targetPipeline = {
38
+ resources: {
39
+ repositories: {
40
+ '0': {
41
+ self: {
42
+ repository: { id: 'repo2' },
43
+ version: 'v1',
44
+ refName: 'refs/heads/main'
45
+ }
46
+ }
47
+ }
48
+ }
49
+ };
50
+ // Act
51
+ const result = invokeIsMatchingPipeline(fromPipeline, targetPipeline, false);
52
+ // Assert
53
+ expect(result).toBe(false);
54
+ });
55
+ it('should return true when versions are the same and searchPrevPipelineFromDifferentCommit is false', () => {
56
+ // Arrange
57
+ const fromPipeline = {
58
+ resources: {
59
+ repositories: {
60
+ '0': {
61
+ self: {
62
+ repository: { id: 'repo1' },
63
+ version: 'v1',
64
+ refName: 'refs/heads/main'
65
+ }
66
+ }
67
+ }
68
+ }
69
+ };
70
+ const targetPipeline = {
71
+ resources: {
72
+ repositories: {
73
+ '0': {
74
+ self: {
75
+ repository: { id: 'repo1' },
76
+ version: 'v1',
77
+ refName: 'refs/heads/main'
78
+ }
79
+ }
80
+ }
81
+ }
82
+ };
83
+ // Act
84
+ const result = invokeIsMatchingPipeline(fromPipeline, targetPipeline, false);
85
+ // Assert
86
+ expect(result).toBe(true);
87
+ });
88
+ it('should return false when versions are the same and searchPrevPipelineFromDifferentCommit is true', () => {
89
+ // Arrange
90
+ const fromPipeline = {
91
+ resources: {
92
+ repositories: {
93
+ '0': {
94
+ self: {
95
+ repository: { id: 'repo1' },
96
+ version: 'v1',
97
+ refName: 'refs/heads/main'
98
+ }
99
+ }
100
+ }
101
+ }
102
+ };
103
+ const targetPipeline = {
104
+ resources: {
105
+ repositories: {
106
+ '0': {
107
+ self: {
108
+ repository: { id: 'repo1' },
109
+ version: 'v1',
110
+ refName: 'refs/heads/main'
111
+ }
112
+ }
113
+ }
114
+ }
115
+ };
116
+ // Act
117
+ const result = invokeIsMatchingPipeline(fromPipeline, targetPipeline, true);
118
+ // Assert
119
+ expect(result).toBe(false);
120
+ });
121
+ it('should return true when refNames match but versions differ', () => {
122
+ // Arrange
123
+ const fromPipeline = {
124
+ resources: {
125
+ repositories: {
126
+ '0': {
127
+ self: {
128
+ repository: { id: 'repo1' },
129
+ version: 'v1',
130
+ refName: 'refs/heads/main'
131
+ }
132
+ }
133
+ }
134
+ }
135
+ };
136
+ const targetPipeline = {
137
+ resources: {
138
+ repositories: {
139
+ '0': {
140
+ self: {
141
+ repository: { id: 'repo1' },
142
+ version: 'v2',
143
+ refName: 'refs/heads/main'
144
+ }
145
+ }
146
+ }
147
+ }
148
+ };
149
+ // Act
150
+ const result = invokeIsMatchingPipeline(fromPipeline, targetPipeline, true);
151
+ // Assert
152
+ expect(result).toBe(true);
153
+ });
154
+ it('should use __designer_repo when self is not available', () => {
155
+ // Arrange
156
+ const fromPipeline = {
157
+ resources: {
158
+ repositories: {
159
+ __designer_repo: {
160
+ repository: { id: 'repo1' },
161
+ version: 'v1',
162
+ refName: 'refs/heads/main'
163
+ }
164
+ }
165
+ }
166
+ };
167
+ const targetPipeline = {
168
+ resources: {
169
+ repositories: {
170
+ __designer_repo: {
171
+ repository: { id: 'repo1' },
172
+ version: 'v1',
173
+ refName: 'refs/heads/main'
174
+ }
175
+ }
176
+ }
177
+ };
178
+ // Act
179
+ const result = invokeIsMatchingPipeline(fromPipeline, targetPipeline, false);
180
+ // Assert
181
+ expect(result).toBe(true);
182
+ });
19
183
  });
20
- test('should return OK(200) as response ', async () => {
21
- let PipelineDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
22
- let result = await PipelineDataProvider.TriggerBuildById('tests', '14', '{"test":"param1","age":"26","name":"denis" }');
23
- expect(result.status).toBe(200);
184
+ describe('getPipelineRunDetails', () => {
185
+ it('should call TFSServices.getItemContent with correct parameters', async () => {
186
+ // Arrange
187
+ const projectName = 'project1';
188
+ const pipelineId = 123;
189
+ const runId = 456;
190
+ const mockResponse = { id: runId, resources: {} };
191
+ tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(mockResponse);
192
+ // Act
193
+ const result = await pipelinesDataProvider.getPipelineRunDetails(projectName, pipelineId, runId);
194
+ // Assert
195
+ expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}${projectName}/_apis/pipelines/${pipelineId}/runs/${runId}`, mockToken);
196
+ expect(result).toEqual(mockResponse);
197
+ });
24
198
  });
25
- test('should the path to zip file as response ', async () => {
26
- let PipelineDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
27
- let result = await PipelineDataProvider.GetArtifactByBuildId('tests', '245', //buildId
28
- '_tests' //artifactName
29
- );
30
- expect(result).toBeDefined();
31
- });
32
- test('should return pipeline run history ', async () => {
33
- let PipelineDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
34
- let json = await PipelineDataProvider.GetPipelineRunHistory('tests', '14');
35
- expect(json).toBeDefined();
36
- });
37
- test('should return release defenition history ', async () => {
38
- let PipelineDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
39
- let json = await PipelineDataProvider.GetReleaseHistory('tests', '1');
40
- expect(json).toBeDefined();
41
- });
42
- test('should return all pipelines ', async () => {
43
- let PipelineDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
44
- let json = await PipelineDataProvider.GetAllPipelines('tests');
45
- expect(json).toBeDefined();
46
- });
47
- test('should return all releaseDefenitions ', async () => {
48
- let PipelineDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
49
- let json = await PipelineDataProvider.GetAllReleaseDefenitions('tests');
50
- expect(json).toBeDefined();
199
+ describe('GetPipelineRunHistory', () => {
200
+ it('should return filtered pipeline run history', async () => {
201
+ // Arrange
202
+ const projectName = 'project1';
203
+ const pipelineId = '123';
204
+ const mockResponse = {
205
+ value: [
206
+ { id: 1, result: 'succeeded' },
207
+ { id: 2, result: 'failed' },
208
+ { id: 3, result: 'canceled' },
209
+ { id: 4, result: 'succeeded' }
210
+ ]
211
+ };
212
+ tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(mockResponse);
213
+ // Act
214
+ const result = await pipelinesDataProvider.GetPipelineRunHistory(projectName, pipelineId);
215
+ // Assert
216
+ expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}${projectName}/_apis/pipelines/${pipelineId}/runs`, mockToken, 'get', null, null);
217
+ expect(result).toEqual({
218
+ count: 4, // Note: Current filter logic keeps all runs where result is not 'failed' AND not 'canceled'
219
+ value: mockResponse.value
220
+ });
221
+ });
222
+ it('should handle API errors gracefully', async () => {
223
+ // Arrange
224
+ const projectName = 'project1';
225
+ const pipelineId = '123';
226
+ const expectedError = new Error('API error');
227
+ tfs_1.TFSServices.getItemContent.mockRejectedValueOnce(expectedError);
228
+ // Act
229
+ const result = await pipelinesDataProvider.GetPipelineRunHistory(projectName, pipelineId);
230
+ // Assert
231
+ expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}${projectName}/_apis/pipelines/${pipelineId}/runs`, mockToken, 'get', null, null);
232
+ expect(logger_1.default.error).toHaveBeenCalledWith(`Could not fetch Pipeline Run History: ${expectedError.message}`);
233
+ expect(result).toBeUndefined();
234
+ });
51
235
  });
52
236
  });
53
237
  //# sourceMappingURL=pipelineDataProvider.test.js.map