feat(I6): FE/BE enum contract test — pin JS mirrors to backend canon
The plain-JS frontend re-declares two backend enum value-sets by hand: download-event statuses (downloadStatus.js) and platform keys (platformColor.js). With no TS codegen, drift is silent — the same class as the last_verified_at field mismatch. tests/test_fe_be_contract.py parses both JS mirrors and asserts they equal the backend canon (downloads._ALLOWED_STATUSES, platforms.known_platform_keys()) so a change on either side fails CI on whichever moved. Backend is the source of truth. Documented the invariant in both JS file headers. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
// Single source of truth for the download-event status enum -> display
|
||||
// metadata (label/color/icon). Mirrors the backend ENUM
|
||||
// (pending|running|ok|error|skipped). Used by the stat chips, the filter
|
||||
// dropdown, and the event rows so they never drift apart.
|
||||
// dropdown, and the event rows so they never drift apart. The value set is
|
||||
// pinned against backend _ALLOWED_STATUSES by tests/test_fe_be_contract.py.
|
||||
|
||||
export const DOWNLOAD_STATUSES = [
|
||||
{ value: 'pending', label: 'Queued', color: 'grey', icon: 'mdi-clock-outline' },
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// Single source of truth for platform → color + icon mapping. Used by
|
||||
// PlatformChip and any other GS-style platform-tagged surface. The six
|
||||
// platforms FC supports map 1:1 to the GS palette; unknown platforms fall
|
||||
// back to grey + mdi-web. Operator-confirmed scope 2026-05-27.
|
||||
// back to grey + mdi-web. Operator-confirmed scope 2026-05-27. The ICONS key
|
||||
// set is pinned against backend known_platform_keys() by
|
||||
// tests/test_fe_be_contract.py.
|
||||
|
||||
const ICONS = {
|
||||
patreon: 'mdi-patreon',
|
||||
|
||||
Reference in New Issue
Block a user