@elisra-devops/docgen-data-provider 1.63.12 → 1.67.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 (94) hide show
  1. package/.github/workflows/ci.yml +26 -9
  2. package/.github/workflows/release.yml +9 -10
  3. package/bin/helpers/tfs.d.ts +3 -0
  4. package/bin/helpers/tfs.js +44 -7
  5. package/bin/helpers/tfs.js.map +1 -1
  6. package/bin/modules/GitDataProvider.d.ts +10 -0
  7. package/bin/modules/GitDataProvider.js +10 -0
  8. package/bin/modules/GitDataProvider.js.map +1 -1
  9. package/bin/modules/MangementDataProvider.js +7 -1
  10. package/bin/modules/MangementDataProvider.js.map +1 -1
  11. package/bin/modules/TestDataProvider.js +0 -1
  12. package/bin/modules/TestDataProvider.js.map +1 -1
  13. package/bin/modules/TicketsDataProvider.d.ts +63 -27
  14. package/bin/modules/TicketsDataProvider.js +226 -122
  15. package/bin/modules/TicketsDataProvider.js.map +1 -1
  16. package/bin/tests/helpers/helper.test.js +279 -0
  17. package/bin/tests/helpers/helper.test.js.map +1 -0
  18. package/bin/{helpers/test → tests/helpers}/tfs.test.js +312 -49
  19. package/bin/tests/helpers/tfs.test.js.map +1 -0
  20. package/bin/tests/index.test.js +25 -0
  21. package/bin/tests/index.test.js.map +1 -0
  22. package/bin/tests/models/tfs-data.test.js +160 -0
  23. package/bin/tests/models/tfs-data.test.js.map +1 -0
  24. package/bin/{modules/test → tests/modules}/JfrogDataProvider.test.js +9 -9
  25. package/bin/tests/modules/JfrogDataProvider.test.js.map +1 -0
  26. package/bin/tests/modules/ResultDataProvider.test.js +1942 -0
  27. package/bin/tests/modules/ResultDataProvider.test.js.map +1 -0
  28. package/bin/tests/modules/gitDataProvider.test.js +1888 -0
  29. package/bin/tests/modules/gitDataProvider.test.js.map +1 -0
  30. package/bin/{modules/test → tests/modules}/managmentDataProvider.test.js +39 -31
  31. package/bin/tests/modules/managmentDataProvider.test.js.map +1 -0
  32. package/bin/tests/modules/pipelineDataProvider.test.d.ts +1 -0
  33. package/bin/tests/modules/pipelineDataProvider.test.js +783 -0
  34. package/bin/tests/modules/pipelineDataProvider.test.js.map +1 -0
  35. package/bin/tests/modules/testDataProvider.test.d.ts +1 -0
  36. package/bin/tests/modules/testDataProvider.test.js +717 -0
  37. package/bin/tests/modules/testDataProvider.test.js.map +1 -0
  38. package/bin/tests/modules/ticketsDataProvider.test.d.ts +1 -0
  39. package/bin/tests/modules/ticketsDataProvider.test.js +1681 -0
  40. package/bin/tests/modules/ticketsDataProvider.test.js.map +1 -0
  41. package/bin/tests/utils/DataProviderUtils.test.d.ts +1 -0
  42. package/bin/tests/utils/DataProviderUtils.test.js +61 -0
  43. package/bin/tests/utils/DataProviderUtils.test.js.map +1 -0
  44. package/bin/tests/utils/testStepParserHelper.test.d.ts +1 -0
  45. package/bin/tests/utils/testStepParserHelper.test.js +359 -0
  46. package/bin/tests/utils/testStepParserHelper.test.js.map +1 -0
  47. package/package.json +10 -1
  48. package/src/helpers/tfs.ts +51 -7
  49. package/src/modules/GitDataProvider.ts +10 -0
  50. package/src/modules/MangementDataProvider.ts +6 -1
  51. package/src/modules/TestDataProvider.ts +0 -1
  52. package/src/modules/TicketsDataProvider.ts +311 -151
  53. package/src/tests/helpers/helper.test.ts +337 -0
  54. package/src/tests/helpers/tfs.test.ts +1092 -0
  55. package/src/tests/index.test.ts +28 -0
  56. package/src/tests/models/tfs-data.test.ts +203 -0
  57. package/src/tests/modules/JfrogDataProvider.test.ts +167 -0
  58. package/src/tests/modules/ResultDataProvider.test.ts +2571 -0
  59. package/src/tests/modules/gitDataProvider.test.ts +2628 -0
  60. package/src/{modules/test → tests/modules}/managmentDataProvider.test.ts +63 -32
  61. package/src/tests/modules/pipelineDataProvider.test.ts +1038 -0
  62. package/src/tests/modules/testDataProvider.test.ts +1046 -0
  63. package/src/tests/modules/ticketsDataProvider.test.ts +2204 -0
  64. package/src/tests/utils/DataProviderUtils.test.ts +76 -0
  65. package/src/tests/utils/testStepParserHelper.test.ts +437 -0
  66. package/tsconfig.json +1 -0
  67. package/bin/helpers/test/tfs.test.js.map +0 -1
  68. package/bin/modules/test/JfrogDataProvider.test.js.map +0 -1
  69. package/bin/modules/test/ResultDataProvider.test.js +0 -444
  70. package/bin/modules/test/ResultDataProvider.test.js.map +0 -1
  71. package/bin/modules/test/gitDataProvider.test.js +0 -433
  72. package/bin/modules/test/gitDataProvider.test.js.map +0 -1
  73. package/bin/modules/test/managmentDataProvider.test.js.map +0 -1
  74. package/bin/modules/test/pipelineDataProvider.test.js +0 -237
  75. package/bin/modules/test/pipelineDataProvider.test.js.map +0 -1
  76. package/bin/modules/test/testDataProvider.test.js +0 -234
  77. package/bin/modules/test/testDataProvider.test.js.map +0 -1
  78. package/bin/modules/test/ticketsDataProvider.test.js +0 -322
  79. package/bin/modules/test/ticketsDataProvider.test.js.map +0 -1
  80. package/src/helpers/test/tfs.test.ts +0 -748
  81. package/src/modules/test/JfrogDataProvider.test.ts +0 -171
  82. package/src/modules/test/ResultDataProvider.test.ts +0 -542
  83. package/src/modules/test/gitDataProvider.test.ts +0 -691
  84. package/src/modules/test/pipelineDataProvider.test.ts +0 -292
  85. package/src/modules/test/testDataProvider.test.ts +0 -318
  86. package/src/modules/test/ticketsDataProvider.test.ts +0 -434
  87. /package/bin/{helpers/test/tfs.test.d.ts → tests/helpers/helper.test.d.ts} +0 -0
  88. /package/bin/{modules/test/JfrogDataProvider.test.d.ts → tests/helpers/tfs.test.d.ts} +0 -0
  89. /package/bin/{modules/test/ResultDataProvider.test.d.ts → tests/index.test.d.ts} +0 -0
  90. /package/bin/{modules/test/gitDataProvider.test.d.ts → tests/models/tfs-data.test.d.ts} +0 -0
  91. /package/bin/{modules/test/managmentDataProvider.test.d.ts → tests/modules/JfrogDataProvider.test.d.ts} +0 -0
  92. /package/bin/{modules/test/pipelineDataProvider.test.d.ts → tests/modules/ResultDataProvider.test.d.ts} +0 -0
  93. /package/bin/{modules/test/testDataProvider.test.d.ts → tests/modules/gitDataProvider.test.d.ts} +0 -0
  94. /package/bin/{modules/test/ticketsDataProvider.test.d.ts → tests/modules/managmentDataProvider.test.d.ts} +0 -0
@@ -1,237 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
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);
16
- });
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
- });
183
- });
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
- });
198
- });
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
- });
235
- });
236
- });
237
- //# sourceMappingURL=pipelineDataProvider.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pipelineDataProvider.test.js","sourceRoot":"","sources":["../../../src/modules/test/pipelineDataProvider.test.ts"],"names":[],"mappings":"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"}
@@ -1,234 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tfs_1 = require("../../helpers/tfs");
4
- const helper_1 = require("../../helpers/helper");
5
- const TestDataProvider_1 = require("../TestDataProvider");
6
- const logger_1 = require("../../utils/logger");
7
- jest.mock('../../helpers/tfs');
8
- jest.mock('../../utils/logger');
9
- jest.mock('../../helpers/helper');
10
- jest.mock('../../utils/testStepParserHelper');
11
- jest.mock('p-limit', () => jest.fn(() => (fn) => fn()));
12
- describe('TestDataProvider', () => {
13
- let testDataProvider;
14
- const mockOrgUrl = 'https://dev.azure.com/orgname/';
15
- const mockToken = 'mock-token';
16
- const mockProject = 'project-123';
17
- const mockPlanId = '456';
18
- const mockSuiteId = '789';
19
- const mockTestCaseId = '101112';
20
- beforeEach(() => {
21
- jest.clearAllMocks();
22
- testDataProvider = new TestDataProvider_1.default(mockOrgUrl, mockToken);
23
- });
24
- // Helper to access private method for testing
25
- const invokeFetchWithCache = async (instance, url, ttl = 60000) => {
26
- return instance.fetchWithCache.call(instance, url, ttl);
27
- };
28
- describe('fetchWithCache', () => {
29
- it('should return cached data when available and not expired', async () => {
30
- // Arrange
31
- const mockUrl = `${mockOrgUrl}_apis/test/endpoint`;
32
- const mockData = { value: 'test data' };
33
- const cache = new Map();
34
- cache.set(mockUrl, {
35
- data: mockData,
36
- timestamp: Date.now(),
37
- });
38
- testDataProvider.cache = cache;
39
- // Act
40
- const result = await invokeFetchWithCache(testDataProvider, mockUrl);
41
- // Assert
42
- expect(result).toEqual(mockData);
43
- expect(tfs_1.TFSServices.getItemContent).not.toHaveBeenCalled();
44
- });
45
- it('should fetch new data when cache is expired', async () => {
46
- // Arrange
47
- const mockUrl = `${mockOrgUrl}_apis/test/endpoint`;
48
- const mockData = { value: 'old data' };
49
- const newData = { value: 'new data' };
50
- const cache = new Map();
51
- cache.set(mockUrl, {
52
- data: mockData,
53
- timestamp: Date.now() - 70000, // Expired (default TTL is 60000ms)
54
- });
55
- testDataProvider.cache = cache;
56
- tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(newData);
57
- // Act
58
- const result = await invokeFetchWithCache(testDataProvider, mockUrl);
59
- // Assert
60
- expect(result).toEqual(newData);
61
- expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(mockUrl, mockToken);
62
- });
63
- it('should fetch and cache new data when not in cache', async () => {
64
- // Arrange
65
- const mockUrl = `${mockOrgUrl}_apis/test/endpoint`;
66
- const mockData = { value: 'new data' };
67
- tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(mockData);
68
- // Act
69
- const result = await invokeFetchWithCache(testDataProvider, mockUrl);
70
- // Assert
71
- expect(result).toEqual(mockData);
72
- expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(mockUrl, mockToken);
73
- expect(testDataProvider.cache.has(mockUrl)).toBeTruthy();
74
- expect(testDataProvider.cache.get(mockUrl).data).toEqual(mockData);
75
- });
76
- it('should throw and log error when fetch fails', async () => {
77
- // Arrange
78
- const mockUrl = `${mockOrgUrl}_apis/test/endpoint`;
79
- const mockError = new Error('API call failed');
80
- tfs_1.TFSServices.getItemContent.mockRejectedValueOnce(mockError);
81
- // Act & Assert
82
- await expect(invokeFetchWithCache(testDataProvider, mockUrl)).rejects.toThrow('API call failed');
83
- expect(logger_1.default.error).toHaveBeenCalledWith(`Error fetching ${mockUrl}: API call failed`);
84
- });
85
- });
86
- describe('GetTestSuiteByTestCase', () => {
87
- it('should return test suites for a given test case ID', async () => {
88
- // Arrange
89
- const mockData = { value: [{ id: '123', name: 'Test Suite 1' }] };
90
- tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(mockData);
91
- // Act
92
- const result = await testDataProvider.GetTestSuiteByTestCase(mockTestCaseId);
93
- // Assert
94
- expect(result).toEqual(mockData);
95
- expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}_apis/testplan/suites?testCaseId=${mockTestCaseId}`, mockToken);
96
- });
97
- });
98
- describe('GetTestPlans', () => {
99
- it('should return test plans for a given project', async () => {
100
- // Arrange
101
- const mockData = {
102
- value: [
103
- { id: '456', name: 'Test Plan 1' },
104
- { id: '789', name: 'Test Plan 2' },
105
- ],
106
- };
107
- tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(mockData);
108
- // Act
109
- const result = await testDataProvider.GetTestPlans(mockProject);
110
- // Assert
111
- expect(result).toEqual(mockData);
112
- expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}${mockProject}/_apis/test/plans`, mockToken);
113
- });
114
- });
115
- describe('GetTestSuites', () => {
116
- it('should return test suites for a given project and plan ID', async () => {
117
- // Arrange
118
- const mockData = {
119
- value: [
120
- { id: '123', name: 'Test Suite 1' },
121
- { id: '456', name: 'Test Suite 2' },
122
- ],
123
- };
124
- tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(mockData);
125
- // Act
126
- const result = await testDataProvider.GetTestSuites(mockProject, mockPlanId);
127
- // Assert
128
- expect(result).toEqual(mockData);
129
- expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}${mockProject}/_apis/test/Plans/${mockPlanId}/suites`, mockToken);
130
- });
131
- it('should return null and log error if fetching test suites fails', async () => {
132
- // Arrange
133
- const mockError = new Error('Failed to get test suites');
134
- tfs_1.TFSServices.getItemContent.mockRejectedValueOnce(mockError);
135
- // Act
136
- const result = await testDataProvider.GetTestSuites(mockProject, mockPlanId);
137
- // Assert
138
- expect(result).toBeNull();
139
- });
140
- });
141
- describe('GetTestSuitesForPlan', () => {
142
- it('should throw error when project is not provided', async () => {
143
- // Act & Assert
144
- await expect(testDataProvider.GetTestSuitesForPlan('', mockPlanId)).rejects.toThrow('Project not selected');
145
- });
146
- it('should throw error when plan ID is not provided', async () => {
147
- // Act & Assert
148
- await expect(testDataProvider.GetTestSuitesForPlan(mockProject, '')).rejects.toThrow('Plan not selected');
149
- });
150
- it('should return test suites for a plan', async () => {
151
- // Arrange
152
- const mockData = {
153
- testSuites: [
154
- { id: '123', name: 'Test Suite 1' },
155
- { id: '456', name: 'Test Suite 2' },
156
- ],
157
- };
158
- tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(mockData);
159
- // Act
160
- const result = await testDataProvider.GetTestSuitesForPlan(mockProject, mockPlanId);
161
- // Assert
162
- expect(result).toEqual(mockData);
163
- expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}/${mockProject}/_api/_testManagement/GetTestSuitesForPlan?__v=5&planId=${mockPlanId}`, mockToken);
164
- });
165
- });
166
- describe('GetTestSuiteById', () => {
167
- it('should call GetTestSuitesForPlan and Helper.findSuitesRecursive with correct params', async () => {
168
- // Arrange
169
- const mockTestSuites = { testSuites: [{ id: '123', name: 'Test Suite 1' }] };
170
- const mockSuiteData = [new helper_1.suiteData('Test Suite 1', '123', '456', 1)];
171
- tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(mockTestSuites);
172
- helper_1.Helper.findSuitesRecursive.mockReturnValueOnce(mockSuiteData);
173
- // Act
174
- const result = await testDataProvider.GetTestSuiteById(mockProject, mockPlanId, mockSuiteId, true);
175
- // Assert
176
- expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}/${mockProject}/_api/_testManagement/GetTestSuitesForPlan?__v=5&planId=${mockPlanId}`, mockToken);
177
- expect(helper_1.Helper.findSuitesRecursive).toHaveBeenCalledWith(mockPlanId, mockOrgUrl, mockProject, mockTestSuites.testSuites, mockSuiteId, true);
178
- expect(result).toEqual(mockSuiteData);
179
- });
180
- });
181
- describe('GetTestCases', () => {
182
- it('should return test cases for a given project, plan ID, and suite ID', async () => {
183
- // Arrange
184
- const mockData = {
185
- count: 2,
186
- value: [
187
- { testCase: { id: '101', name: 'Test Case 1', url: 'url1' } },
188
- { testCase: { id: '102', name: 'Test Case 2', url: 'url2' } },
189
- ],
190
- };
191
- tfs_1.TFSServices.getItemContent.mockResolvedValueOnce(mockData);
192
- // Act
193
- const result = await testDataProvider.GetTestCases(mockProject, mockPlanId, mockSuiteId);
194
- // Assert
195
- expect(result).toEqual(mockData);
196
- expect(tfs_1.TFSServices.getItemContent).toHaveBeenCalledWith(`${mockOrgUrl}${mockProject}/_apis/test/Plans/${mockPlanId}/suites/${mockSuiteId}/testcases/`, mockToken);
197
- expect(logger_1.default.debug).toHaveBeenCalledWith(`test cases for plan ${mockPlanId} and ${mockSuiteId} were found`);
198
- });
199
- });
200
- describe('clearCache', () => {
201
- it('should clear the cache', () => {
202
- // Arrange
203
- const mockUrl = `${mockOrgUrl}_apis/test/endpoint`;
204
- const mockData = { value: 'test data' };
205
- const cache = new Map();
206
- cache.set(mockUrl, {
207
- data: mockData,
208
- timestamp: Date.now(),
209
- });
210
- testDataProvider.cache = cache;
211
- // Act
212
- testDataProvider.clearCache();
213
- // Assert
214
- expect(testDataProvider.cache.size).toBe(0);
215
- expect(logger_1.default.debug).toHaveBeenCalledWith('Cache cleared');
216
- });
217
- });
218
- describe('UpdateTestRun', () => {
219
- it('should update a test run with the correct state', async () => {
220
- // Arrange
221
- const mockRunId = '12345';
222
- const mockState = 'Completed';
223
- const mockResponse = { id: mockRunId, state: mockState };
224
- tfs_1.TFSServices.postRequest.mockResolvedValueOnce(mockResponse);
225
- // Act
226
- const result = await testDataProvider.UpdateTestRun(mockProject, mockRunId, mockState);
227
- // Assert
228
- expect(result).toEqual(mockResponse);
229
- expect(tfs_1.TFSServices.postRequest).toHaveBeenCalledWith(`${mockOrgUrl}${mockProject}/_apis/test/Runs/${mockRunId}?api-version=5.0`, mockToken, 'PATCH', { state: mockState }, null);
230
- expect(logger_1.default.info).toHaveBeenCalledWith(`Update runId : ${mockRunId} to state : ${mockState}`);
231
- });
232
- });
233
- });
234
- //# sourceMappingURL=testDataProvider.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testDataProvider.test.js","sourceRoot":"","sources":["../../../src/modules/test/testDataProvider.test.ts"],"names":[],"mappings":"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"}