test(session): cover the turn/end step invariant and content shape guard

- invariant.spec: a turn/end whose step does not match the last opened
  step fails with 'expected last step'.
- session.spec: a seed message whose content is not an array fails with
  'message has invalid content'.
This commit is contained in:
_Kerman
2026-08-03 19:54:32 +08:00
parent fa79008c75
commit 2e2bcd0e42
2 changed files with 15 additions and 0 deletions

View File

@@ -131,6 +131,13 @@ describe('session-log invariants', () => {
expect(() => second.append('turn/start', { turn: 3 }))
.toThrow(/expected turn 2, got 3/)
const third = (await setup()).ctx.sessions.create()
third.append('turn/start', { turn: 1 })
third.append('step/start', { turn: 1, step: 1 })
third.append('step/end', { turn: 1, step: 1 })
expect(() => third.append('turn/end', { turn: 1, step: 2, reason: { kind: 'completed' } }))
.toThrow(/expected last step 1, got 2/)
const outside = (await setup()).ctx.sessions.create()
expect(() => outside.append('user/message', createUserMessage({
content: [{ type: 'text', text: 'idle context' }],

View File

@@ -232,6 +232,14 @@ describe('Session', () => {
},
message: 'message has invalid source',
},
{
name: 'content shape',
event: {
type: 'user/message', seq: 0, time: 1, surfaceOp: 'append',
data: { ...user, content: 'not-an-array' },
},
message: 'message has invalid content',
},
{
name: 'assistant source',
event: {