feat: harden test and registry evidence
This commit is contained in:
@@ -0,0 +1,225 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"cases": [
|
||||
{
|
||||
"id": "ordering-only",
|
||||
"expected": "none",
|
||||
"before": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": {
|
||||
"A": { "path": "/a", "tags": ["one", "two"] },
|
||||
"B": { "path": "/b", "tags": ["three"] }
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"registries": [
|
||||
{
|
||||
"rows": {
|
||||
"B": { "tags": ["three"], "path": "/b" },
|
||||
"A": { "tags": ["two", "one"], "path": "/a" }
|
||||
},
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"registryId": "FE-REG-TEST"
|
||||
}
|
||||
],
|
||||
"schemaVersion": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "row-addition",
|
||||
"expected": "additive",
|
||||
"before": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "path": "/a" } }
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": {
|
||||
"A": { "path": "/a" },
|
||||
"B": { "path": "/b" }
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "behavior-change",
|
||||
"expected": "behavior-change",
|
||||
"before": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "path": "/a", "owner": "one" } }
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "path": "/a", "owner": "two" } }
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "row-removal",
|
||||
"expected": "breaking",
|
||||
"before": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": {
|
||||
"A": { "path": "/a" },
|
||||
"B": { "path": "/b" }
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "path": "/a" } }
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "field-type-narrowing",
|
||||
"expected": "breaking",
|
||||
"before": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "limit": 10 } }
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "limit": "10" } }
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "route-path-change",
|
||||
"expected": "breaking",
|
||||
"before": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "path": "/before" } }
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "path": "/after" } }
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "registry-contract-narrowing",
|
||||
"expected": "breaking",
|
||||
"before": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": {
|
||||
"breakingFields": ["path"],
|
||||
"allowedValues": { "kind": ["one", "two"] }
|
||||
},
|
||||
"rows": { "A": { "path": "/a", "kind": "one" } }
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": {
|
||||
"breakingFields": ["path"],
|
||||
"allowedValues": { "kind": ["one"] }
|
||||
},
|
||||
"rows": { "A": { "path": "/a", "kind": "one" } }
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"breakingEvidence": {
|
||||
"before": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "path": "/before" } }
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "path": "/after" } }
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"tamperedApproval": {
|
||||
"snapshot": {
|
||||
"schemaVersion": 2,
|
||||
"registries": []
|
||||
},
|
||||
"approval": {
|
||||
"schemaVersion": 1,
|
||||
"snapshotDigest": "tampered",
|
||||
"owner": "fixture-owner",
|
||||
"approvedAt": "2026-07-26T00:00:00.000Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"snapshotDigest": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"owner": "negative-fixture",
|
||||
"approvedAt": "2026-07-26T00:00:00.000Z"
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
test("false visual pass", async ({ page }) => {
|
||||
await expect(page).toHaveScreenshot({
|
||||
mask: [page.locator("body")]
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1 @@
|
||||
test.skip("unowned indefinite quarantine", async () => {});
|
||||
Reference in New Issue
Block a user