CLose story 1.2
This commit is contained in:
Vendored
+46
@@ -0,0 +1,46 @@
|
||||
/**
|
||||
* tests/fixtures/pending-op.js
|
||||
*
|
||||
* PendingOp fixtures — frozen. Includes: valid, timeoutId null, expired issuedAt.
|
||||
*/
|
||||
|
||||
export const PENDING_OP_FIXTURES = Object.freeze({
|
||||
valid: Object.freeze({
|
||||
opId: "op-001",
|
||||
userId: "user-abc",
|
||||
targetState: "hidden",
|
||||
previousState: "active",
|
||||
issuedAt: 1700000000000,
|
||||
timeoutId: 42,
|
||||
}),
|
||||
|
||||
// timeoutId: null — timeout not yet set
|
||||
timeoutNull: Object.freeze({
|
||||
opId: "op-002",
|
||||
userId: "user-abc",
|
||||
targetState: "active",
|
||||
previousState: "hidden",
|
||||
issuedAt: 1700000000000,
|
||||
timeoutId: null,
|
||||
}),
|
||||
|
||||
// expired issuedAt — very old timestamp (still valid per contract; age check is VisibilityManager's job)
|
||||
expiredIssuedAt: Object.freeze({
|
||||
opId: "op-003",
|
||||
userId: "user-xyz",
|
||||
targetState: "hidden",
|
||||
previousState: "active",
|
||||
issuedAt: 0,
|
||||
timeoutId: null,
|
||||
}),
|
||||
|
||||
// Invalid: empty opId
|
||||
emptyOpId: Object.freeze({
|
||||
opId: "",
|
||||
userId: "user-abc",
|
||||
targetState: "hidden",
|
||||
previousState: "active",
|
||||
issuedAt: 1700000000000,
|
||||
timeoutId: null,
|
||||
}),
|
||||
});
|
||||
Vendored
+42
@@ -0,0 +1,42 @@
|
||||
/**
|
||||
* tests/fixtures/scene-preset.js
|
||||
*
|
||||
* ScenePreset fixtures — frozen. Includes edge case: empty matrix {}.
|
||||
*/
|
||||
|
||||
export const SCENE_PRESET_FIXTURES = Object.freeze({
|
||||
valid: Object.freeze({
|
||||
_version: 1,
|
||||
name: "Combat Scene",
|
||||
matrix: Object.freeze({ "user-001": "active", "user-002": "hidden" }),
|
||||
createdAt: 1700000000000,
|
||||
updatedAt: 1700000000000,
|
||||
}),
|
||||
|
||||
// Edge case: empty matrix (all participants in default state)
|
||||
emptyMatrix: Object.freeze({
|
||||
_version: 1,
|
||||
name: "Empty Preset",
|
||||
matrix: Object.freeze({}),
|
||||
createdAt: 1700000000000,
|
||||
updatedAt: 1700000000001,
|
||||
}),
|
||||
|
||||
// Invalid: missing name
|
||||
missingName: Object.freeze({
|
||||
_version: 1,
|
||||
name: "",
|
||||
matrix: Object.freeze({}),
|
||||
createdAt: 1700000000000,
|
||||
updatedAt: 1700000000000,
|
||||
}),
|
||||
|
||||
// Invalid: wrong version
|
||||
wrongVersion: Object.freeze({
|
||||
_version: 2,
|
||||
name: "Future Preset",
|
||||
matrix: Object.freeze({}),
|
||||
createdAt: 1700000000000,
|
||||
updatedAt: 1700000000000,
|
||||
}),
|
||||
});
|
||||
Vendored
+79
@@ -0,0 +1,79 @@
|
||||
/**
|
||||
* tests/fixtures/socket-payloads.js
|
||||
*
|
||||
* Socket payload fixtures — frozen; include valid and invalid variants.
|
||||
* Used by socket-message contract tests and SocketHandler tests.
|
||||
*
|
||||
* All exports are Object.freeze'd — never mutate fixture data in tests.
|
||||
*/
|
||||
|
||||
export const SOCKET_PAYLOADS = Object.freeze({
|
||||
// ── Valid intent (GM → all clients) ──────────────────────────────────────
|
||||
validIntent: Object.freeze({
|
||||
event: "scrying-pool.visibility.set",
|
||||
payload: Object.freeze({
|
||||
opId: "op-001",
|
||||
userId: "user-abc",
|
||||
targetState: "hidden",
|
||||
}),
|
||||
}),
|
||||
|
||||
// ── Valid echo (broadcast ← GM) ───────────────────────────────────────────
|
||||
validEcho: Object.freeze({
|
||||
event: "scrying-pool.visibility.updated",
|
||||
payload: Object.freeze({
|
||||
opId: "op-001",
|
||||
userId: "user-abc",
|
||||
state: "hidden",
|
||||
revision: 1,
|
||||
}),
|
||||
}),
|
||||
|
||||
// ── Malformed: missing opId ───────────────────────────────────────────────
|
||||
missingOpId: Object.freeze({
|
||||
event: "scrying-pool.visibility.set",
|
||||
payload: Object.freeze({
|
||||
userId: "user-abc",
|
||||
targetState: "hidden",
|
||||
// opId intentionally omitted
|
||||
}),
|
||||
}),
|
||||
|
||||
// ── Malformed: wrong enum value for targetState ───────────────────────────
|
||||
invalidState: Object.freeze({
|
||||
event: "scrying-pool.visibility.set",
|
||||
payload: Object.freeze({
|
||||
opId: "op-002",
|
||||
userId: "user-abc",
|
||||
targetState: "invisible", // not a valid VisibilityState
|
||||
}),
|
||||
}),
|
||||
|
||||
// ── Malformed: extra unknown keys in payload ──────────────────────────────
|
||||
extraKeys: Object.freeze({
|
||||
event: "scrying-pool.visibility.set",
|
||||
payload: Object.freeze({
|
||||
opId: "op-003",
|
||||
userId: "user-abc",
|
||||
targetState: "hidden",
|
||||
extraField: "should-not-be-here",
|
||||
}),
|
||||
}),
|
||||
|
||||
// ── Malformed: unknown event name ─────────────────────────────────────────
|
||||
unknownEvent: Object.freeze({
|
||||
event: "sp:stateChange", // violates naming convention
|
||||
payload: Object.freeze({ opId: "op-004", userId: "user-abc" }),
|
||||
}),
|
||||
|
||||
// ── Malformed: echo message missing revision field ───────────────────────
|
||||
missingRevision: Object.freeze({
|
||||
event: "scrying-pool.visibility.updated",
|
||||
payload: Object.freeze({
|
||||
opId: "op-005",
|
||||
userId: "user-abc",
|
||||
state: "hidden",
|
||||
// revision intentionally omitted
|
||||
}),
|
||||
}),
|
||||
});
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
/**
|
||||
* tests/fixtures/state-store-snapshots.js
|
||||
*
|
||||
* StateStore snapshot fixtures — frozen.
|
||||
* Used by StateStore and VisibilityManager tests (Story 1.3+).
|
||||
*/
|
||||
|
||||
export const STATE_STORE_SNAPSHOTS = Object.freeze({
|
||||
empty: Object.freeze({ _version: 1, matrix: Object.freeze({}) }),
|
||||
|
||||
threeParticipants: Object.freeze({
|
||||
_version: 1,
|
||||
matrix: Object.freeze({
|
||||
"user-001": "active",
|
||||
"user-002": "hidden",
|
||||
"user-003": "self-muted",
|
||||
}),
|
||||
}),
|
||||
|
||||
allStates: Object.freeze({
|
||||
_version: 1,
|
||||
matrix: Object.freeze({
|
||||
"u-active": "active",
|
||||
"u-hidden": "hidden",
|
||||
"u-self-muted": "self-muted",
|
||||
"u-offline": "offline",
|
||||
"u-cam-lost": "cam-lost",
|
||||
"u-reconnecting": "reconnecting",
|
||||
"u-never-connected": "never-connected",
|
||||
"u-ghost": "ghost",
|
||||
}),
|
||||
}),
|
||||
});
|
||||
Vendored
+37
@@ -0,0 +1,37 @@
|
||||
/**
|
||||
* tests/fixtures/visibility-states.js
|
||||
*
|
||||
* Visibility state fixtures — frozen.
|
||||
*/
|
||||
|
||||
export const VISIBILITY_STATE_FIXTURES = Object.freeze({
|
||||
validMatrix: Object.freeze({
|
||||
_version: 1,
|
||||
matrix: Object.freeze({
|
||||
"user-001": "active",
|
||||
"user-002": "hidden",
|
||||
"user-003": "offline",
|
||||
}),
|
||||
}),
|
||||
|
||||
emptyMatrix: Object.freeze({
|
||||
_version: 1,
|
||||
matrix: Object.freeze({}),
|
||||
}),
|
||||
|
||||
// Invalid: userId maps to null (not a valid state)
|
||||
invalidNullState: Object.freeze({
|
||||
_version: 1,
|
||||
matrix: Object.freeze({
|
||||
"user-001": null,
|
||||
}),
|
||||
}),
|
||||
|
||||
// Invalid: unknown state value
|
||||
invalidUnknownState: Object.freeze({
|
||||
_version: 1,
|
||||
matrix: Object.freeze({
|
||||
"user-001": "invisible",
|
||||
}),
|
||||
}),
|
||||
});
|
||||
Reference in New Issue
Block a user