@@ -21,7 +21,8 @@ jest.mock('react-native-callkeep', () => ({
2121 setAvailable : jest . fn ( )
2222} ) ) ;
2323
24- function createMockCall ( callId : string ) {
24+ function createMockCall ( callId : string , options ?: { initialState ?: string } ) {
25+ const initialState = options ?. initialState ?? 'active' ;
2526 const listeners : Record < string , Set < ( ...args : unknown [ ] ) => void > > = { } ;
2627 const emitter = {
2728 on : ( ev : string , fn : ( ...args : unknown [ ] ) => void ) => {
@@ -55,7 +56,7 @@ function createMockCall(callId: string) {
5556 ] ;
5657 const call = {
5758 callId,
58- state : 'active' ,
59+ state : initialState ,
5960 hidden : false ,
6061 localParticipant,
6162 remoteParticipants,
@@ -98,13 +99,6 @@ describe('useCallStore controlsVisible', () => {
9899 expect ( useCallStore . getState ( ) . controlsVisible ) . toBe ( true ) ;
99100 } ) ;
100101
101- it ( 'showControls sets true when hidden' , ( ) => {
102- useCallStore . getState ( ) . toggleControlsVisible ( ) ;
103- expect ( useCallStore . getState ( ) . controlsVisible ) . toBe ( false ) ;
104- useCallStore . getState ( ) . showControls ( ) ;
105- expect ( useCallStore . getState ( ) . controlsVisible ) . toBe ( true ) ;
106- } ) ;
107-
108102 it ( 'auto-shows controls on stateChange event' , ( ) => {
109103 const { call, emit } = createMockCall ( 'c1' ) ;
110104 useCallStore . getState ( ) . setCall ( call ) ;
@@ -160,6 +154,39 @@ describe('useCallStore roomId', () => {
160154 useCallStore . getState ( ) . reset ( ) ;
161155 expect ( useCallStore . getState ( ) . roomId ) . toBeNull ( ) ;
162156 } ) ;
157+
158+ it ( 'setRoomId persists across setCall until reset' , ( ) => {
159+ useCallStore . getState ( ) . setRoomId ( 'room-persist-1' ) ;
160+ const { call } = createMockCall ( 'persist-call' ) ;
161+ useCallStore . getState ( ) . setCall ( call ) ;
162+ expect ( useCallStore . getState ( ) . roomId ) . toBe ( 'room-persist-1' ) ;
163+ } ) ;
164+ } ) ;
165+
166+ describe ( 'useCallStore callStartTime' , ( ) => {
167+ beforeEach ( ( ) => {
168+ useCallStore . getState ( ) . resetNativeCallId ( ) ;
169+ useCallStore . getState ( ) . reset ( ) ;
170+ } ) ;
171+
172+ afterEach ( ( ) => {
173+ jest . useRealTimers ( ) ;
174+ } ) ;
175+
176+ it ( 'sets callStartTime when transitioning ringing to active' , ( ) => {
177+ jest . useFakeTimers ( ) ;
178+ const fixed = new Date ( '2020-01-01T00:00:00.000Z' ) ;
179+ jest . setSystemTime ( fixed ) ;
180+ const { call, emit } = createMockCall ( 'ring-to-active' , { initialState : 'ringing' } ) ;
181+ useCallStore . getState ( ) . setCall ( call ) ;
182+ expect ( useCallStore . getState ( ) . callStartTime ) . toBeNull ( ) ;
183+
184+ ( call as { state : string } ) . state = 'active' ;
185+ emit ( 'stateChange' ) ;
186+
187+ expect ( useCallStore . getState ( ) . callStartTime ) . toBe ( fixed . getTime ( ) ) ;
188+ expect ( useCallStore . getState ( ) . callState ) . toBe ( 'active' ) ;
189+ } ) ;
163190} ) ;
164191
165192describe ( 'useCallStore native accepted + stale timer' , ( ) => {
0 commit comments