takt/src/__tests__/session-key.test.ts
2026-02-08 17:09:26 +09:00

54 lines
2.0 KiB
TypeScript

/**
* Tests for session key generation
*/
import { describe, it, expect } from 'vitest';
import { buildSessionKey } from '../core/piece/session-key.js';
import type { PieceMovement } from '../core/models/types.js';
function createMovement(overrides: Partial<PieceMovement> = {}): PieceMovement {
return {
name: 'test-movement',
personaDisplayName: 'test',
edit: false,
instructionTemplate: '',
passPreviousResponse: true,
...overrides,
};
}
describe('buildSessionKey', () => {
it('should use persona as base key when persona is set', () => {
const step = createMovement({ persona: 'coder', name: 'implement' });
expect(buildSessionKey(step)).toBe('coder');
});
it('should use name as base key when persona is not set', () => {
const step = createMovement({ persona: undefined, name: 'plan' });
expect(buildSessionKey(step)).toBe('plan');
});
it('should append provider when provider is specified', () => {
const step = createMovement({ persona: 'coder', provider: 'claude' });
expect(buildSessionKey(step)).toBe('coder:claude');
});
it('should use name with provider when persona is not set', () => {
const step = createMovement({ persona: undefined, name: 'review', provider: 'codex' });
expect(buildSessionKey(step)).toBe('review:codex');
});
it('should produce different keys for same persona with different providers', () => {
const claudeStep = createMovement({ persona: 'coder', provider: 'claude', name: 'claude-eye' });
const codexStep = createMovement({ persona: 'coder', provider: 'codex', name: 'codex-eye' });
expect(buildSessionKey(claudeStep)).not.toBe(buildSessionKey(codexStep));
expect(buildSessionKey(claudeStep)).toBe('coder:claude');
expect(buildSessionKey(codexStep)).toBe('coder:codex');
});
it('should not append provider when provider is undefined', () => {
const step = createMovement({ persona: 'coder', provider: undefined });
expect(buildSessionKey(step)).toBe('coder');
});
});