|
|
@@ -89,21 +89,23 @@ test('S8-G01-MAPPING 多轮 run-once + 去重映射闭环', async ({ authedPage
|
|
|
const ex = await getException(authedPage, hit.matchedExceptionId);
|
|
|
expect(ex, `matchedExceptionId=${hit.matchedExceptionId} 详情不可达`).toBeTruthy();
|
|
|
expect(PENDING).toContain(String(ex.status));
|
|
|
- // 双键一致:DTO 可能未暴露 sourceRuleId / relatedObjectCode(注释字段),
|
|
|
- // 缺字段时只记录"DTO 未暴露",不视为失败;存在则严格相等。
|
|
|
- const exRule =
|
|
|
- ex.sourceRuleId ?? ex.SourceRuleId ?? ex.sourceRuleID ?? ex.ruleId ?? null;
|
|
|
- const exObj =
|
|
|
- ex.relatedObjectCode ?? ex.RelatedObjectCode ?? ex.relatedObject ?? ex.objectCode ?? null;
|
|
|
- if (exRule != null && exRule !== '') {
|
|
|
- expect(String(exRule), 'sourceRuleId 不一致').toBe(String(hit.sourceRuleId ?? ''));
|
|
|
- }
|
|
|
- if (exObj != null && exObj !== '') {
|
|
|
- expect(String(exObj), 'relatedObjectCode 不一致').toBe(String(hit.relatedObjectCode ?? ''));
|
|
|
- }
|
|
|
- const dtoFlag = exRule == null && exObj == null ? '[DTO 未暴露双键]' : '';
|
|
|
+ // 双键强制一致:5656a88d 起 ExceptionDetailDto 必须暴露 sourceRuleId / relatedObjectCode。
|
|
|
+ expect(
|
|
|
+ ex.sourceRuleId,
|
|
|
+ `ex#${ex.id} DTO 未暴露 sourceRuleId(参见 5656a88d)`,
|
|
|
+ ).not.toBeUndefined();
|
|
|
+ expect(
|
|
|
+ ex.relatedObjectCode,
|
|
|
+ `ex#${ex.id} DTO 未暴露 relatedObjectCode(参见 5656a88d)`,
|
|
|
+ ).not.toBeUndefined();
|
|
|
+ expect(String(ex.sourceRuleId ?? ''), 'sourceRuleId 不一致').toBe(
|
|
|
+ String(hit.sourceRuleId ?? ''),
|
|
|
+ );
|
|
|
+ expect(String(ex.relatedObjectCode ?? ''), 'relatedObjectCode 不一致').toBe(
|
|
|
+ String(hit.relatedObjectCode ?? ''),
|
|
|
+ );
|
|
|
mappingNotes.push(
|
|
|
- `hit{rule=${hit.sourceRuleId},obj=${hit.relatedObjectCode}} → ex#${ex.id}(${ex.status}, code=${ex.code ?? ex.exceptionCode})${dtoFlag}`,
|
|
|
+ `hit{rule=${hit.sourceRuleId},obj=${hit.relatedObjectCode}} → ex#${ex.id}(${ex.status}, code=${ex.code ?? ex.exceptionCode})`,
|
|
|
);
|
|
|
}
|
|
|
test.info().annotations.push({ type: 'mapping', description: mappingNotes.join(' || ') });
|