terminalStore.spec.ts 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import { createPinia, setActivePinia } from 'pinia';
  2. import { beforeEach, describe, expect, it } from 'vitest';
  3. import { useTerminalStore } from '../../src/state/terminalStore';
  4. describe('terminalStore', () => {
  5. beforeEach(() => setActivePinia(createPinia()));
  6. it('starts in idle right-panel mode with no active card', () => {
  7. const store = useTerminalStore();
  8. expect(store.contextPanelMode).toBe('idle');
  9. expect(store.activeCard).toBeNull();
  10. });
  11. it('switches to task mode when a card is active', () => {
  12. const store = useTerminalStore();
  13. store.setActiveCard({
  14. cardInstanceId: 'card_001',
  15. cardKey: 'department-selection',
  16. status: 'active',
  17. cardData: { departments: [] },
  18. actions: [{ actionName: 'select_department', label: '选择科室' }]
  19. });
  20. expect(store.contextPanelMode).toBe('task');
  21. });
  22. it('switches to completed mode for appointment-success card', () => {
  23. const store = useTerminalStore();
  24. store.setActiveCard({
  25. cardInstanceId: 'card_005',
  26. cardKey: 'appointment-success',
  27. status: 'completed',
  28. cardData: { appointmentNo: 'A023', mock: true },
  29. actions: []
  30. });
  31. expect(store.contextPanelMode).toBe('completed');
  32. });
  33. it('switches to error mode when error message is set', () => {
  34. const store = useTerminalStore();
  35. store.setError('网络连接失败', 'trace_abc123');
  36. expect(store.contextPanelMode).toBe('error');
  37. expect(store.errorMessage).toBe('网络连接失败');
  38. expect(store.currentTraceId).toBe('trace_abc123');
  39. });
  40. it('resets to idle clears task, card and error', () => {
  41. const store = useTerminalStore();
  42. store.setActiveCard({
  43. cardInstanceId: 'card_001',
  44. cardKey: 'department-selection',
  45. status: 'active',
  46. cardData: {},
  47. actions: []
  48. });
  49. store.setError('something went wrong');
  50. store.resetToIdle();
  51. expect(store.contextPanelMode).toBe('idle');
  52. expect(store.activeCard).toBeNull();
  53. expect(store.task).toBeNull();
  54. expect(store.errorMessage).toBe('');
  55. });
  56. it('appends assistant delta correctly', () => {
  57. const store = useTerminalStore();
  58. store.appendAssistantDelta('你好');
  59. expect(store.messages).toHaveLength(1);
  60. expect(store.messages[0].content).toBe('你好');
  61. expect(store.messages[0].streaming).toBe(true);
  62. store.appendAssistantDelta(',世界');
  63. expect(store.messages).toHaveLength(1);
  64. expect(store.messages[0].content).toBe('你好,世界');
  65. });
  66. it('completes assistant message marks streaming false', () => {
  67. const store = useTerminalStore();
  68. store.appendAssistantDelta('测试');
  69. store.completeAssistantMessage();
  70. expect(store.messages[0].streaming).toBe(false);
  71. });
  72. });