@@ -88,6 +88,53 @@ describe('mockSdkBridge processor channels', () => {
8888 ) ;
8989 } ) ;
9090
91+ it ( 'publishes session timing without a lifecycle in demo mode' , async ( ) => {
92+ const bus = new ChannelBus ( ) ;
93+ const publish = vi . spyOn ( bus , 'publish' ) ;
94+ bus . subscribe (
95+ {
96+ id : 3 ,
97+ isDestroyed : ( ) => false ,
98+ isVisible : ( ) => true ,
99+ send : vi . fn ( ) ,
100+ } ,
101+ 'session-timing.snapshot'
102+ ) ;
103+ const bridge = await publishIRacingSDKEvents (
104+ { publishMessage : vi . fn ( ) } as never ,
105+ undefined ,
106+ bus
107+ ) ;
108+ try {
109+ callbacks . session ?.( {
110+ DriverInfo : { DriverCarIdx : 0 , Drivers : [ { CarIdx : 0 } ] } ,
111+ SessionInfo : {
112+ Sessions : [ { SessionNum : 1 , SessionType : 'Race' , SessionLaps : 20 } ] ,
113+ } ,
114+ } as unknown as Session ) ;
115+ callbacks . telemetry ?.( {
116+ SessionTime : { value : [ 120 ] } ,
117+ SessionNum : { value : [ 1 ] } ,
118+ SessionState : { value : [ 4 ] } ,
119+ SessionTimeTotal : { value : [ 2400 ] } ,
120+ SessionTimeRemain : { value : [ 2280 ] } ,
121+ CamCarIdx : { value : [ 0 ] } ,
122+ CarIdxLap : { value : [ 2 ] } ,
123+ CarIdxPosition : { value : [ 1 ] } ,
124+ CarIdxLapDistPct : { value : [ 0.25 ] } ,
125+ CarIdxBestLapTime : { value : [ 60 ] } ,
126+ CarIdxLastLapTime : { value : [ 60 ] } ,
127+ } as unknown as Telemetry ) ;
128+
129+ expect ( publish ) . toHaveBeenCalledWith (
130+ 'session-timing.snapshot' ,
131+ expect . objectContaining ( { currentLap : 2 , sessionType : 'Race' } )
132+ ) ;
133+ } finally {
134+ bridge . stop ( ) ;
135+ }
136+ } ) ;
137+
91138 it ( 'feeds mock data through the relative-gap runtime' , async ( ) => {
92139 const bus = new ChannelBus ( ) ;
93140 const publish = vi . spyOn ( bus , 'publish' ) ;
0 commit comments