54 lines
1.7 KiB
TypeScript
54 lines
1.7 KiB
TypeScript
import { describe, it, expect, beforeEach } from 'vitest';
|
|
import { useCharacterStore } from '@/store/characterStore';
|
|
|
|
describe('characterStore chat state', () => {
|
|
beforeEach(() => {
|
|
useCharacterStore.setState({
|
|
activeCharacter: 'gandalf',
|
|
currentDialogue: null,
|
|
dialogueHistory: [],
|
|
characterMood: 'hopeful',
|
|
isDarkMagicActive: false,
|
|
questCompletionCount: 0,
|
|
chatMessages: [],
|
|
suggestedAction: null,
|
|
isChatLoading: false,
|
|
});
|
|
});
|
|
|
|
it('stores chat transcript messages', () => {
|
|
useCharacterStore.getState().setChatMessages([
|
|
{ role: 'assistant', content: 'Name your next step.' },
|
|
]);
|
|
|
|
useCharacterStore.getState().appendChatMessage({
|
|
role: 'user',
|
|
content: 'I will complete a quest.',
|
|
});
|
|
|
|
const state = useCharacterStore.getState();
|
|
expect(state.chatMessages).toHaveLength(2);
|
|
expect(state.chatMessages[1].role).toBe('user');
|
|
});
|
|
|
|
it('stores suggested action payload', () => {
|
|
useCharacterStore.getState().setSuggestedAction({
|
|
goal_type: 'finish_critical_in_progress',
|
|
title: 'Finish a critical in-progress quest',
|
|
reason: 'Momentum comes from completion.',
|
|
target: { route: '/quests', quest_id: 3 },
|
|
});
|
|
|
|
const state = useCharacterStore.getState();
|
|
expect(state.suggestedAction?.target?.route).toBe('/quests');
|
|
});
|
|
|
|
it('toggles loading state for pending chat requests', () => {
|
|
useCharacterStore.getState().setChatLoading(true);
|
|
expect(useCharacterStore.getState().isChatLoading).toBe(true);
|
|
|
|
useCharacterStore.getState().setChatLoading(false);
|
|
expect(useCharacterStore.getState().isChatLoading).toBe(false);
|
|
});
|
|
});
|