@@ -3,6 +3,8 @@ import { render, screen, fireEvent, waitFor } from '@testing-library/react';
33import DigitalHumanViewer from '../components/DigitalHumanViewer' ;
44import ControlPanel from '../components/ControlPanel' ;
55import { useDigitalHumanStore } from '../store/digitalHumanStore' ;
6+ import { useChatSessionStore } from '../store/chatSessionStore' ;
7+ import { useSystemStore } from '../store/systemStore' ;
68import { TTSService , ASRService } from '../core/audio/audioService' ;
79import { handleDialogueResponse } from '../core/dialogue/dialogueOrchestrator' ;
810import React from 'react' ;
@@ -246,9 +248,17 @@ describe('DigitalHumanStore', () => {
246248 currentExpression : 'neutral' ,
247249 expressionIntensity : 0.8 ,
248250 currentBehavior : 'idle' ,
251+ } ) ;
252+ useChatSessionStore . setState ( {
253+ sessionId : 'test-session' ,
249254 chatHistory : [ ] ,
255+ } ) ;
256+ useSystemStore . setState ( {
250257 error : null ,
251258 lastErrorTime : null ,
259+ connectionStatus : 'connected' ,
260+ isConnected : true ,
261+ isLoading : false ,
252262 } ) ;
253263 } ) ;
254264
@@ -291,20 +301,20 @@ describe('DigitalHumanStore', () => {
291301 } ) ;
292302
293303 it ( 'does not add empty chat messages' , ( ) => {
294- const { addChatMessage } = useDigitalHumanStore . getState ( ) ;
304+ const { addChatMessage } = useChatSessionStore . getState ( ) ;
295305 addChatMessage ( 'user' , ' ' ) ;
296- expect ( useDigitalHumanStore . getState ( ) . chatHistory ) . toHaveLength ( 0 ) ;
306+ expect ( useChatSessionStore . getState ( ) . chatHistory ) . toHaveLength ( 0 ) ;
297307 } ) ;
298308
299309 it ( 'generates unique chat message ids under the same timestamp' , ( ) => {
300310 const nowSpy = vi . spyOn ( Date , 'now' ) . mockReturnValue ( 1000 ) ;
301311
302312 try {
303- const { addChatMessage } = useDigitalHumanStore . getState ( ) ;
313+ const { addChatMessage } = useChatSessionStore . getState ( ) ;
304314 addChatMessage ( 'user' , '第一条消息' ) ;
305315 addChatMessage ( 'assistant' , '第二条消息' ) ;
306316
307- const [ firstMessage , secondMessage ] = useDigitalHumanStore . getState ( ) . chatHistory ;
317+ const [ firstMessage , secondMessage ] = useChatSessionStore . getState ( ) . chatHistory ;
308318
309319 expect ( firstMessage . id ) . not . toBe ( secondMessage . id ) ;
310320 expect ( firstMessage . timestamp ) . toBe ( 1000 ) ;
@@ -477,7 +487,7 @@ describe('ASRService', () => {
477487 return useDigitalHumanStore . getState ( ) . isMuted ;
478488 } ,
479489 get sessionId ( ) {
480- return useDigitalHumanStore . getState ( ) . sessionId ;
490+ return useChatSessionStore . getState ( ) . sessionId ;
481491 } ,
482492 get currentBehavior ( ) {
483493 return useDigitalHumanStore . getState ( ) . currentBehavior ;
@@ -518,8 +528,8 @@ describe('ASRService', () => {
518528
519529describe ( 'Dialogue orchestration' , ( ) => {
520530 beforeEach ( ( ) => {
521- useDigitalHumanStore . getState ( ) . clearChatHistory ( ) ;
522- useDigitalHumanStore . getState ( ) . clearError ( ) ;
531+ useChatSessionStore . getState ( ) . clearChatHistory ( ) ;
532+ useSystemStore . getState ( ) . clearError ( ) ;
523533 useDigitalHumanStore . getState ( ) . setMuted ( false ) ;
524534 useDigitalHumanStore . getState ( ) . setBehavior ( 'idle' ) ;
525535 useDigitalHumanStore . getState ( ) . setSpeaking ( false ) ;
@@ -548,32 +558,34 @@ describe('Dialogue orchestration', () => {
548558
549559describe ( 'Error throttle and session lifecycle' , ( ) => {
550560 beforeEach ( ( ) => {
551- useDigitalHumanStore . setState ( {
561+ useSystemStore . setState ( {
552562 error : null ,
553563 lastErrorTime : null ,
554- sessionId : 'test-session' ,
555- chatHistory : [ ] ,
556564 connectionStatus : 'connected' ,
557565 isConnected : true ,
558566 isLoading : false ,
559567 } ) ;
568+ useChatSessionStore . setState ( {
569+ sessionId : 'test-session' ,
570+ chatHistory : [ ] ,
571+ } ) ;
560572 } ) ;
561573
562574 it ( 'throttles identical error messages within 2 seconds' , ( ) => {
563575 const nowSpy = vi . spyOn ( Date , 'now' ) ;
564576
565577 try {
566578 nowSpy . mockReturnValue ( 1000 ) ;
567- useDigitalHumanStore . getState ( ) . setError ( '网络错误' ) ;
568- expect ( useDigitalHumanStore . getState ( ) . error ) . toBe ( '网络错误' ) ;
579+ useSystemStore . getState ( ) . setError ( '网络错误' ) ;
580+ expect ( useSystemStore . getState ( ) . error ) . toBe ( '网络错误' ) ;
569581
570582 nowSpy . mockReturnValue ( 2000 ) ;
571- useDigitalHumanStore . getState ( ) . setError ( '网络错误' ) ;
572- expect ( useDigitalHumanStore . getState ( ) . lastErrorTime ) . toBe ( 1000 ) ;
583+ useSystemStore . getState ( ) . setError ( '网络错误' ) ;
584+ expect ( useSystemStore . getState ( ) . lastErrorTime ) . toBe ( 1000 ) ;
573585
574586 nowSpy . mockReturnValue ( 3500 ) ;
575- useDigitalHumanStore . getState ( ) . setError ( '网络错误' ) ;
576- expect ( useDigitalHumanStore . getState ( ) . lastErrorTime ) . toBe ( 3500 ) ;
587+ useSystemStore . getState ( ) . setError ( '网络错误' ) ;
588+ expect ( useSystemStore . getState ( ) . lastErrorTime ) . toBe ( 3500 ) ;
577589 } finally {
578590 nowSpy . mockRestore ( ) ;
579591 }
@@ -584,35 +596,36 @@ describe('Error throttle and session lifecycle', () => {
584596
585597 try {
586598 nowSpy . mockReturnValue ( 1000 ) ;
587- useDigitalHumanStore . getState ( ) . setError ( '错误A' ) ;
588- expect ( useDigitalHumanStore . getState ( ) . error ) . toBe ( '错误A' ) ;
599+ useSystemStore . getState ( ) . setError ( '错误A' ) ;
600+ expect ( useSystemStore . getState ( ) . error ) . toBe ( '错误A' ) ;
589601
590602 nowSpy . mockReturnValue ( 1500 ) ;
591- useDigitalHumanStore . getState ( ) . setError ( '错误B' ) ;
592- expect ( useDigitalHumanStore . getState ( ) . error ) . toBe ( '错误B' ) ;
593- expect ( useDigitalHumanStore . getState ( ) . lastErrorTime ) . toBe ( 1500 ) ;
603+ useSystemStore . getState ( ) . setError ( '错误B' ) ;
604+ expect ( useSystemStore . getState ( ) . error ) . toBe ( '错误B' ) ;
605+ expect ( useSystemStore . getState ( ) . lastErrorTime ) . toBe ( 1500 ) ;
594606 } finally {
595607 nowSpy . mockRestore ( ) ;
596608 }
597609 } ) ;
598610
599611 it ( 'initSession resets error, loading and connection status' , ( ) => {
600- useDigitalHumanStore . setState ( {
612+ useSystemStore . setState ( {
601613 error : '旧错误' ,
602614 lastErrorTime : 999 ,
603615 isLoading : true ,
604616 connectionStatus : 'error' ,
605617 isConnected : false ,
606618 } ) ;
607619
608- const oldSessionId = useDigitalHumanStore . getState ( ) . sessionId ;
620+ const oldSessionId = useChatSessionStore . getState ( ) . sessionId ;
609621
610622 useDigitalHumanStore . getState ( ) . initSession ( ) ;
611623
612- const state = useDigitalHumanStore . getState ( ) ;
624+ const state = useSystemStore . getState ( ) ;
625+ const sessionState = useChatSessionStore . getState ( ) ;
613626
614- expect ( state . sessionId ) . not . toBe ( oldSessionId ) ;
615- expect ( state . chatHistory ) . toHaveLength ( 0 ) ;
627+ expect ( sessionState . sessionId ) . not . toBe ( oldSessionId ) ;
628+ expect ( sessionState . chatHistory ) . toHaveLength ( 0 ) ;
616629 expect ( state . error ) . toBeNull ( ) ;
617630 expect ( state . lastErrorTime ) . toBeNull ( ) ;
618631 expect ( state . isLoading ) . toBe ( false ) ;
0 commit comments