1
- import { SessionIdManager } from '../sessionid'
1
+ import { DEFAULT_SESSION_IDLE_TIMEOUT_SECONDS , MAX_SESSION_IDLE_TIMEOUT_SECONDS , SessionIdManager } from '../sessionid'
2
2
import { SESSION_ID } from '../constants'
3
3
import { sessionStore } from '../storage'
4
4
import { uuid7ToTimestampMs , uuidv7 } from '../uuidv7'
5
5
import { BootstrapConfig , PostHogConfig , Properties } from '../types'
6
6
import { PostHogPersistence } from '../posthog-persistence'
7
7
import { assignableWindow } from '../utils/globals'
8
+ import { PostHog } from '../posthog-core'
8
9
9
10
jest . mock ( '../uuidv7' )
10
11
jest . mock ( '../storage' )
@@ -13,14 +14,22 @@ describe('Session ID manager', () => {
13
14
let timestamp : number | undefined
14
15
let now : number
15
16
let timestampOfSessionStart : number
17
+ let registerMock : jest . Mock
18
+
16
19
const config : Partial < PostHogConfig > = {
17
20
persistence_name : 'persistance-name' ,
18
21
}
19
22
20
23
let persistence : { props : Properties } & Partial < PostHogPersistence >
21
24
22
- const sessionIdMgr = ( phPersistence : Partial < PostHogPersistence > ) =>
23
- new SessionIdManager ( config , phPersistence as PostHogPersistence )
25
+ const sessionIdMgr = ( phPersistence : Partial < PostHogPersistence > ) => {
26
+ registerMock = jest . fn ( )
27
+ return new SessionIdManager ( {
28
+ config,
29
+ persistence : phPersistence as PostHogPersistence ,
30
+ register : registerMock ,
31
+ } as unknown as PostHog )
32
+ }
24
33
25
34
const originalDate = Date
26
35
@@ -70,7 +79,11 @@ describe('Session ID manager', () => {
70
79
const bootstrap : BootstrapConfig = {
71
80
sessionID : bootstrapSessionId ,
72
81
}
73
- const sessionIdManager = new SessionIdManager ( { ...config , bootstrap } , persistence as PostHogPersistence )
82
+ const sessionIdManager = new SessionIdManager ( {
83
+ config : { ...config , bootstrap } ,
84
+ persistence : persistence as PostHogPersistence ,
85
+ register : jest . fn ( ) ,
86
+ } as unknown as PostHog )
74
87
75
88
// act
76
89
const { sessionId, sessionStartTimestamp } = sessionIdManager . checkAndGetSessionAndWindowId ( false , now )
@@ -79,6 +92,15 @@ describe('Session ID manager', () => {
79
92
expect ( sessionId ) . toEqual ( bootstrapSessionId )
80
93
expect ( sessionStartTimestamp ) . toEqual ( timestamp )
81
94
} )
95
+
96
+ it ( 'registers the session timeout as an event property' , ( ) => {
97
+ config . session_idle_timeout_seconds = 8 * 60 * 60
98
+ const sessionIdManager = sessionIdMgr ( persistence )
99
+ sessionIdManager . checkAndGetSessionAndWindowId ( undefined , timestamp )
100
+ expect ( registerMock ) . toHaveBeenCalledWith ( {
101
+ $configured_session_timeout_ms : config . session_idle_timeout_seconds * 1000 ,
102
+ } )
103
+ } )
82
104
} )
83
105
84
106
describe ( 'stored session data' , ( ) => {
@@ -317,12 +339,13 @@ describe('Session ID manager', () => {
317
339
318
340
describe ( 'custom session_idle_timeout_seconds' , ( ) => {
319
341
const mockSessionManager = ( timeout : number | undefined ) =>
320
- new SessionIdManager (
321
- {
342
+ new SessionIdManager ( {
343
+ config : {
322
344
session_idle_timeout_seconds : timeout ,
323
345
} ,
324
- persistence as PostHogPersistence
325
- )
346
+ persistence : persistence as PostHogPersistence ,
347
+ register : jest . fn ( ) ,
348
+ } as unknown as PostHog )
326
349
327
350
beforeEach ( ( ) => {
328
351
console . warn = jest . fn ( )
@@ -336,10 +359,14 @@ describe('Session ID manager', () => {
336
359
expect ( console . warn ) . toBeCalledTimes ( 1 )
337
360
expect ( mockSessionManager ( 30 * 60 - 1 ) [ '_sessionTimeoutMs' ] ) . toEqual ( ( 30 * 60 - 1 ) * 1000 )
338
361
expect ( console . warn ) . toBeCalledTimes ( 1 )
339
- expect ( mockSessionManager ( 30 * 60 + 1 ) [ '_sessionTimeoutMs' ] ) . toEqual ( 30 * 60 * 1000 )
362
+ expect ( mockSessionManager ( MAX_SESSION_IDLE_TIMEOUT_SECONDS + 1 ) [ '_sessionTimeoutMs' ] ) . toEqual (
363
+ MAX_SESSION_IDLE_TIMEOUT_SECONDS * 1000
364
+ )
340
365
expect ( console . warn ) . toBeCalledTimes ( 2 )
341
366
// @ts -expect-error - test invalid input
342
- expect ( mockSessionManager ( 'foobar' ) [ '_sessionTimeoutMs' ] ) . toEqual ( 30 * 60 * 1000 )
367
+ expect ( mockSessionManager ( 'foobar' ) [ '_sessionTimeoutMs' ] ) . toEqual (
368
+ DEFAULT_SESSION_IDLE_TIMEOUT_SECONDS * 1000
369
+ )
343
370
expect ( console . warn ) . toBeCalledTimes ( 3 )
344
371
} )
345
372
} )
0 commit comments