feat: 新增对 未知key 的处理逻辑
All checks were successful
缓存序列化结构检查 / cache-schema-check (push) Has been skipped

This commit is contained in:
2026-07-14 15:21:34 +08:00
parent e7aa970ef8
commit c65bee5a76
5 changed files with 243 additions and 59 deletions

View File

@@ -47,6 +47,8 @@ class ReportBuilderTest {
KeyStructureChange key = new KeyStructureChange();
key.setKeyPattern("saas:period-config:migration:current");
key.setWriteLocation("SaasPeriodConfigMigrationRedisSupport#putCurrent:41");
key.setValueType("MigrationCurrentVo");
key.setOldSkeletonJson(oldJson);
key.setNewSkeletonJson(newJson);
key.setSeverity(Severity.P1);
@@ -56,9 +58,10 @@ class ReportBuilderTest {
String md = new ReportBuilder("[缓存结构变更]").toMarkdown(report);
// Key颜色 + 行内代码(与 ReportBuilder.appendKeyLine 一致)
assertTrue(md.contains(
"- <font color=\"warning\">`Key --> saas:period-config:migration:current`</font>"));
assertTrue(md.contains("- Key --> `saas:period-config:migration:current`"));
assertFalse(md.contains("key 未解析)"));
assertTrue(md.contains("> **位置**: `SaasPeriodConfigMigrationRedisSupport#putCurrent:41`"));
assertTrue(md.contains("> **类型**: `MigrationCurrentVo`"));
int oldSection = md.indexOf("> **value值由**");
int newSection = md.indexOf("> **变更为:**");
@@ -131,11 +134,36 @@ class ReportBuilderTest {
assertTrue(console.contains("======== 字段明细 ========"));
assertTrue(console.contains("**删除字段**: x"));
assertTrue(console.contains("<font color=\"warning\">\"x\":\"\"</font>"));
assertTrue(console.contains("> **位置**: `"));
assertTrue(console.contains("> **类型**: `"));
assertTrue(console.contains("> **value值由**"));
assertTrue(console.contains("> **变更为:**"));
assertFalse(console.contains("`{\"x\":\"\"}`"));
}
@Test
void unresolvedKeyShowsExpressionAndCommentHint() {
CheckReport report = baseReport();
KeyStructureChange key = new KeyStructureChange();
key.setKeyPattern("unknown-key");
key.setKeyExpression("req.getKey()");
key.setKeyUnresolved(true);
key.setWriteLocation("ClockInXxxService#export:128");
key.setValueType("List<ClockInExportVo>");
key.setOldSkeletonJson("{\"a\":\"\"}");
key.setNewSkeletonJson("{\"a\":\"\",\"b\":\"\"}");
SchemaChange added = new SchemaChange(ChangeType.FIELD_ADDED);
added.setFieldPath("b");
key.getFieldDetails().add(added);
report.getKeyChanges().add(key);
String md = new ReportBuilder("[缓存结构变更]").toMarkdown(report);
assertTrue(md.contains("- Key --> `req.getKey()` <font color=\"comment\">key 未解析)</font>"));
assertTrue(md.contains("> **位置**: `ClockInXxxService#export:128`"));
assertTrue(md.contains("> **类型**: `List<ClockInExportVo>`"));
assertFalse(md.contains("unknown-key"));
}
@Test
void pathAwareNestedHighlight() {
String json = "{\"vo\":{\"dbName\":\"\",\"id\":\"\"},\"expiresAtMs\":0}";
@@ -198,6 +226,8 @@ class ReportBuilderTest {
String addedField) {
KeyStructureChange key = new KeyStructureChange();
key.setKeyPattern(pattern);
key.setWriteLocation("DemoService#write:1");
key.setValueType("DemoVo");
key.setOldSkeletonJson(oldJson);
key.setNewSkeletonJson(newJson);
if (addedField != null) {