@elisra-devops/docgen-data-provider 1.22.0 → 1.23.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 +199 -17
  11. package/bin/modules/ResultDataProvider.js +611 -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 +815 -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
@@ -0,0 +1,478 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tfs_1 = require("../../helpers/tfs");
4
+ const ResultDataProvider_1 = require("../ResultDataProvider");
5
+ const logger_1 = require("../../utils/logger");
6
+ // Mock dependencies
7
+ jest.mock('../../helpers/tfs');
8
+ jest.mock('../../utils/logger');
9
+ jest.mock('../../utils/testStepParserHelper');
10
+ jest.mock('p-limit', () => () => (fn) => fn());
11
+ describe('ResultDataProvider', () => {
12
+ let resultDataProvider;
13
+ const mockOrgUrl = 'https://dev.azure.com/organization/';
14
+ const mockToken = 'mock-token';
15
+ const mockProjectName = 'test-project';
16
+ const mockTestPlanId = '12345';
17
+ beforeEach(() => {
18
+ jest.clearAllMocks();
19
+ resultDataProvider = new ResultDataProvider_1.default(mockOrgUrl, mockToken);
20
+ });
21
+ describe('Utility methods', () => {
22
+ describe('flattenSuites', () => {
23
+ it('should flatten a hierarchical suite structure into a single-level array', () => {
24
+ // Arrange
25
+ const suites = [
26
+ {
27
+ id: 1,
28
+ name: 'Parent 1',
29
+ children: [
30
+ { id: 2, name: 'Child 1' },
31
+ {
32
+ id: 3,
33
+ name: 'Child 2',
34
+ children: [{ id: 4, name: 'Grandchild 1' }]
35
+ }
36
+ ]
37
+ },
38
+ { id: 5, name: 'Parent 2' }
39
+ ];
40
+ // Act
41
+ const result = resultDataProvider.flattenSuites(suites);
42
+ // Assert
43
+ expect(result).toHaveLength(5);
44
+ expect(result.map(s => s.id)).toEqual([1, 2, 3, 4, 5]);
45
+ });
46
+ });
47
+ describe('filterSuites', () => {
48
+ it('should filter suites based on selected suite IDs', () => {
49
+ // Arrange
50
+ const testSuites = [
51
+ { id: 1, name: 'Suite 1', parentSuite: { id: 0 } },
52
+ { id: 2, name: 'Suite 2', parentSuite: { id: 1 } },
53
+ { id: 3, name: 'Suite 3', parentSuite: { id: 1 } }
54
+ ];
55
+ const selectedSuiteIds = [1, 3];
56
+ // Act
57
+ const result = resultDataProvider.filterSuites(testSuites, selectedSuiteIds);
58
+ // Assert
59
+ expect(result).toHaveLength(2);
60
+ expect(result.map(s => s.id)).toEqual([1, 3]);
61
+ });
62
+ it('should return all suites with parent when no suite IDs are selected', () => {
63
+ // Arrange
64
+ const testSuites = [
65
+ { id: 1, name: 'Suite 1', parentSuite: { id: 0 } },
66
+ { id: 2, name: 'Suite 2', parentSuite: { id: 1 } },
67
+ { id: 3, name: 'Suite 3', parentSuite: null }
68
+ ];
69
+ // Act
70
+ const result = resultDataProvider.filterSuites(testSuites);
71
+ // Assert
72
+ expect(result).toHaveLength(2);
73
+ expect(result.map(s => s.id)).toEqual([1, 2]);
74
+ });
75
+ });
76
+ describe('buildTestGroupName', () => {
77
+ it('should return simple suite name when hierarchy is disabled', () => {
78
+ // Arrange
79
+ const suiteMap = new Map([
80
+ [1, { id: 1, name: 'Suite 1', parentSuite: { id: 0 } }]
81
+ ]);
82
+ // Act
83
+ const result = resultDataProvider.buildTestGroupName(1, suiteMap, false);
84
+ // Assert
85
+ expect(result).toBe('Suite 1');
86
+ });
87
+ it('should build hierarchical name with parent info', () => {
88
+ // Arrange
89
+ const suiteMap = new Map([
90
+ [1, { id: 1, name: 'Parent', parentSuite: null }],
91
+ [2, { id: 2, name: 'Child', parentSuite: { id: 1 } }]
92
+ ]);
93
+ // Act
94
+ const result = resultDataProvider.buildTestGroupName(2, suiteMap, true);
95
+ // Assert
96
+ expect(result).toBe('Child');
97
+ });
98
+ it('should abbreviate deep hierarchies', () => {
99
+ // Arrange
100
+ const suiteMap = new Map([
101
+ [1, { id: 1, name: 'Root', parentSuite: null }],
102
+ [2, { id: 2, name: 'Level1', parentSuite: { id: 1 } }],
103
+ [3, { id: 3, name: 'Level2', parentSuite: { id: 2 } }],
104
+ [4, { id: 4, name: 'Level3', parentSuite: { id: 3 } }]
105
+ ]);
106
+ // Act
107
+ const result = resultDataProvider.buildTestGroupName(4, suiteMap, true);
108
+ // Assert
109
+ expect(result).toBe('Level1/.../Level3');
110
+ });
111
+ });
112
+ describe('convertRunStatus', () => {
113
+ it('should convert API status to readable format', () => {
114
+ // Arrange & Act & Assert
115
+ expect(resultDataProvider.convertRunStatus('passed')).toBe('Passed');
116
+ expect(resultDataProvider.convertRunStatus('failed')).toBe('Failed');
117
+ expect(resultDataProvider.convertRunStatus('notApplicable')).toBe('Not Applicable');
118
+ expect(resultDataProvider.convertRunStatus('unknown')).toBe('Not Run');
119
+ });
120
+ });
121
+ describe('setRunStatus', () => {
122
+ it('should return empty for shared step titles with Unspecified outcome', () => {
123
+ // Arrange
124
+ const actionResult = { outcome: 'Unspecified', isSharedStepTitle: true };
125
+ // Act
126
+ const result = resultDataProvider.setRunStatus(actionResult);
127
+ // Assert
128
+ expect(result).toBe('');
129
+ });
130
+ it('should return "Not Run" for Unspecified outcome on regular steps', () => {
131
+ // Arrange
132
+ const actionResult = { outcome: 'Unspecified', isSharedStepTitle: false };
133
+ // Act
134
+ const result = resultDataProvider.setRunStatus(actionResult);
135
+ // Assert
136
+ expect(result).toBe('Not Run');
137
+ });
138
+ it('should return the outcome for non-Unspecified outcomes', () => {
139
+ // Arrange
140
+ const actionResult = { outcome: 'Failed', isSharedStepTitle: false };
141
+ // Act
142
+ const result = resultDataProvider.setRunStatus(actionResult);
143
+ // Assert
144
+ expect(result).toBe('Failed');
145
+ });
146
+ });
147
+ describe('compareActionResults', () => {
148
+ it('should compare version-like step positions correctly', () => {
149
+ // Act & Assert
150
+ const compare = resultDataProvider.compareActionResults;
151
+ expect(compare('1', '2')).toBe(-1);
152
+ expect(compare('2', '1')).toBe(1);
153
+ expect(compare('1.1', '1.2')).toBe(-1);
154
+ expect(compare('1.2', '1.1')).toBe(1);
155
+ expect(compare('1.1', '1.1')).toBe(0);
156
+ expect(compare('1.1.1', '1.1')).toBe(1);
157
+ expect(compare('1.1', '1.1.1')).toBe(-1);
158
+ });
159
+ });
160
+ });
161
+ describe('Data fetching methods', () => {
162
+ describe('fetchTestSuites', () => {
163
+ it('should fetch and process test suites correctly', async () => {
164
+ // Arrange
165
+ const mockTestSuites = {
166
+ value: [
167
+ {
168
+ id: 1,
169
+ name: 'Root Suite',
170
+ children: [
171
+ { id: 2, name: 'Child Suite 1', parentSuite: { id: 1 } }
172
+ ]
173
+ }
174
+ ],
175
+ count: 1
176
+ };
177
+ tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(mockTestSuites);
178
+ // Act
179
+ const result = await resultDataProvider.fetchTestSuites(mockTestPlanId, mockProjectName);
180
+ // Assert
181
+ expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}${mockProjectName}/_apis/testplan/Plans/${mockTestPlanId}/Suites?asTreeView=true`, mockToken);
182
+ expect(result).toHaveLength(1);
183
+ expect(result[0]).toHaveProperty('testSuiteId', 2);
184
+ expect(result[0]).toHaveProperty('testGroupName');
185
+ });
186
+ it('should handle errors and return empty array', async () => {
187
+ // Arrange
188
+ const mockError = new Error('API error');
189
+ tfs_1.TFSServices.getItemContent.mockRejectedValueOnce(mockError);
190
+ // Act
191
+ const result = await resultDataProvider.fetchTestSuites(mockTestPlanId, mockProjectName);
192
+ // Assert
193
+ expect(logger_1.default.error).toHaveBeenCalled();
194
+ expect(result).toEqual([]);
195
+ });
196
+ });
197
+ describe('fetchTestPoints', () => {
198
+ it('should fetch and map test points correctly', async () => {
199
+ // Arrange
200
+ const mockSuiteId = '123';
201
+ const mockTestPoints = {
202
+ value: [
203
+ {
204
+ testCaseReference: { id: 1, name: 'Test Case 1' },
205
+ configuration: { name: 'Config 1' },
206
+ results: {
207
+ outcome: 'passed',
208
+ lastTestRunId: 100,
209
+ lastResultId: 200,
210
+ lastResultDetails: { dateCompleted: '2023-01-01', runBy: { displayName: 'Test User' } }
211
+ }
212
+ }
213
+ ],
214
+ count: 1
215
+ };
216
+ tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(mockTestPoints);
217
+ // Act
218
+ const result = await resultDataProvider.fetchTestPoints(mockProjectName, mockTestPlanId, mockSuiteId);
219
+ // Assert
220
+ expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}${mockProjectName}/_apis/testplan/Plans/${mockTestPlanId}/Suites/${mockSuiteId}/TestPoint?includePointDetails=true`, mockToken);
221
+ expect(result).toHaveLength(1);
222
+ expect(result[0]).toEqual({
223
+ testCaseId: 1,
224
+ testCaseName: 'Test Case 1',
225
+ configurationName: 'Config 1',
226
+ outcome: 'passed',
227
+ lastRunId: 100,
228
+ lastResultId: 200,
229
+ lastResultDetails: { dateCompleted: '2023-01-01', runBy: { displayName: 'Test User' } }
230
+ });
231
+ });
232
+ it('should handle errors and return empty array', async () => {
233
+ // Arrange
234
+ const mockSuiteId = '123';
235
+ const mockError = new Error('API error');
236
+ tfs_1.TFSServices.getItemContent.mockRejectedValueOnce(mockError);
237
+ // Act
238
+ const result = await resultDataProvider.fetchTestPoints(mockProjectName, mockTestPlanId, mockSuiteId);
239
+ // Assert
240
+ expect(logger_1.default.error).toHaveBeenCalled();
241
+ expect(result).toEqual([]);
242
+ });
243
+ });
244
+ });
245
+ describe('Data transformation methods', () => {
246
+ describe('mapTestPoint', () => {
247
+ it('should transform test point data correctly', () => {
248
+ // Arrange
249
+ const testPoint = {
250
+ testCaseReference: { id: 1, name: 'Test Case 1' },
251
+ configuration: { name: 'Config 1' },
252
+ results: {
253
+ outcome: 'passed',
254
+ lastTestRunId: 100,
255
+ lastResultId: 200,
256
+ lastResultDetails: { dateCompleted: '2023-01-01', runBy: { displayName: 'Test User' } }
257
+ }
258
+ };
259
+ // Act
260
+ const result = resultDataProvider.mapTestPoint(testPoint);
261
+ // Assert
262
+ expect(result).toEqual({
263
+ testCaseId: 1,
264
+ testCaseName: 'Test Case 1',
265
+ configurationName: 'Config 1',
266
+ outcome: 'passed',
267
+ lastRunId: 100,
268
+ lastResultId: 200,
269
+ lastResultDetails: { dateCompleted: '2023-01-01', runBy: { displayName: 'Test User' } }
270
+ });
271
+ });
272
+ it('should handle missing fields', () => {
273
+ // Arrange
274
+ const testPoint = {
275
+ testCaseReference: { id: 1, name: 'Test Case 1' }
276
+ // No configuration or results
277
+ };
278
+ // Act
279
+ const result = resultDataProvider.mapTestPoint(testPoint);
280
+ // Assert
281
+ expect(result).toEqual({
282
+ testCaseId: 1,
283
+ testCaseName: 'Test Case 1',
284
+ configurationName: undefined,
285
+ outcome: 'Not Run',
286
+ lastRunId: undefined,
287
+ lastResultId: undefined,
288
+ lastResultDetails: undefined
289
+ });
290
+ });
291
+ });
292
+ describe('calculateGroupResultSummary', () => {
293
+ it('should return empty strings when includeHardCopyRun is true', () => {
294
+ // Arrange
295
+ const testPoints = [
296
+ { outcome: 'passed' },
297
+ { outcome: 'failed' }
298
+ ];
299
+ // Act
300
+ const result = resultDataProvider.calculateGroupResultSummary(testPoints, true);
301
+ // Assert
302
+ expect(result).toEqual({
303
+ passed: '',
304
+ failed: '',
305
+ notApplicable: '',
306
+ blocked: '',
307
+ notRun: '',
308
+ total: '',
309
+ successPercentage: ''
310
+ });
311
+ });
312
+ it('should calculate summary statistics correctly', () => {
313
+ // Arrange
314
+ const testPoints = [
315
+ { outcome: 'passed' },
316
+ { outcome: 'passed' },
317
+ { outcome: 'failed' },
318
+ { outcome: 'notApplicable' },
319
+ { outcome: 'blocked' },
320
+ { outcome: 'something else' }
321
+ ];
322
+ // Act
323
+ const result = resultDataProvider.calculateGroupResultSummary(testPoints, false);
324
+ // Assert
325
+ expect(result).toEqual({
326
+ passed: 2,
327
+ failed: 1,
328
+ notApplicable: 1,
329
+ blocked: 1,
330
+ notRun: 1,
331
+ total: 6,
332
+ successPercentage: '33.33%'
333
+ });
334
+ });
335
+ it('should handle empty array', () => {
336
+ // Arrange
337
+ const testPoints = [];
338
+ // Act
339
+ const result = resultDataProvider.calculateGroupResultSummary(testPoints, false);
340
+ // Assert
341
+ expect(result).toEqual({
342
+ passed: 0,
343
+ failed: 0,
344
+ notApplicable: 0,
345
+ blocked: 0,
346
+ notRun: 0,
347
+ total: 0,
348
+ successPercentage: '0.00%'
349
+ });
350
+ });
351
+ });
352
+ describe('mapAttachmentsUrl', () => {
353
+ it('should map attachment URLs correctly', () => {
354
+ // Arrange
355
+ const mockRunResults = [
356
+ {
357
+ testCaseId: 1,
358
+ lastRunId: 100,
359
+ lastResultId: 200,
360
+ iteration: {
361
+ attachments: [
362
+ { id: 1, name: 'attachment1.png', actionPath: 'path1' }
363
+ ],
364
+ actionResults: [
365
+ { actionPath: 'path1', stepPosition: '1.1' }
366
+ ]
367
+ },
368
+ analysisAttachments: [
369
+ { id: 2, fileName: 'analysis1.txt' }
370
+ ]
371
+ }
372
+ ];
373
+ // Act
374
+ const result = resultDataProvider.mapAttachmentsUrl(mockRunResults, mockProjectName);
375
+ // Assert
376
+ expect(result[0].iteration.attachments[0].downloadUrl).toBe(`${mockOrgUrl}${mockProjectName}/_apis/test/runs/100/results/200/attachments/1/attachment1.png`);
377
+ expect(result[0].iteration.attachments[0].stepNo).toBe('1.1');
378
+ expect(result[0].analysisAttachments[0].downloadUrl).toBe(`${mockOrgUrl}${mockProjectName}/_apis/test/runs/100/results/200/attachments/2/analysis1.txt`);
379
+ });
380
+ it('should handle missing iteration', () => {
381
+ // Arrange
382
+ const mockRunResults = [
383
+ {
384
+ testCaseId: 1,
385
+ lastRunId: 100,
386
+ lastResultId: 200,
387
+ // No iteration
388
+ analysisAttachments: [
389
+ { id: 2, fileName: 'analysis1.txt' }
390
+ ]
391
+ }
392
+ ];
393
+ // Act
394
+ const result = resultDataProvider.mapAttachmentsUrl(mockRunResults, mockProjectName);
395
+ // Assert
396
+ expect(result[0]).toEqual(mockRunResults[0]);
397
+ });
398
+ });
399
+ });
400
+ describe('getCombinedResultsSummary', () => {
401
+ it('should combine all results into expected format', async () => {
402
+ // Arrange
403
+ const mockTestSuites = {
404
+ value: [
405
+ {
406
+ id: 1,
407
+ name: 'Root Suite',
408
+ children: [
409
+ { id: 2, name: 'Child Suite 1', parentSuite: { id: 1 } }
410
+ ]
411
+ }
412
+ ],
413
+ count: 1
414
+ };
415
+ const mockTestPoints = {
416
+ value: [
417
+ {
418
+ testCaseReference: { id: 1, name: 'Test Case 1' },
419
+ configuration: { name: 'Config 1' },
420
+ results: {
421
+ outcome: 'passed',
422
+ lastTestRunId: 100,
423
+ lastResultId: 200,
424
+ lastResultDetails: { dateCompleted: '2023-01-01', runBy: { displayName: 'Test User' } }
425
+ }
426
+ }
427
+ ],
428
+ count: 1
429
+ };
430
+ const mockTestCases = {
431
+ value: [
432
+ {
433
+ workItem: {
434
+ id: 1,
435
+ workItemFields: [{ key: 'Steps', value: '<steps>...</steps>' }]
436
+ }
437
+ }
438
+ ]
439
+ };
440
+ const mockResult = {
441
+ testCase: { id: 1, name: 'Test Case 1' },
442
+ testSuite: { id: 2, name: 'Child Suite 1' },
443
+ iterationDetails: [
444
+ {
445
+ actionResults: [
446
+ { stepIdentifier: '1', outcome: 'Passed', errorMessage: '', actionPath: 'path1' }
447
+ ],
448
+ attachments: []
449
+ }
450
+ ],
451
+ testCaseRevision: 1,
452
+ failureType: null,
453
+ resolutionState: null,
454
+ comment: null
455
+ };
456
+ // Setup mocks for API calls
457
+ tfs_1.TFSServices.getItemContent
458
+ .mockResolvedValueOnce(mockTestSuites) // fetchTestSuites
459
+ .mockResolvedValueOnce(mockTestPoints) // fetchTestPoints
460
+ .mockResolvedValueOnce(mockTestCases) // fetchTestCasesBySuiteId
461
+ .mockResolvedValueOnce(mockResult) // fetchResult
462
+ .mockResolvedValueOnce({ value: [] }) // fetchResult - attachments
463
+ .mockResolvedValueOnce({ fields: {} }); // fetchResult - wiByRevision
464
+ const mockTestStepParserHelper = resultDataProvider.testStepParserHelper;
465
+ mockTestStepParserHelper.parseTestSteps.mockResolvedValueOnce([
466
+ { stepId: 1, stepPosition: '1', action: 'Do something', expected: 'Something happens', isSharedStepTitle: false }
467
+ ]);
468
+ // Act
469
+ const result = await resultDataProvider.getCombinedResultsSummary(mockTestPlanId, mockProjectName, undefined, true);
470
+ // Assert
471
+ expect(result.length).toBeGreaterThan(0);
472
+ expect(result[0]).toHaveProperty('contentControl', 'test-group-summary-content-control');
473
+ expect(result[1]).toHaveProperty('contentControl', 'test-result-summary-content-control');
474
+ expect(result[2]).toHaveProperty('contentControl', 'detailed-test-result-content-control');
475
+ });
476
+ });
477
+ });
478
+ //# sourceMappingURL=ResultDataProvider.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResultDataProvider.test.js","sourceRoot":"","sources":["../../../src/modules/test/ResultDataProvider.test.ts"],"names":[],"mappings":"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"}