@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,63 +1,292 @@
1
- import DgDataProviderAzureDevOps from '../..';
1
+ import { PipelineRun } from '../../models/tfs-data';
2
+ import { TFSServices } from '../../helpers/tfs';
3
+ import PipelinesDataProvider from '../PipelinesDataProvider';
4
+ import GitDataProvider from '../GitDataProvider';
5
+ import logger from '../../utils/logger';
2
6
 
3
- require('dotenv').config();
4
- jest.setTimeout(60000);
7
+ jest.mock('../../helpers/tfs');
8
+ jest.mock('../../utils/logger');
9
+ jest.mock('../GitDataProvider');
5
10
 
6
- const orgUrl = process.env.ORG_URL;
7
- const token = process.env.PAT;
8
- const dgDataProviderAzureDevOps = new DgDataProviderAzureDevOps(orgUrl, token);
11
+ describe('PipelinesDataProvider', () => {
12
+ let pipelinesDataProvider: PipelinesDataProvider;
13
+ const mockOrgUrl = 'https://dev.azure.com/orgname/';
14
+ const mockToken = 'mock-token';
9
15
 
10
- describe('pipeline module - tests', () => {
11
- test('should return pipeline info', async () => {
12
- let pipelinesDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
13
- let json = await pipelinesDataProvider.getPipelineBuildByBuildId('tests', 244);
14
- expect(json.id).toBe(244);
15
- });
16
- test('should return Release definition', async () => {
17
- let pipelinesDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
18
- let json = await pipelinesDataProvider.GetReleaseByReleaseId('tests', 1);
19
- expect(json.id).toBe(1);
20
- });
21
- test('should return OK(200) as response ', async () => {
22
- let PipelineDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
23
- let result = await PipelineDataProvider.TriggerBuildById(
24
- 'tests',
25
- '14',
26
- '{"test":"param1","age":"26","name":"denis" }'
27
- );
28
- expect(result.status).toBe(200);
29
- });
30
- test('should the path to zip file as response ', async () => {
31
- let PipelineDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
32
- let result = await PipelineDataProvider.GetArtifactByBuildId(
33
- 'tests',
34
- '245', //buildId
35
- '_tests' //artifactName
36
- );
37
- expect(result).toBeDefined();
16
+ beforeEach(() => {
17
+ jest.clearAllMocks();
18
+ pipelinesDataProvider = new PipelinesDataProvider(mockOrgUrl, mockToken);
38
19
  });
39
20
 
40
- test('should return pipeline run history ', async () => {
41
- let PipelineDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
42
- let json = await PipelineDataProvider.GetPipelineRunHistory('tests', '14');
43
- expect(json).toBeDefined();
44
- });
21
+ describe('isMatchingPipeline', () => {
22
+ // Create test method to access private method
23
+ const invokeIsMatchingPipeline = (
24
+ fromPipeline: PipelineRun,
25
+ targetPipeline: PipelineRun,
26
+ searchPrevPipelineFromDifferentCommit: boolean
27
+ ): boolean => {
28
+ return (pipelinesDataProvider as any).isMatchingPipeline(
29
+ fromPipeline,
30
+ targetPipeline,
31
+ searchPrevPipelineFromDifferentCommit
32
+ );
33
+ };
34
+
35
+ it('should return false when repository IDs are different', () => {
36
+ // Arrange
37
+ const fromPipeline = {
38
+ resources: {
39
+ repositories: {
40
+ '0': {
41
+ self: {
42
+ repository: { id: 'repo1' },
43
+ version: 'v1',
44
+ refName: 'refs/heads/main'
45
+ }
46
+ }
47
+ }
48
+ }
49
+ } as unknown as PipelineRun;
50
+
51
+ const targetPipeline = {
52
+ resources: {
53
+ repositories: {
54
+ '0': {
55
+ self: {
56
+ repository: { id: 'repo2' },
57
+ version: 'v1',
58
+ refName: 'refs/heads/main'
59
+ }
60
+ }
61
+ }
62
+ }
63
+ } as unknown as PipelineRun;
64
+
65
+ // Act
66
+ const result = invokeIsMatchingPipeline(fromPipeline, targetPipeline, false);
67
+
68
+ // Assert
69
+ expect(result).toBe(false);
70
+ });
71
+
72
+ it('should return true when versions are the same and searchPrevPipelineFromDifferentCommit is false', () => {
73
+ // Arrange
74
+ const fromPipeline = {
75
+ resources: {
76
+ repositories: {
77
+ '0': {
78
+ self: {
79
+ repository: { id: 'repo1' },
80
+ version: 'v1',
81
+ refName: 'refs/heads/main'
82
+ }
83
+ }
84
+ }
85
+ }
86
+ } as unknown as PipelineRun;
87
+
88
+ const targetPipeline = {
89
+ resources: {
90
+ repositories: {
91
+ '0': {
92
+ self: {
93
+ repository: { id: 'repo1' },
94
+ version: 'v1',
95
+ refName: 'refs/heads/main'
96
+ }
97
+ }
98
+ }
99
+ }
100
+ } as unknown as PipelineRun;
101
+
102
+ // Act
103
+ const result = invokeIsMatchingPipeline(fromPipeline, targetPipeline, false);
104
+
105
+ // Assert
106
+ expect(result).toBe(true);
107
+ });
108
+
109
+ it('should return false when versions are the same and searchPrevPipelineFromDifferentCommit is true', () => {
110
+ // Arrange
111
+ const fromPipeline = {
112
+ resources: {
113
+ repositories: {
114
+ '0': {
115
+ self: {
116
+ repository: { id: 'repo1' },
117
+ version: 'v1',
118
+ refName: 'refs/heads/main'
119
+ }
120
+ }
121
+ }
122
+ }
123
+ } as unknown as PipelineRun;
124
+
125
+ const targetPipeline = {
126
+ resources: {
127
+ repositories: {
128
+ '0': {
129
+ self: {
130
+ repository: { id: 'repo1' },
131
+ version: 'v1',
132
+ refName: 'refs/heads/main'
133
+ }
134
+ }
135
+ }
136
+ }
137
+ } as unknown as PipelineRun;
138
+
139
+ // Act
140
+ const result = invokeIsMatchingPipeline(fromPipeline, targetPipeline, true);
45
141
 
46
- test('should return release defenition history ', async () => {
47
- let PipelineDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
48
- let json = await PipelineDataProvider.GetReleaseHistory('tests', '1');
49
- expect(json).toBeDefined();
142
+ // Assert
143
+ expect(result).toBe(false);
144
+ });
145
+
146
+ it('should return true when refNames match but versions differ', () => {
147
+ // Arrange
148
+ const fromPipeline = {
149
+ resources: {
150
+ repositories: {
151
+ '0': {
152
+ self: {
153
+ repository: { id: 'repo1' },
154
+ version: 'v1',
155
+ refName: 'refs/heads/main'
156
+ }
157
+ }
158
+ }
159
+ }
160
+ } as unknown as PipelineRun;
161
+
162
+ const targetPipeline = {
163
+ resources: {
164
+ repositories: {
165
+ '0': {
166
+ self: {
167
+ repository: { id: 'repo1' },
168
+ version: 'v2',
169
+ refName: 'refs/heads/main'
170
+ }
171
+ }
172
+ }
173
+ }
174
+ } as unknown as PipelineRun;
175
+
176
+ // Act
177
+ const result = invokeIsMatchingPipeline(fromPipeline, targetPipeline, true);
178
+
179
+ // Assert
180
+ expect(result).toBe(true);
181
+ });
182
+
183
+ it('should use __designer_repo when self is not available', () => {
184
+ // Arrange
185
+ const fromPipeline = {
186
+ resources: {
187
+ repositories: {
188
+ __designer_repo: {
189
+ repository: { id: 'repo1' },
190
+ version: 'v1',
191
+ refName: 'refs/heads/main'
192
+ }
193
+ }
194
+ }
195
+ } as unknown as PipelineRun;
196
+
197
+ const targetPipeline = {
198
+ resources: {
199
+ repositories: {
200
+ __designer_repo: {
201
+ repository: { id: 'repo1' },
202
+ version: 'v1',
203
+ refName: 'refs/heads/main'
204
+ }
205
+ }
206
+ }
207
+ } as unknown as PipelineRun;
208
+
209
+ // Act
210
+ const result = invokeIsMatchingPipeline(fromPipeline, targetPipeline, false);
211
+
212
+ // Assert
213
+ expect(result).toBe(true);
214
+ });
50
215
  });
51
216
 
52
- test('should return all pipelines ', async () => {
53
- let PipelineDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
54
- let json = await PipelineDataProvider.GetAllPipelines('tests');
55
- expect(json).toBeDefined();
217
+ describe('getPipelineRunDetails', () => {
218
+ it('should call TFSServices.getItemContent with correct parameters', async () => {
219
+ // Arrange
220
+ const projectName = 'project1';
221
+ const pipelineId = 123;
222
+ const runId = 456;
223
+ const mockResponse = { id: runId, resources: {} };
224
+ (TFSServices.getItemContent as jest.Mock).mockResolvedValueOnce(mockResponse);
225
+
226
+ // Act
227
+ const result = await pipelinesDataProvider.getPipelineRunDetails(projectName, pipelineId, runId);
228
+
229
+ // Assert
230
+ expect(TFSServices.getItemContent).toHaveBeenCalledWith(
231
+ `${mockOrgUrl}${projectName}/_apis/pipelines/${pipelineId}/runs/${runId}`,
232
+ mockToken
233
+ );
234
+ expect(result).toEqual(mockResponse);
235
+ });
56
236
  });
57
237
 
58
- test('should return all releaseDefenitions ', async () => {
59
- let PipelineDataProvider = await dgDataProviderAzureDevOps.getPipelinesDataProvider();
60
- let json = await PipelineDataProvider.GetAllReleaseDefenitions('tests');
61
- expect(json).toBeDefined();
238
+ describe('GetPipelineRunHistory', () => {
239
+ it('should return filtered pipeline run history', async () => {
240
+ // Arrange
241
+ const projectName = 'project1';
242
+ const pipelineId = '123';
243
+ const mockResponse = {
244
+ value: [
245
+ { id: 1, result: 'succeeded' },
246
+ { id: 2, result: 'failed' },
247
+ { id: 3, result: 'canceled' },
248
+ { id: 4, result: 'succeeded' }
249
+ ]
250
+ };
251
+ (TFSServices.getItemContent as jest.Mock).mockResolvedValueOnce(mockResponse);
252
+
253
+ // Act
254
+ const result = await pipelinesDataProvider.GetPipelineRunHistory(projectName, pipelineId);
255
+
256
+ // Assert
257
+ expect(TFSServices.getItemContent).toHaveBeenCalledWith(
258
+ `${mockOrgUrl}${projectName}/_apis/pipelines/${pipelineId}/runs`,
259
+ mockToken,
260
+ 'get',
261
+ null,
262
+ null
263
+ );
264
+ expect(result).toEqual({
265
+ count: 4, // Note: Current filter logic keeps all runs where result is not 'failed' AND not 'canceled'
266
+ value: mockResponse.value
267
+ });
268
+ });
269
+
270
+ it('should handle API errors gracefully', async () => {
271
+ // Arrange
272
+ const projectName = 'project1';
273
+ const pipelineId = '123';
274
+ const expectedError = new Error('API error');
275
+ (TFSServices.getItemContent as jest.Mock).mockRejectedValueOnce(expectedError);
276
+
277
+ // Act
278
+ const result = await pipelinesDataProvider.GetPipelineRunHistory(projectName, pipelineId);
279
+
280
+ // Assert
281
+ expect(TFSServices.getItemContent).toHaveBeenCalledWith(
282
+ `${mockOrgUrl}${projectName}/_apis/pipelines/${pipelineId}/runs`,
283
+ mockToken,
284
+ 'get',
285
+ null,
286
+ null
287
+ );
288
+ expect(logger.error).toHaveBeenCalledWith(`Could not fetch Pipeline Run History: ${expectedError.message}`);
289
+ expect(result).toBeUndefined();
290
+ });
62
291
  });
63
- });
292
+ });