Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 22 additions & 24 deletions src/LeanplumInternal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -255,25 +255,23 @@ export default class LeanplumInternal {
}

const args = new ArgsBuilder()
.add(Constants.PARAMS.USER_ATTRIBUTES, JSON.stringify(userAttributes))
.add(Constants.PARAMS.COUNTRY, Constants.VALUES.DETECT)
.add(Constants.PARAMS.REGION, Constants.VALUES.DETECT)
.add(Constants.PARAMS.CITY, Constants.VALUES.DETECT)
.add(Constants.PARAMS.LOCATION, Constants.VALUES.DETECT)
.add(Constants.PARAMS.SYSTEM_NAME, this._systemName || this._browserDetector.OS)
.add(Constants.PARAMS.SYSTEM_VERSION, (this._systemVersion || '').toString())
.add(Constants.PARAMS.BROWSER_NAME, this._browserDetector.browser)
.add(Constants.PARAMS.BROWSER_VERSION, this._browserDetector.version.toString())
.add(Constants.PARAMS.LOCALE, Constants.VALUES.DETECT)
.add(Constants.PARAMS.DEVICE_NAME, this._deviceName ||
`${this._browserDetector.browser} ${this._browserDetector.version}`)
.add(Constants.PARAMS.DEVICE_MODEL, this._deviceModel || 'Web Browser')
.add(Constants.PARAMS.NEWSFEED_MESSAGES, this._lpInbox.messageIds())
.add(Constants.PARAMS.INCLUDE_DEFAULTS, false)
.add(Constants.PARAMS.INCLUDE_VARIANT_DEBUG_INFO, this._internalState.variantDebugInfoEnabled)

// Issue request.
// noinspection Annotator
.add(Constants.PARAMS.USER_ATTRIBUTES, JSON.stringify(userAttributes))
.add(Constants.PARAMS.COUNTRY, Constants.VALUES.DETECT)
.add(Constants.PARAMS.REGION, Constants.VALUES.DETECT)
.add(Constants.PARAMS.CITY, Constants.VALUES.DETECT)
.add(Constants.PARAMS.LOCATION, Constants.VALUES.DETECT)
.add(Constants.PARAMS.SYSTEM_NAME, this._systemName || this._browserDetector.OS)
.add(Constants.PARAMS.SYSTEM_VERSION, (this._systemVersion || '').toString())
.add(Constants.PARAMS.BROWSER_NAME, this._browserDetector.browser)
.add(Constants.PARAMS.BROWSER_VERSION, this._browserDetector.version.toString())
.add(Constants.PARAMS.LOCALE, Constants.VALUES.DETECT)
.add(Constants.PARAMS.DEVICE_NAME, this._deviceName ||
`${this._browserDetector.browser} ${this._browserDetector.version}`)
.add(Constants.PARAMS.DEVICE_MODEL, this._deviceModel || 'Web Browser')
.add(Constants.PARAMS.NEWSFEED_MESSAGES, this._lpInbox.messageIds())
.add(Constants.PARAMS.INCLUDE_DEFAULTS, false)
.add(Constants.PARAMS.INCLUDE_VARIANT_DEBUG_INFO, this._internalState.variantDebugInfoEnabled)

this.createRequest(Constants.METHODS.START, args, {
queued: true,
sendNow: true,
Expand All @@ -300,9 +298,9 @@ Use "npm update leanplum-sdk" or go to https://docs.leanplum.com/reference#javas
}

this._varCache.applyDiffs(
startResponse[Constants.KEYS.VARS],
startResponse[Constants.KEYS.VARIANTS],
startResponse[Constants.KEYS.ACTION_METADATA])
startResponse[Constants.KEYS.VARS],
startResponse[Constants.KEYS.VARIANTS],
startResponse[Constants.KEYS.ACTION_METADATA])
this._varCache.setVariantDebugInfo(startResponse[Constants.KEYS.VARIANT_DEBUG_INFO])
this._varCache.token = startResponse[Constants.KEYS.TOKEN]
} else {
Expand Down Expand Up @@ -553,8 +551,8 @@ Use "npm update leanplum-sdk" or go to https://docs.leanplum.com/reference#javas
appId: this._lpRequest.appId,
deviceId: this._lpRequest.deviceId,
},
this.createRequest,
this._lpRequest.getLastResponse
this.createRequest.bind(this),
this._lpRequest.getLastResponse.bind(this._lpRequest)
)
}

Expand Down
11 changes: 8 additions & 3 deletions test/mocks/internal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,19 @@ import VarCache from '../../src/VarCache'
export const lpRequestMock: Partial<jest.Mocked<LeanplumRequest>> = {
getLastResponse: jest.fn().mockImplementation((data) => data.response[0]),
isResponseSuccess: jest.fn().mockImplementation((response) => Boolean(response?.success)),
request: jest.fn()
request: jest.fn(),
}

export const lpSocketMock = {
connect: jest.fn(),
}

export const pushManagerMock: Partial<jest.Mocked<PushManager>> = {
isWebPushSubscribed: jest.fn(),
isWebPushSupported: jest.fn(),
register: jest.fn(),
subscribeUser: jest.fn(),
unsubscribeUser: jest.fn()
unsubscribeUser: jest.fn(),
}

export const varCacheMock: Partial<jest.Mocked<VarCache>> = {
Expand All @@ -29,7 +33,8 @@ export const varCacheMock: Partial<jest.Mocked<VarCache>> = {
clearUserContent: jest.fn(),
}

export function mockNextResponse(data: any) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function mockNextResponse(data: any): void {
lpRequestMock.request.mockImplementationOnce(
(method, args, options) => {
options.response(data)
Expand Down
50 changes: 44 additions & 6 deletions test/specs/LeanplumInternal.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,10 @@ import Constants from '../../src/Constants'
import LeanplumInternal from '../../src/LeanplumInternal'
import { APP_ID, KEY_DEV } from '../data/constants'
import { windowMock } from '../mocks/external'
import { lpRequestMock, mockNextResponse, pushManagerMock, varCacheMock } from '../mocks/internal'
import { lpRequestMock, lpSocketMock, mockNextResponse, pushManagerMock, varCacheMock } from '../mocks/internal'

jest.mock('../../src/LeanplumRequest', () => jest.fn().mockImplementation(() => lpRequestMock))
jest.mock('../../src/LeanplumSocket', () => jest.fn().mockImplementation(() => lpSocketMock))
jest.mock('../../src/PushManager', () => jest.fn().mockImplementation(() => pushManagerMock))
jest.mock('../../src/VarCache', () => jest.fn().mockImplementation(() => varCacheMock))

Expand Down Expand Up @@ -77,12 +78,30 @@ describe(LeanplumInternal, () => {
expect(method).toEqual('getNewsfeedMessages')
})

it('works in DEV mode', () => {
lp.setAppIdForDevelopmentMode(APP_ID, KEY_DEV)
mockNextResponse({ response: [{ success: true }] })

lp.start()

expect(lpSocketMock.connect).toHaveBeenCalledTimes(1)

// eslint-disable-next-line @typescript-eslint/no-unused-vars
const [cahe, auth, createRequest, getLastResponse] = lpSocketMock.connect.mock.calls[0]

createRequest(expect.any(String), expect.any(Object), expect.any(Object))
getLastResponse({ response: [] })

expect(lpRequestMock.request).toHaveBeenCalledTimes(2)
expect(lpRequestMock.getLastResponse).toHaveBeenCalledTimes(2)
})

describe('useSessionLength', () => {
it('starts a new session if there is no stored session', () => {
jest.spyOn(Date, 'now').mockImplementation(() => 0)

lp.useSessionLength(2)
mockNextResponse({ response: [{ success: true }], })
mockNextResponse({ response: [{ success: true }] })
lp.start()

expect(lpRequestMock.request).toHaveBeenCalledTimes(1)
Expand All @@ -93,7 +112,7 @@ describe(LeanplumInternal, () => {
jest.spyOn(Date, 'now').mockImplementation(() => currentTime)
lp.useSessionLength(2)

mockNextResponse({ response: [{ success: true }], })
mockNextResponse({ response: [{ success: true }] })
lp.start()
currentTime = 1000
lp.start()
Expand All @@ -107,16 +126,35 @@ describe(LeanplumInternal, () => {

lp.useSessionLength(2)

mockNextResponse({ response: [{ success: true }], })
mockNextResponse({ response: [{ success: true }] })
lp.start()
currentTime = 2001
mockNextResponse({ response: [{ success: true }], })
mockNextResponse({ response: [{ success: true }] })
lp.start()

expect(lpRequestMock.request).toHaveBeenCalledTimes(2)
})
})
})

describe('startFromCache', () => {
it('works in DEV mode', () => {
lp.setAppIdForDevelopmentMode(APP_ID, KEY_DEV)
mockNextResponse({ response: [{ success: true }] })

lp.start()

expect(lpSocketMock.connect).toHaveBeenCalledTimes(1)

// eslint-disable-next-line @typescript-eslint/no-unused-vars
const [cahe, auth, createRequest, getLastResponse] = lpSocketMock.connect.mock.calls[0]

createRequest(expect.any(String), expect.any(Object), expect.any(Object))
getLastResponse({ response: [] })

expect(lpRequestMock.request).toHaveBeenCalledTimes(2)
expect(lpRequestMock.getLastResponse).toHaveBeenCalledTimes(2)
})
})

describe('track', () => {
Expand Down Expand Up @@ -396,7 +434,7 @@ describe(LeanplumInternal, () => {

lp.setWebPushOptions({ serviceWorkerUrl, scope })

const result = await lp.registerForWebPush()
await lp.registerForWebPush()

const registerCall = pushManagerMock.register.mock.calls[0]
expect(registerCall[0]).toEqual(serviceWorkerUrl)
Expand Down