Add session ID test
This commit is contained in:
@@ -0,0 +1,79 @@
|
|||||||
|
jest.mock('#/storage', () => ({
|
||||||
|
device: {
|
||||||
|
get: jest.fn(),
|
||||||
|
set: jest.fn(),
|
||||||
|
},
|
||||||
|
}))
|
||||||
|
|
||||||
|
jest.mock('#/analytics/identifiers/util', () => ({
|
||||||
|
isSessionIdExpired: jest.fn(),
|
||||||
|
}))
|
||||||
|
|
||||||
|
jest.mock('#/lib/appState', () => ({
|
||||||
|
onAppStateChange: jest.fn(() => ({remove: jest.fn()})),
|
||||||
|
}))
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
jest.resetModules()
|
||||||
|
jest.clearAllMocks()
|
||||||
|
})
|
||||||
|
|
||||||
|
function getMocks() {
|
||||||
|
const {device} = require('#/storage')
|
||||||
|
const {isSessionIdExpired} = require('#/analytics/identifiers/util')
|
||||||
|
return {
|
||||||
|
device: jest.mocked(device),
|
||||||
|
isSessionIdExpired: jest.mocked(isSessionIdExpired),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('session initialization', () => {
|
||||||
|
it('creates new session and sets timestamp when none exists', () => {
|
||||||
|
const {device, isSessionIdExpired} = getMocks()
|
||||||
|
device.get.mockReturnValue(undefined)
|
||||||
|
isSessionIdExpired.mockReturnValue(false)
|
||||||
|
|
||||||
|
const {getInitialSessionId} = require('./session')
|
||||||
|
const id = getInitialSessionId()
|
||||||
|
|
||||||
|
expect(id).toBeDefined()
|
||||||
|
expect(typeof id).toBe('string')
|
||||||
|
expect(device.set).toHaveBeenCalledWith(['nativeSessionId'], id)
|
||||||
|
expect(device.set).toHaveBeenCalledWith(
|
||||||
|
['nativeSessionIdLastEventAt'],
|
||||||
|
expect.any(Number),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('reuses existing session when not expired', () => {
|
||||||
|
const {device, isSessionIdExpired} = getMocks()
|
||||||
|
const existingId = 'existing-session-id'
|
||||||
|
device.get.mockImplementation((key: string[]) => {
|
||||||
|
if (key[0] === 'nativeSessionId') return existingId
|
||||||
|
if (key[0] === 'nativeSessionIdLastEventAt') return Date.now()
|
||||||
|
return undefined
|
||||||
|
})
|
||||||
|
isSessionIdExpired.mockReturnValue(false)
|
||||||
|
|
||||||
|
const {getInitialSessionId} = require('./session')
|
||||||
|
|
||||||
|
expect(getInitialSessionId()).toBe(existingId)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('creates new session when existing is expired', () => {
|
||||||
|
const {device, isSessionIdExpired} = getMocks()
|
||||||
|
const existingId = 'existing-session-id'
|
||||||
|
device.get.mockImplementation((key: string[]) => {
|
||||||
|
if (key[0] === 'nativeSessionId') return existingId
|
||||||
|
if (key[0] === 'nativeSessionIdLastEventAt') return Date.now() - 999999
|
||||||
|
return undefined
|
||||||
|
})
|
||||||
|
isSessionIdExpired.mockReturnValue(true)
|
||||||
|
|
||||||
|
const {getInitialSessionId} = require('./session')
|
||||||
|
const id = getInitialSessionId()
|
||||||
|
|
||||||
|
expect(id).not.toBe(existingId)
|
||||||
|
expect(device.set).toHaveBeenCalledWith(['nativeSessionId'], id)
|
||||||
|
})
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user