@elisra-devops/docgen-data-provider 1.19.0 → 1.20.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.
@@ -15,7 +15,7 @@ export default class TestDataProvider {
15
15
  GetTestSuitesByPlan(project: string, planId: string, recursive: boolean): Promise<any>;
16
16
  GetTestSuiteById(project: string, planId: string, suiteId: string, recursive: boolean): Promise<any>;
17
17
  GetTestCasesBySuites(project: string, planId: string, suiteId: string, recursive: boolean, includeRequirements: boolean, CustomerRequirementId: boolean, stepResultDetailsMap?: Map<string, any>): Promise<any>;
18
- StructureTestCase(project: string, testCases: any, suite: suiteData, includeRequirements: boolean, CustomerRequirementId: boolean, requirementToTestCaseTraceMap: Map<string, string[]>, testCaseToRequirementsTraceMap: Map<string, string[]>, stepResultDetailsMap?: Map<string, any>): Promise<Array<any>>;
18
+ StructureTestCase(project: string, testCases: any, suite: suiteData, includeRequirements: boolean, CustomerRequirementId: boolean, requirementToTestCaseTraceMap: Map<string, string[]>, testCaseToRequirementsTraceMap: Map<string, string[]>, stepResultDetailsMap?: Map<string, any>): Promise<any[]>;
19
19
  private createNewRequirement;
20
20
  ParseSteps(steps: string): TestSteps[];
21
21
  GetTestCases(project: string, planId: string, suiteId: string): Promise<any>;
@@ -88,12 +88,17 @@ class TestDataProvider {
88
88
  let testCasesList = new Array();
89
89
  const requirementToTestCaseTraceMap = new Map();
90
90
  const testCaseToRequirementsTraceMap = new Map();
91
+ // const startTime = performance.now();
91
92
  let suitesTestCasesList = await this.GetTestSuiteById(project, planId, suiteId, recursive);
92
93
  // Create array of promises that each return their test cases
93
94
  const testCaseListPromises = suitesTestCasesList.map((suite) => this.limit(async () => {
94
95
  try {
95
96
  const testCases = await this.GetTestCases(project, planId, suite.id);
97
+ // const structureStartTime = performance.now();
96
98
  const testCasesWithSteps = await this.StructureTestCase(project, testCases, suite, includeRequirements, CustomerRequirementId, requirementToTestCaseTraceMap, testCaseToRequirementsTraceMap, stepResultDetailsMap);
99
+ // logger.debug(
100
+ // `Performance: structured suite ${suite.id} in ${performance.now() - structureStartTime}ms`
101
+ // );
97
102
  // Return the results instead of modifying shared array
98
103
  return testCasesWithSteps || [];
99
104
  }
@@ -105,135 +110,85 @@ class TestDataProvider {
105
110
  // Wait for all promises and only then combine the results
106
111
  const results = await Promise.all(testCaseListPromises);
107
112
  testCasesList = results.flat(); // Combine all results into a single array
113
+ // logger.debug(`Performance: GetTestCasesBySuites completed in ${performance.now() - startTime}ms`);
108
114
  return { testCasesList, requirementToTestCaseTraceMap, testCaseToRequirementsTraceMap };
109
115
  }
110
116
  async StructureTestCase(project, testCases, suite, includeRequirements, CustomerRequirementId, requirementToTestCaseTraceMap, testCaseToRequirementsTraceMap, stepResultDetailsMap) {
111
- const baseUrl = this.orgUrl + project + '/_workitems/edit/';
112
- const testCasesUrlList = [];
113
- logger_1.default.debug(`Structuring test cases for ${project} suite: ${suite.id}:${suite.name}`);
117
+ let url = this.orgUrl + project + '/_workitems/edit/';
118
+ let testCasesUrlList = [];
119
+ logger_1.default.debug(`Trying to structure Test case for ${project} suite: ${suite.id}:${suite.name}`);
114
120
  try {
115
121
  if (!testCases || !testCases.value || testCases.count === 0) {
116
122
  logger_1.default.warn(`No test cases found for suite: ${suite.id}`);
117
123
  return [];
118
124
  }
119
- // Step 1: Prepare all test case fetch requests
120
- const testCaseRequests = testCases.value.map((item) => {
121
- const testCaseId = item.testCase.id.toString();
122
- const stepDetailObject = stepResultDetailsMap === null || stepResultDetailsMap === void 0 ? void 0 : stepResultDetailsMap.get(testCaseId);
123
- const url = !(stepDetailObject === null || stepDetailObject === void 0 ? void 0 : stepDetailObject.testCaseRevision)
124
- ? item.testCase.url + '?$expand=All'
125
- : `${item.testCase.url}/revisions/${stepDetailObject.testCaseRevision}?$expand=All`;
126
- return {
127
- url,
128
- testCaseId,
129
- stepDetailObject,
130
- };
131
- });
132
- // Step 2: Fetch all test cases in parallel using limit to control concurrency
133
- logger_1.default.debug(`Fetching ${testCaseRequests.length} test cases concurrently`);
134
- const testCaseResults = await Promise.all(testCaseRequests.map((request) => this.limit(async () => {
125
+ for (let i = 0; i < testCases.count; i++) {
135
126
  try {
136
- const test = await this.fetchWithCache(request.url);
137
- return {
138
- test,
139
- testCaseId: request.testCaseId,
140
- stepDetailObject: request.stepDetailObject,
141
- };
142
- }
143
- catch (error) {
144
- logger_1.default.error(`Error fetching test case ${request.testCaseId}: ${error}`);
145
- return null;
146
- }
147
- })));
148
- // Step 3: Process test cases and collect relation URLs
149
- const validResults = testCaseResults.filter((result) => result !== null);
150
- const relationRequests = [];
151
- const testCaseObjects = await Promise.all(validResults.map(async (result, index) => {
152
- try {
153
- const test = result.test;
154
- const testCase = new tfs_data_2.TestCase();
155
- // Build test case object
127
+ let stepDetailObject = (stepResultDetailsMap === null || stepResultDetailsMap === void 0 ? void 0 : stepResultDetailsMap.get(testCases.value[i].testCase.id.toString())) || undefined;
128
+ let newurl = !(stepDetailObject === null || stepDetailObject === void 0 ? void 0 : stepDetailObject.testCaseRevision)
129
+ ? testCases.value[i].testCase.url + '?$expand=All'
130
+ : `${testCases.value[i].testCase.url}/revisions/${stepDetailObject.testCaseRevision}?$expand=All`;
131
+ let test = await this.fetchWithCache(newurl);
132
+ let testCase = new tfs_data_2.TestCase();
156
133
  testCase.title = test.fields['System.Title'];
157
134
  testCase.area = test.fields['System.AreaPath'];
158
135
  testCase.description = test.fields['System.Description'];
159
- testCase.url = baseUrl + test.id;
136
+ testCase.url = url + test.id;
137
+ //testCase.steps = test.fields["Microsoft.VSTS.TCM.Steps"];
160
138
  testCase.id = test.id;
161
139
  testCase.suit = suite.id;
162
- // Handle steps
163
- if (!result.stepDetailObject && test.fields['Microsoft.VSTS.TCM.Steps'] != null) {
164
- testCase.steps = await this.testStepParserHelper.parseTestSteps(test.fields['Microsoft.VSTS.TCM.Steps'], new Map());
140
+ if (!stepDetailObject && test.fields['Microsoft.VSTS.TCM.Steps'] != null) {
141
+ let steps = await this.testStepParserHelper.parseTestSteps(test.fields['Microsoft.VSTS.TCM.Steps'], new Map());
142
+ testCase.steps = steps;
143
+ //In case its already parsed during the STR
165
144
  }
166
- else if (result.stepDetailObject) {
167
- testCase.steps = result.stepDetailObject.stepList;
168
- testCase.caseEvidenceAttachments = result.stepDetailObject.caseEvidenceAttachments;
145
+ else if (stepDetailObject) {
146
+ testCase.steps = stepDetailObject.stepList;
147
+ testCase.caseEvidenceAttachments = stepDetailObject.caseEvidenceAttachments;
169
148
  }
170
- // Collect relation URLs for batch processing
171
149
  if (test.relations) {
172
- test.relations.forEach((relation) => {
150
+ for (const relation of test.relations) {
151
+ // Only proceed if the URL contains 'workItems'
173
152
  if (relation.url.includes('/workItems/')) {
174
- relationRequests.push({
175
- url: relation.url,
176
- testCaseIndex: index,
177
- });
153
+ try {
154
+ let relatedItemContent = await this.fetchWithCache(relation.url);
155
+ // Check if the WorkItemType is "Requirement" before adding to relations
156
+ if (relatedItemContent.fields['System.WorkItemType'] === 'Requirement') {
157
+ const newRequirementRelation = this.createNewRequirement(CustomerRequirementId, relatedItemContent);
158
+ const stringifiedTestCase = JSON.stringify({
159
+ id: testCase.id,
160
+ title: testCase.title,
161
+ });
162
+ const stringifiedRequirement = JSON.stringify(newRequirementRelation);
163
+ // Add the test case to the requirement-to-test-case trace map
164
+ this.addToMap(requirementToTestCaseTraceMap, stringifiedRequirement, stringifiedTestCase);
165
+ // Add the requirement to the test-case-to-requirements trace map
166
+ this.addToMap(testCaseToRequirementsTraceMap, stringifiedTestCase, stringifiedRequirement);
167
+ if (includeRequirements) {
168
+ testCase.relations.push(newRequirementRelation);
169
+ }
170
+ }
171
+ }
172
+ catch (fetchError) {
173
+ // Log error silently or handle as needed
174
+ console.error('Failed to fetch relation content', fetchError);
175
+ logger_1.default.error(`Failed to fetch relation content for URL ${relation.url}: ${fetchError}`);
176
+ }
178
177
  }
179
- });
178
+ }
180
179
  }
181
- return testCase;
180
+ testCasesUrlList.push(testCase);
182
181
  }
183
- catch (error) {
184
- logger_1.default.error(`Error processing test case ${result.testCaseId}: ${error}`);
185
- return null;
182
+ catch (_a) {
183
+ const errorMsg = `ran into an issue while retrieving testCase ${testCases.value[i].testCase.id}`;
184
+ logger_1.default.error(`Error: ${errorMsg}`);
185
+ throw new Error(errorMsg);
186
186
  }
187
- }));
188
- // Filter out any errors during test case processing
189
- const validTestCases = testCaseObjects.filter((tc) => tc !== null);
190
- // Step 4: Fetch all relations concurrently
191
- if (relationRequests.length > 0) {
192
- logger_1.default.debug(`Fetching ${relationRequests.length} relations concurrently`);
193
- const relationResults = await Promise.all(relationRequests.map((request) => this.limit(async () => {
194
- try {
195
- const relatedItemContent = await this.fetchWithCache(request.url);
196
- return {
197
- content: relatedItemContent,
198
- testCaseIndex: request.testCaseIndex,
199
- };
200
- }
201
- catch (error) {
202
- logger_1.default.error(`Failed to fetch relation: ${error}`);
203
- return null;
204
- }
205
- })));
206
- // Step 5: Process relations and update test cases
207
- relationResults
208
- .filter((result) => result !== null)
209
- .forEach((result) => {
210
- const relatedItemContent = result.content;
211
- const testCase = validTestCases[result.testCaseIndex];
212
- // Only process requirement relations
213
- if (relatedItemContent.fields['System.WorkItemType'] === 'Requirement') {
214
- const newRequirementRelation = this.createNewRequirement(CustomerRequirementId, relatedItemContent);
215
- const stringifiedTestCase = JSON.stringify({
216
- id: testCase.id,
217
- title: testCase.title,
218
- });
219
- const stringifiedRequirement = JSON.stringify(newRequirementRelation);
220
- // Update trace maps
221
- this.addToMap(requirementToTestCaseTraceMap, stringifiedRequirement, stringifiedTestCase);
222
- this.addToMap(testCaseToRequirementsTraceMap, stringifiedTestCase, stringifiedRequirement);
223
- // Add to test case relations if needed
224
- if (includeRequirements) {
225
- testCase.relations.push(newRequirementRelation);
226
- }
227
- }
228
- });
229
187
  }
230
- // Add all valid test cases to the result list
231
- testCasesUrlList.push(...validTestCases);
232
188
  }
233
189
  catch (err) {
234
- logger_1.default.error(`Error: ${err.message} while structuring test cases for suite ${suite.id}`);
190
+ logger_1.default.error(`Error: ${err.message} while trying to structure testCases for test suite ${suite.id}`);
235
191
  }
236
- logger_1.default.info(`StructureTestCase for suite ${suite.id} completed with ${testCasesUrlList.length} test cases`);
237
192
  return testCasesUrlList;
238
193
  }
239
194
  createNewRequirement(CustomerRequirementId, relatedItemContent) {
@@ -1 +1 @@
1
- {"version":3,"file":"TestDataProvider.js","sourceRoot":"","sources":["../../src/modules/TestDataProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TestDataProvider.js","sourceRoot":"","sources":["../../src/modules/TestDataProvider.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elisra-devops/docgen-data-provider",
3
- "version": "1.19.0",
3
+ "version": "1.20.0",
4
4
  "description": "A document generator data provider, aimed to retrive data from azure devops",
5
5
  "repository": {
6
6
  "type": "git",
@@ -107,6 +107,8 @@ export default class TestDataProvider {
107
107
  let testCasesList: Array<any> = new Array<any>();
108
108
  const requirementToTestCaseTraceMap: Map<string, string[]> = new Map();
109
109
  const testCaseToRequirementsTraceMap: Map<string, string[]> = new Map();
110
+ // const startTime = performance.now();
111
+
110
112
  let suitesTestCasesList: Array<suiteData> = await this.GetTestSuiteById(
111
113
  project,
112
114
  planId,
@@ -119,7 +121,7 @@ export default class TestDataProvider {
119
121
  this.limit(async () => {
120
122
  try {
121
123
  const testCases = await this.GetTestCases(project, planId, suite.id);
122
-
124
+ // const structureStartTime = performance.now();
123
125
  const testCasesWithSteps = await this.StructureTestCase(
124
126
  project,
125
127
  testCases,
@@ -130,6 +132,9 @@ export default class TestDataProvider {
130
132
  testCaseToRequirementsTraceMap,
131
133
  stepResultDetailsMap
132
134
  );
135
+ // logger.debug(
136
+ // `Performance: structured suite ${suite.id} in ${performance.now() - structureStartTime}ms`
137
+ // );
133
138
 
134
139
  // Return the results instead of modifying shared array
135
140
  return testCasesWithSteps || [];
@@ -143,7 +148,7 @@ export default class TestDataProvider {
143
148
  // Wait for all promises and only then combine the results
144
149
  const results = await Promise.all(testCaseListPromises);
145
150
  testCasesList = results.flat(); // Combine all results into a single array
146
-
151
+ // logger.debug(`Performance: GetTestCasesBySuites completed in ${performance.now() - startTime}ms`);
147
152
  return { testCasesList, requirementToTestCaseTraceMap, testCaseToRequirementsTraceMap };
148
153
  }
149
154
 
@@ -156,167 +161,98 @@ export default class TestDataProvider {
156
161
  requirementToTestCaseTraceMap: Map<string, string[]>,
157
162
  testCaseToRequirementsTraceMap: Map<string, string[]>,
158
163
  stepResultDetailsMap?: Map<string, any>
159
- ): Promise<Array<any>> {
160
- const baseUrl = this.orgUrl + project + '/_workitems/edit/';
161
- const testCasesUrlList: Array<any> = [];
162
-
163
- logger.debug(`Structuring test cases for ${project} suite: ${suite.id}:${suite.name}`);
164
-
164
+ ): Promise<any[]> {
165
+ let url = this.orgUrl + project + '/_workitems/edit/';
166
+ let testCasesUrlList: any[] = [];
167
+ logger.debug(`Trying to structure Test case for ${project} suite: ${suite.id}:${suite.name}`);
165
168
  try {
166
169
  if (!testCases || !testCases.value || testCases.count === 0) {
167
170
  logger.warn(`No test cases found for suite: ${suite.id}`);
168
171
  return [];
169
172
  }
170
173
 
171
- // Step 1: Prepare all test case fetch requests
172
- const testCaseRequests = testCases.value.map((item: any) => {
173
- const testCaseId = item.testCase.id.toString();
174
- const stepDetailObject = stepResultDetailsMap?.get(testCaseId);
175
-
176
- const url = !stepDetailObject?.testCaseRevision
177
- ? item.testCase.url + '?$expand=All'
178
- : `${item.testCase.url}/revisions/${stepDetailObject.testCaseRevision}?$expand=All`;
179
-
180
- return {
181
- url,
182
- testCaseId,
183
- stepDetailObject,
184
- };
185
- });
186
-
187
- // Step 2: Fetch all test cases in parallel using limit to control concurrency
188
- logger.debug(`Fetching ${testCaseRequests.length} test cases concurrently`);
189
- const testCaseResults = await Promise.all(
190
- testCaseRequests.map((request: any) =>
191
- this.limit(async () => {
192
- try {
193
- const test = await this.fetchWithCache(request.url);
194
- return {
195
- test,
196
- testCaseId: request.testCaseId,
197
- stepDetailObject: request.stepDetailObject,
198
- };
199
- } catch (error) {
200
- logger.error(`Error fetching test case ${request.testCaseId}: ${error}`);
201
- return null;
202
- }
203
- })
204
- )
205
- );
206
-
207
- // Step 3: Process test cases and collect relation URLs
208
- const validResults = testCaseResults.filter((result) => result !== null);
209
- const relationRequests: Array<{ url: string; testCaseIndex: number }> = [];
210
-
211
- const testCaseObjects = await Promise.all(
212
- validResults.map(async (result, index) => {
213
- try {
214
- const test = result!.test;
215
- const testCase = new TestCase();
216
-
217
- // Build test case object
218
- testCase.title = test.fields['System.Title'];
219
- testCase.area = test.fields['System.AreaPath'];
220
- testCase.description = test.fields['System.Description'];
221
- testCase.url = baseUrl + test.id;
222
- testCase.id = test.id;
223
- testCase.suit = suite.id;
224
-
225
- // Handle steps
226
- if (!result!.stepDetailObject && test.fields['Microsoft.VSTS.TCM.Steps'] != null) {
227
- testCase.steps = await this.testStepParserHelper.parseTestSteps(
228
- test.fields['Microsoft.VSTS.TCM.Steps'],
229
- new Map<number, number>()
230
- );
231
- } else if (result!.stepDetailObject) {
232
- testCase.steps = result!.stepDetailObject.stepList;
233
- testCase.caseEvidenceAttachments = result!.stepDetailObject.caseEvidenceAttachments;
234
- }
235
-
236
- // Collect relation URLs for batch processing
237
- if (test.relations) {
238
- test.relations.forEach((relation: any) => {
239
- if (relation.url.includes('/workItems/')) {
240
- relationRequests.push({
241
- url: relation.url,
242
- testCaseIndex: index,
243
- });
244
- }
245
- });
246
- }
247
-
248
- return testCase;
249
- } catch (error) {
250
- logger.error(`Error processing test case ${result!.testCaseId}: ${error}`);
251
- return null;
174
+ for (let i = 0; i < testCases.count; i++) {
175
+ try {
176
+ let stepDetailObject =
177
+ stepResultDetailsMap?.get(testCases.value[i].testCase.id.toString()) || undefined;
178
+
179
+ let newurl = !stepDetailObject?.testCaseRevision
180
+ ? testCases.value[i].testCase.url + '?$expand=All'
181
+ : `${testCases.value[i].testCase.url}/revisions/${stepDetailObject.testCaseRevision}?$expand=All`;
182
+ let test: any = await this.fetchWithCache(newurl);
183
+ let testCase: TestCase = new TestCase();
184
+
185
+ testCase.title = test.fields['System.Title'];
186
+ testCase.area = test.fields['System.AreaPath'];
187
+ testCase.description = test.fields['System.Description'];
188
+ testCase.url = url + test.id;
189
+ //testCase.steps = test.fields["Microsoft.VSTS.TCM.Steps"];
190
+ testCase.id = test.id;
191
+ testCase.suit = suite.id;
192
+
193
+ if (!stepDetailObject && test.fields['Microsoft.VSTS.TCM.Steps'] != null) {
194
+ let steps = await this.testStepParserHelper.parseTestSteps(
195
+ test.fields['Microsoft.VSTS.TCM.Steps'],
196
+ new Map<number, number>()
197
+ );
198
+ testCase.steps = steps;
199
+ //In case its already parsed during the STR
200
+ } else if (stepDetailObject) {
201
+ testCase.steps = stepDetailObject.stepList;
202
+ testCase.caseEvidenceAttachments = stepDetailObject.caseEvidenceAttachments;
252
203
  }
253
- })
254
- );
255
-
256
- // Filter out any errors during test case processing
257
- const validTestCases = testCaseObjects.filter((tc) => tc !== null) as TestCase[];
258
-
259
- // Step 4: Fetch all relations concurrently
260
- if (relationRequests.length > 0) {
261
- logger.debug(`Fetching ${relationRequests.length} relations concurrently`);
262
- const relationResults = await Promise.all(
263
- relationRequests.map((request) =>
264
- this.limit(async () => {
265
- try {
266
- const relatedItemContent = await this.fetchWithCache(request.url);
267
- return {
268
- content: relatedItemContent,
269
- testCaseIndex: request.testCaseIndex,
270
- };
271
- } catch (error) {
272
- logger.error(`Failed to fetch relation: ${error}`);
273
- return null;
274
- }
275
- })
276
- )
277
- );
278
-
279
- // Step 5: Process relations and update test cases
280
- relationResults
281
- .filter((result) => result !== null)
282
- .forEach((result) => {
283
- const relatedItemContent = result!.content;
284
- const testCase = validTestCases[result!.testCaseIndex];
285
-
286
- // Only process requirement relations
287
- if (relatedItemContent.fields['System.WorkItemType'] === 'Requirement') {
288
- const newRequirementRelation = this.createNewRequirement(
289
- CustomerRequirementId,
290
- relatedItemContent
291
- );
292
-
293
- const stringifiedTestCase = JSON.stringify({
294
- id: testCase.id,
295
- title: testCase.title,
296
- });
297
- const stringifiedRequirement = JSON.stringify(newRequirementRelation);
298
-
299
- // Update trace maps
300
- this.addToMap(requirementToTestCaseTraceMap, stringifiedRequirement, stringifiedTestCase);
301
- this.addToMap(testCaseToRequirementsTraceMap, stringifiedTestCase, stringifiedRequirement);
302
-
303
- // Add to test case relations if needed
304
- if (includeRequirements) {
305
- testCase.relations.push(newRequirementRelation);
204
+ if (test.relations) {
205
+ for (const relation of test.relations) {
206
+ // Only proceed if the URL contains 'workItems'
207
+ if (relation.url.includes('/workItems/')) {
208
+ try {
209
+ let relatedItemContent: any = await this.fetchWithCache(relation.url);
210
+ // Check if the WorkItemType is "Requirement" before adding to relations
211
+ if (relatedItemContent.fields['System.WorkItemType'] === 'Requirement') {
212
+ const newRequirementRelation = this.createNewRequirement(
213
+ CustomerRequirementId,
214
+ relatedItemContent
215
+ );
216
+
217
+ const stringifiedTestCase = JSON.stringify({
218
+ id: testCase.id,
219
+ title: testCase.title,
220
+ });
221
+ const stringifiedRequirement = JSON.stringify(newRequirementRelation);
222
+
223
+ // Add the test case to the requirement-to-test-case trace map
224
+ this.addToMap(requirementToTestCaseTraceMap, stringifiedRequirement, stringifiedTestCase);
225
+
226
+ // Add the requirement to the test-case-to-requirements trace map
227
+ this.addToMap(
228
+ testCaseToRequirementsTraceMap,
229
+ stringifiedTestCase,
230
+ stringifiedRequirement
231
+ );
232
+
233
+ if (includeRequirements) {
234
+ testCase.relations.push(newRequirementRelation);
235
+ }
236
+ }
237
+ } catch (fetchError) {
238
+ // Log error silently or handle as needed
239
+ console.error('Failed to fetch relation content', fetchError);
240
+ logger.error(`Failed to fetch relation content for URL ${relation.url}: ${fetchError}`);
241
+ }
306
242
  }
307
243
  }
308
- });
244
+ }
245
+ testCasesUrlList.push(testCase);
246
+ } catch {
247
+ const errorMsg = `ran into an issue while retrieving testCase ${testCases.value[i].testCase.id}`;
248
+ logger.error(`Error: ${errorMsg}`);
249
+ throw new Error(errorMsg);
250
+ }
309
251
  }
310
-
311
- // Add all valid test cases to the result list
312
- testCasesUrlList.push(...validTestCases);
313
252
  } catch (err: any) {
314
- logger.error(`Error: ${err.message} while structuring test cases for suite ${suite.id}`);
253
+ logger.error(`Error: ${err.message} while trying to structure testCases for test suite ${suite.id}`);
315
254
  }
316
255
 
317
- logger.info(
318
- `StructureTestCase for suite ${suite.id} completed with ${testCasesUrlList.length} test cases`
319
- );
320
256
  return testCasesUrlList;
321
257
  }
322
258