@elisra-devops/docgen-data-provider 1.80.0 → 1.82.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.
@@ -1,4 +1,4 @@
1
- import type { MewpBugLink, MewpExternalFileRef, MewpL3L4Link } from '../models/mewp-reporting';
1
+ import type { MewpBugLink, MewpExternalFileRef, MewpL3L4Pair } from '../models/mewp-reporting';
2
2
  import MewpExternalTableUtils from './mewpExternalTableUtils';
3
3
  export interface MewpExternalIngestionAdapters {
4
4
  toComparableText: (value: any) => string;
@@ -12,6 +12,6 @@ export default class MewpExternalIngestionUtils {
12
12
  private externalTableUtils;
13
13
  constructor(externalTableUtils: MewpExternalTableUtils);
14
14
  loadExternalBugsByTestCase(externalBugsFile: MewpExternalFileRef | null | undefined, adapters: MewpExternalIngestionAdapters): Promise<Map<number, MewpBugLink[]>>;
15
- loadExternalL3L4ByBaseKey(externalL3L4File: MewpExternalFileRef | null | undefined, adapters: MewpExternalIngestionAdapters): Promise<Map<string, MewpL3L4Link[]>>;
15
+ loadExternalL3L4ByBaseKey(externalL3L4File: MewpExternalFileRef | null | undefined, adapters: MewpExternalIngestionAdapters): Promise<Map<string, MewpL3L4Pair[]>>;
16
16
  private toPositiveNumber;
17
17
  }
@@ -127,19 +127,32 @@ class MewpExternalIngestionUtils {
127
127
  return new Map();
128
128
  }
129
129
  logger_1.default.info(`MEWP external L3/L4 ingestion: start source='${sourceName || 'unknown'}' rows=${rows.length}`);
130
- const linksByBaseKey = new Map();
131
- const addLink = (baseKey, level, id, title) => {
132
- if (!baseKey || !id)
130
+ const pairsByBaseKey = new Map();
131
+ const addPair = (baseKey, pair) => {
132
+ const l3Id = String((pair === null || pair === void 0 ? void 0 : pair.l3Id) || '').trim();
133
+ const l4Id = String((pair === null || pair === void 0 ? void 0 : pair.l4Id) || '').trim();
134
+ if (!baseKey || (!l3Id && !l4Id))
133
135
  return;
134
- if (!linksByBaseKey.has(baseKey)) {
135
- linksByBaseKey.set(baseKey, new Map());
136
+ if (!pairsByBaseKey.has(baseKey)) {
137
+ pairsByBaseKey.set(baseKey, new Map());
136
138
  }
137
- const idKey = String(id).trim();
138
- const dedupeKey = `${level}:${idKey}`;
139
- linksByBaseKey.get(baseKey).set(dedupeKey, {
140
- id: idKey,
141
- title: String(title || '').trim(),
142
- level,
139
+ const key = `${l3Id}|${l4Id}`;
140
+ const byPair = pairsByBaseKey.get(baseKey);
141
+ const existing = byPair.get(key);
142
+ if (!existing) {
143
+ byPair.set(key, {
144
+ l3Id,
145
+ l3Title: String((pair === null || pair === void 0 ? void 0 : pair.l3Title) || '').trim(),
146
+ l4Id,
147
+ l4Title: String((pair === null || pair === void 0 ? void 0 : pair.l4Title) || '').trim(),
148
+ });
149
+ return;
150
+ }
151
+ byPair.set(key, {
152
+ l3Id: existing.l3Id || l3Id,
153
+ l3Title: existing.l3Title || String((pair === null || pair === void 0 ? void 0 : pair.l3Title) || '').trim(),
154
+ l4Id: existing.l4Id || l4Id,
155
+ l4Title: existing.l4Title || String((pair === null || pair === void 0 ? void 0 : pair.l4Title) || '').trim(),
143
156
  });
144
157
  };
145
158
  let parsedRows = 0;
@@ -192,26 +205,57 @@ class MewpExternalIngestionUtils {
192
205
  'TargetSapWbs Level 4',
193
206
  ]));
194
207
  if (area.includes('level 4')) {
208
+ // AREA 34 = Level 4 supports two modes:
209
+ // 1) Direct L2->L4: only Level-3 target column is populated; treat it as L4.
210
+ // 2) Paired L3+L4 in same row: Level-3 and Level-4 columns are both populated.
195
211
  const effectiveSapWbsLevel3 = targetSapWbsLevel3 || requirementSapWbsFallback;
196
- if (!targetIdLevel3) {
197
- parsedRows += 1;
198
- continue;
199
- }
200
- if (!adapters.isExternalStateInScope(targetStateLevel3, 'requirement')) {
201
- filteredByState += 1;
202
- parsedRows += 1;
203
- continue;
204
- }
205
- if (adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel3)) {
206
- filteredBySapWbs += 1;
207
- parsedRows += 1;
208
- continue;
212
+ const effectiveSapWbsLevel4 = targetSapWbsLevel4 || requirementSapWbsFallback;
213
+ const allowLevel3State = adapters.isExternalStateInScope(targetStateLevel3, 'requirement');
214
+ const allowLevel3SapWbs = !adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel3);
215
+ const allowLevel4State = adapters.isExternalStateInScope(targetStateLevel4, 'requirement');
216
+ const allowLevel4SapWbs = !adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel4);
217
+ const hasLevel4Columns = !!targetIdLevel4;
218
+ if (hasLevel4Columns) {
219
+ if (!allowLevel3State)
220
+ filteredByState += 1;
221
+ if (!allowLevel3SapWbs)
222
+ filteredBySapWbs += 1;
223
+ if (!allowLevel4State)
224
+ filteredByState += 1;
225
+ if (!allowLevel4SapWbs)
226
+ filteredBySapWbs += 1;
227
+ const includeL3 = !!(targetIdLevel3 && allowLevel3State && allowLevel3SapWbs);
228
+ const includeL4 = !!(targetIdLevel4 && allowLevel4State && allowLevel4SapWbs);
229
+ if (includeL3 || includeL4) {
230
+ addPair(baseKey, {
231
+ l3Id: includeL3 ? String(targetIdLevel3) : '',
232
+ l3Title: includeL3 ? targetTitleLevel3 : '',
233
+ l4Id: includeL4 ? String(targetIdLevel4) : '',
234
+ l4Title: includeL4 ? targetTitleLevel4 : '',
235
+ });
236
+ }
237
+ if (includeL3)
238
+ acceptedL3 += 1;
239
+ if (includeL4)
240
+ acceptedL4 += 1;
209
241
  }
210
- if (targetIdLevel3 &&
211
- adapters.isExternalStateInScope(targetStateLevel3, 'requirement') &&
212
- !adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel3)) {
213
- addLink(baseKey, 'L4', targetIdLevel3, targetTitleLevel3);
214
- acceptedL4 += 1;
242
+ else {
243
+ // Direct L2->L4 mode (legacy file semantics): Level-3 target column carries L4 ID/title.
244
+ const allowDirectL4State = adapters.isExternalStateInScope(targetStateLevel3, 'requirement');
245
+ const allowDirectL4SapWbs = !adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel3);
246
+ if (!allowDirectL4State)
247
+ filteredByState += 1;
248
+ if (!allowDirectL4SapWbs)
249
+ filteredBySapWbs += 1;
250
+ if (targetIdLevel3 && allowDirectL4State && allowDirectL4SapWbs) {
251
+ addPair(baseKey, {
252
+ l3Id: '',
253
+ l3Title: '',
254
+ l4Id: String(targetIdLevel3),
255
+ l4Title: targetTitleLevel3,
256
+ });
257
+ acceptedL4 += 1;
258
+ }
215
259
  }
216
260
  parsedRows += 1;
217
261
  continue;
@@ -223,10 +267,6 @@ class MewpExternalIngestionUtils {
223
267
  filteredByState += 1;
224
268
  if (!allowLevel3SapWbs)
225
269
  filteredBySapWbs += 1;
226
- if (targetIdLevel3 && allowLevel3State && allowLevel3SapWbs) {
227
- addLink(baseKey, 'L3', targetIdLevel3, targetTitleLevel3);
228
- acceptedL3 += 1;
229
- }
230
270
  const effectiveSapWbsLevel4 = targetSapWbsLevel4 || requirementSapWbsFallback;
231
271
  const allowLevel4State = adapters.isExternalStateInScope(targetStateLevel4, 'requirement');
232
272
  const allowLevel4SapWbs = !adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel4);
@@ -234,18 +274,33 @@ class MewpExternalIngestionUtils {
234
274
  filteredByState += 1;
235
275
  if (!allowLevel4SapWbs)
236
276
  filteredBySapWbs += 1;
237
- if (targetIdLevel4 && allowLevel4State && allowLevel4SapWbs) {
238
- addLink(baseKey, 'L4', targetIdLevel4, targetTitleLevel4);
239
- acceptedL4 += 1;
277
+ const includeL3 = !!(targetIdLevel3 && allowLevel3State && allowLevel3SapWbs);
278
+ const includeL4 = !!(targetIdLevel4 && allowLevel4State && allowLevel4SapWbs);
279
+ if (includeL3 || includeL4) {
280
+ addPair(baseKey, {
281
+ l3Id: includeL3 ? String(targetIdLevel3) : '',
282
+ l3Title: includeL3 ? targetTitleLevel3 : '',
283
+ l4Id: includeL4 ? String(targetIdLevel4) : '',
284
+ l4Title: includeL4 ? targetTitleLevel4 : '',
285
+ });
240
286
  }
287
+ if (includeL3)
288
+ acceptedL3 += 1;
289
+ if (includeL4)
290
+ acceptedL4 += 1;
241
291
  parsedRows += 1;
242
292
  }
243
293
  const out = new Map();
244
- for (const [baseKey, linksById] of linksByBaseKey.entries()) {
245
- out.set(baseKey, [...linksById.values()].sort((a, b) => {
246
- if (a.level !== b.level)
247
- return a.level === 'L3' ? -1 : 1;
248
- return a.id.localeCompare(b.id);
294
+ for (const [baseKey, byPair] of pairsByBaseKey.entries()) {
295
+ out.set(baseKey, [...byPair.values()].sort((a, b) => {
296
+ const aL3 = String((a === null || a === void 0 ? void 0 : a.l3Id) || '');
297
+ const bL3 = String((b === null || b === void 0 ? void 0 : b.l3Id) || '');
298
+ const l3Compare = aL3.localeCompare(bL3);
299
+ if (l3Compare !== 0)
300
+ return l3Compare;
301
+ const aL4 = String((a === null || a === void 0 ? void 0 : a.l4Id) || '');
302
+ const bL4 = String((b === null || b === void 0 ? void 0 : b.l4Id) || '');
303
+ return aL4.localeCompare(bL4);
249
304
  }));
250
305
  }
251
306
  if (parsedRows === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"mewpExternalIngestionUtils.js","sourceRoot":"","sources":["../../src/utils/mewpExternalIngestionUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mewpExternalIngestionUtils.js","sourceRoot":"","sources":["../../src/utils/mewpExternalIngestionUtils.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.80.0",
3
+ "version": "1.82.0",
4
4
  "description": "A document generator data provider, aimed to retrive data from azure devops",
5
5
  "repository": {
6
6
  "type": "git",
@@ -16,7 +16,6 @@ export interface MewpCoverageRequestOptions {
16
16
  useRelFallback?: boolean;
17
17
  externalBugsFile?: MewpExternalFileRef | null;
18
18
  externalL3L4File?: MewpExternalFileRef | null;
19
- mergeDuplicateL2Cells?: boolean;
20
19
  }
21
20
 
22
21
  export interface MewpInternalValidationRequestOptions {
@@ -73,18 +72,20 @@ export interface MewpL3L4Link {
73
72
  level: 'L3' | 'L4';
74
73
  }
75
74
 
75
+ export interface MewpL3L4Pair {
76
+ l3Id: string;
77
+ l3Title: string;
78
+ l4Id: string;
79
+ l4Title: string;
80
+ }
81
+
76
82
  export interface MewpCoverageBugCell {
77
83
  id: number | '';
78
84
  title: string;
79
85
  responsibility: string;
80
86
  }
81
87
 
82
- export interface MewpCoverageL3L4Cell {
83
- l3Id: string;
84
- l3Title: string;
85
- l4Id: string;
86
- l4Title: string;
87
- }
88
+ export type MewpCoverageL3L4Cell = MewpL3L4Pair;
88
89
 
89
90
  export interface MewpCoverageRow {
90
91
  'L2 REQ ID': string;
@@ -17,7 +17,7 @@ import type {
17
17
  MewpInternalValidationRow,
18
18
  MewpL2RequirementFamily,
19
19
  MewpL2RequirementWorkItem,
20
- MewpL3L4Link,
20
+ MewpL3L4Pair,
21
21
  MewpLinkedRequirementsByTestCase,
22
22
  MewpRequirementIndex,
23
23
  MewpRunStatus,
@@ -1090,37 +1090,47 @@ export default class ResultDataProvider {
1090
1090
  return { l3Id: '', l3Title: '', l4Id: '', l4Title: '' };
1091
1091
  }
1092
1092
 
1093
- private buildMewpCoverageL3L4Rows(links: MewpL3L4Link[]): MewpCoverageL3L4Cell[] {
1094
- const deduped = new Map<string, MewpL3L4Link>();
1095
- for (const item of links || []) {
1096
- const level = item?.level === 'L4' ? 'L4' : 'L3';
1097
- const id = String(item?.id || '').trim();
1098
- if (!id) continue;
1099
- const key = `${level}:${id}`;
1100
- if (!deduped.has(key)) {
1101
- deduped.set(key, {
1102
- id,
1103
- level,
1104
- title: String(item?.title || '').trim(),
1105
- });
1093
+ private buildMewpCoverageL3L4Rows(pairs: MewpL3L4Pair[]): MewpCoverageL3L4Cell[] {
1094
+ const deduped = new Map<string, MewpCoverageL3L4Cell>();
1095
+ for (const pair of pairs || []) {
1096
+ const l3Id = String(pair?.l3Id || '').trim();
1097
+ const l3Title = String(pair?.l3Title || '').trim();
1098
+ const l4Id = String(pair?.l4Id || '').trim();
1099
+ const l4Title = String(pair?.l4Title || '').trim();
1100
+ if (!l3Id && !l4Id) continue;
1101
+
1102
+ const key = `${l3Id}|${l4Id}`;
1103
+ const existing = deduped.get(key);
1104
+ if (!existing) {
1105
+ deduped.set(key, { l3Id, l3Title, l4Id, l4Title });
1106
+ continue;
1106
1107
  }
1107
- }
1108
- const sorted = [...deduped.values()].sort((a, b) => {
1109
- if (a.level !== b.level) return a.level === 'L3' ? -1 : 1;
1110
- return String(a.id || '').localeCompare(String(b.id || ''));
1111
- });
1112
1108
 
1113
- const rows: MewpCoverageL3L4Cell[] = [];
1114
- for (const item of sorted) {
1115
- const isL3 = item.level === 'L3';
1116
- rows.push({
1117
- l3Id: isL3 ? String(item?.id || '').trim() : '',
1118
- l3Title: isL3 ? String(item?.title || '').trim() : '',
1119
- l4Id: isL3 ? '' : String(item?.id || '').trim(),
1120
- l4Title: isL3 ? '' : String(item?.title || '').trim(),
1109
+ deduped.set(key, {
1110
+ l3Id: existing.l3Id || l3Id,
1111
+ l3Title: existing.l3Title || l3Title,
1112
+ l4Id: existing.l4Id || l4Id,
1113
+ l4Title: existing.l4Title || l4Title,
1121
1114
  });
1122
1115
  }
1123
- return rows;
1116
+ const normalizedPairs = [...deduped.values()];
1117
+ const l3KeysWithAnyL4 = new Set(
1118
+ normalizedPairs
1119
+ .filter((item) => !!String(item?.l3Id || '').trim() && !!String(item?.l4Id || '').trim())
1120
+ .map((item) => String(item?.l3Id || '').trim().toLowerCase())
1121
+ );
1122
+ const filtered = normalizedPairs.filter((item) => {
1123
+ const l3Id = String(item?.l3Id || '').trim();
1124
+ const l4Id = String(item?.l4Id || '').trim();
1125
+ if (!l3Id || !!l4Id) return true;
1126
+ return !l3KeysWithAnyL4.has(l3Id.toLowerCase());
1127
+ });
1128
+
1129
+ return filtered.sort((a, b) => {
1130
+ const l3Compare = String(a?.l3Id || '').localeCompare(String(b?.l3Id || ''));
1131
+ if (l3Compare !== 0) return l3Compare;
1132
+ return String(a?.l4Id || '').localeCompare(String(b?.l4Id || ''));
1133
+ });
1124
1134
  }
1125
1135
 
1126
1136
  private buildMewpCoverageRows(
@@ -1128,7 +1138,7 @@ export default class ResultDataProvider {
1128
1138
  requirementIndex: MewpRequirementIndex,
1129
1139
  observedTestCaseIdsByRequirement: Map<string, Set<number>>,
1130
1140
  linkedRequirementsByTestCase: MewpLinkedRequirementsByTestCase,
1131
- l3l4ByBaseKey: Map<string, MewpL3L4Link[]>,
1141
+ l3l4ByBaseKey: Map<string, MewpL3L4Pair[]>,
1132
1142
  externalBugsByTestCase: Map<number, MewpBugLink[]>,
1133
1143
  externalJoinKeysByL2?: Map<string, Set<string>>
1134
1144
  ): MewpCoverageRow[] {
@@ -1194,42 +1204,20 @@ export default class ResultDataProvider {
1194
1204
  : [];
1195
1205
  const l3l4ForRows = [...externalJoinKeys].flatMap((joinKey) => l3l4ByBaseKey.get(joinKey) || []);
1196
1206
 
1197
- const bugRows: MewpCoverageBugCell[] =
1198
- bugsForRows.length > 0
1199
- ? bugsForRows
1200
- : [];
1207
+ const bugRows: MewpCoverageBugCell[] = bugsForRows.map((bug) => ({
1208
+ id: Number.isFinite(Number(bug?.id)) && Number(bug?.id) > 0 ? Number(bug?.id) : '',
1209
+ title: String(bug?.title || '').trim(),
1210
+ responsibility: String(bug?.responsibility || '').trim(),
1211
+ }));
1201
1212
  const l3l4Rows: MewpCoverageL3L4Cell[] = this.buildMewpCoverageL3L4Rows(l3l4ForRows);
1202
-
1203
- if (bugRows.length === 0 && l3l4Rows.length === 0) {
1204
- rows.push(
1205
- this.createMewpCoverageRow(
1206
- requirement,
1207
- runStatus,
1208
- this.createEmptyMewpCoverageBugCell(),
1209
- this.createEmptyMewpCoverageL3L4Cell()
1210
- )
1211
- );
1212
- continue;
1213
- }
1214
-
1215
- for (const bug of bugRows) {
1216
- rows.push(
1217
- this.createMewpCoverageRow(
1218
- requirement,
1219
- runStatus,
1220
- bug,
1221
- this.createEmptyMewpCoverageL3L4Cell()
1222
- )
1223
- );
1224
- }
1225
-
1226
- for (const linkedL3L4 of l3l4Rows) {
1213
+ const rowCount = Math.max(bugRows.length, l3l4Rows.length, 1);
1214
+ for (let index = 0; index < rowCount; index += 1) {
1227
1215
  rows.push(
1228
1216
  this.createMewpCoverageRow(
1229
1217
  requirement,
1230
1218
  runStatus,
1231
- this.createEmptyMewpCoverageBugCell(),
1232
- linkedL3L4
1219
+ bugRows[index] || this.createEmptyMewpCoverageBugCell(),
1220
+ l3l4Rows[index] || this.createEmptyMewpCoverageL3L4Cell()
1233
1221
  )
1234
1222
  );
1235
1223
  }
@@ -1420,7 +1408,7 @@ export default class ResultDataProvider {
1420
1408
  private async loadExternalL3L4ByBaseKey(
1421
1409
  externalL3L4File: MewpExternalFileRef | null | undefined,
1422
1410
  requirementSapWbsByBaseKey: Map<string, string> = new Map<string, string>()
1423
- ): Promise<Map<string, MewpL3L4Link[]>> {
1411
+ ): Promise<Map<string, MewpL3L4Pair[]>> {
1424
1412
  return this.mewpExternalIngestionUtils.loadExternalL3L4ByBaseKey(externalL3L4File, {
1425
1413
  toComparableText: (value) => this.toMewpComparableText(value),
1426
1414
  toRequirementKey: (value) => this.toRequirementKey(value),
@@ -1341,7 +1341,7 @@ describe('ResultDataProvider', () => {
1341
1341
  expect(il).toBe('IL');
1342
1342
  });
1343
1343
 
1344
- it('should emit additive rows for bugs and L3/L4 links without bug duplication', () => {
1344
+ it('should zip bug rows with L3/L4 pairs and avoid cross-product duplication', () => {
1345
1345
  const requirements = [
1346
1346
  {
1347
1347
  requirementId: 'SR5303',
@@ -1398,8 +1398,7 @@ describe('ResultDataProvider', () => {
1398
1398
  [
1399
1399
  'SR5303',
1400
1400
  [
1401
- { id: '9003', title: 'L3 9003', level: 'L3' as const },
1402
- { id: '9103', title: 'L4 9103', level: 'L4' as const },
1401
+ { l3Id: '9003', l3Title: 'L3 9003', l4Id: '9103', l4Title: 'L4 9103' },
1403
1402
  ],
1404
1403
  ],
1405
1404
  ]);
@@ -1413,20 +1412,98 @@ describe('ResultDataProvider', () => {
1413
1412
  externalBugsByTestCase
1414
1413
  );
1415
1414
 
1416
- expect(rows).toHaveLength(4);
1417
- expect(rows.map((row: any) => row['Bug ID'])).toEqual([10003, 20003, '', '']);
1418
- expect(rows[2]).toEqual(
1415
+ expect(rows).toHaveLength(2);
1416
+ expect(rows.map((row: any) => row['Bug ID'])).toEqual([10003, 20003]);
1417
+ expect(rows[0]).toEqual(
1419
1418
  expect.objectContaining({
1420
1419
  'L3 REQ ID': '9003',
1421
- 'L4 REQ ID': '',
1420
+ 'L4 REQ ID': '9103',
1422
1421
  })
1423
1422
  );
1424
- expect(rows[3]).toEqual(
1423
+ expect(rows[1]).toEqual(
1425
1424
  expect.objectContaining({
1426
1425
  'L3 REQ ID': '',
1426
+ 'L4 REQ ID': '',
1427
+ })
1428
+ );
1429
+ });
1430
+
1431
+ it('should drop standalone L3 row when same L3 has one or more L4 links', () => {
1432
+ const requirements = [
1433
+ {
1434
+ requirementId: 'SR5310',
1435
+ baseKey: 'SR5310',
1436
+ title: 'Req 5310',
1437
+ subSystem: 'Power',
1438
+ responsibility: 'ESUK',
1439
+ linkedTestCaseIds: [111],
1440
+ },
1441
+ ];
1442
+
1443
+ const requirementIndex = new Map([
1444
+ [
1445
+ 'SR5310',
1446
+ new Map([
1447
+ [
1448
+ 111,
1449
+ {
1450
+ passed: 1,
1451
+ failed: 0,
1452
+ notRun: 0,
1453
+ },
1454
+ ],
1455
+ ]),
1456
+ ],
1457
+ ]);
1458
+
1459
+ const observedTestCaseIdsByRequirement = new Map<string, Set<number>>([
1460
+ ['SR5310', new Set([111])],
1461
+ ]);
1462
+
1463
+ const linkedRequirementsByTestCase = new Map([
1464
+ [
1465
+ 111,
1466
+ {
1467
+ baseKeys: new Set(['SR5310']),
1468
+ fullCodes: new Set(['SR5310']),
1469
+ bugIds: new Set(),
1470
+ },
1471
+ ],
1472
+ ]);
1473
+
1474
+ const l3l4ByBaseKey = new Map([
1475
+ [
1476
+ 'SR5310',
1477
+ [
1478
+ { l3Id: '9003', l3Title: 'L3 9003', l4Id: '', l4Title: '' },
1479
+ { l3Id: '9003', l3Title: 'L3 9003', l4Id: '9103', l4Title: 'L4 9103' },
1480
+ { l3Id: '9003', l3Title: 'L3 9003', l4Id: '9104', l4Title: 'L4 9104' },
1481
+ ],
1482
+ ],
1483
+ ]);
1484
+
1485
+ const rows = (resultDataProvider as any).buildMewpCoverageRows(
1486
+ requirements,
1487
+ requirementIndex,
1488
+ observedTestCaseIdsByRequirement,
1489
+ linkedRequirementsByTestCase,
1490
+ l3l4ByBaseKey,
1491
+ new Map()
1492
+ );
1493
+
1494
+ expect(rows).toHaveLength(2);
1495
+ expect(rows[0]).toEqual(
1496
+ expect.objectContaining({
1497
+ 'L3 REQ ID': '9003',
1427
1498
  'L4 REQ ID': '9103',
1428
1499
  })
1429
1500
  );
1501
+ expect(rows[1]).toEqual(
1502
+ expect.objectContaining({
1503
+ 'L3 REQ ID': '9003',
1504
+ 'L4 REQ ID': '9104',
1505
+ })
1506
+ );
1430
1507
  });
1431
1508
 
1432
1509
  it('should not emit bug rows from ADO-linked bug ids when external bugs source is empty', () => {
@@ -2561,8 +2638,29 @@ describe('ResultDataProvider', () => {
2561
2638
 
2562
2639
  const map = await (resultDataProvider as any).loadExternalL3L4ByBaseKey(validL3L4Source);
2563
2640
  expect(map.get('SR0001')).toEqual([
2564
- { id: '7002', title: 'L3 Requirement', level: 'L3' },
2565
- { id: '7001', title: 'L4 From Level3 Column', level: 'L4' },
2641
+ { l3Id: '', l3Title: '', l4Id: '7001', l4Title: 'L4 From Level3 Column' },
2642
+ { l3Id: '7002', l3Title: 'L3 Requirement', l4Id: '', l4Title: '' },
2643
+ ]);
2644
+ });
2645
+
2646
+ it('should emit paired L3+L4 when AREA 34 is Level 4 and both level columns are present', async () => {
2647
+ const mewpExternalTableUtils = (resultDataProvider as any).mewpExternalTableUtils;
2648
+ jest.spyOn(mewpExternalTableUtils, 'loadExternalTableRows').mockResolvedValueOnce([
2649
+ {
2650
+ SR: 'SR0001',
2651
+ 'AREA 34': 'Level 4',
2652
+ 'TargetWorkItemId Level 3': '7401',
2653
+ TargetTitleLevel3: 'L3 In Level4 Row',
2654
+ 'TargetStateLevel 3': 'Active',
2655
+ 'TargetWorkItemIdLevel 4': '8401',
2656
+ TargetTitleLevel4: 'L4 In Level4 Row',
2657
+ 'TargetStateLevel 4': 'Active',
2658
+ },
2659
+ ]);
2660
+
2661
+ const map = await (resultDataProvider as any).loadExternalL3L4ByBaseKey(validL3L4Source);
2662
+ expect(map.get('SR0001')).toEqual([
2663
+ { l3Id: '7401', l3Title: 'L3 In Level4 Row', l4Id: '8401', l4Title: 'L4 In Level4 Row' },
2566
2664
  ]);
2567
2665
  });
2568
2666
 
@@ -2593,8 +2691,8 @@ describe('ResultDataProvider', () => {
2593
2691
 
2594
2692
  const map = await (resultDataProvider as any).loadExternalL3L4ByBaseKey(validL3L4Source);
2595
2693
  expect(map.get('SR0001')).toEqual([
2596
- { id: '7102', title: 'L3 IL', level: 'L3' },
2597
- { id: '7201', title: 'L4 IL', level: 'L4' },
2694
+ { l3Id: '', l3Title: '', l4Id: '7201', l4Title: 'L4 IL' },
2695
+ { l3Id: '7102', l3Title: 'L3 IL', l4Id: '', l4Title: '' },
2598
2696
  ]);
2599
2697
  });
2600
2698
 
@@ -2628,7 +2726,9 @@ describe('ResultDataProvider', () => {
2628
2726
  );
2629
2727
 
2630
2728
  expect(map.has('SR0001')).toBe(false);
2631
- expect(map.get('SR0002')).toEqual([{ id: '7302', title: 'L3 From IL Requirement', level: 'L3' }]);
2729
+ expect(map.get('SR0002')).toEqual([
2730
+ { l3Id: '7302', l3Title: 'L3 From IL Requirement', l4Id: '', l4Title: '' },
2731
+ ]);
2632
2732
  });
2633
2733
 
2634
2734
  it('should resolve bug responsibility from AreaPath when SAPWBS is empty', () => {