Skip to content

Commit 35a512b

Browse files
authored
fix: error in dev mode (#83)
1 parent e729144 commit 35a512b

File tree

3 files changed

+74
-33
lines changed

3 files changed

+74
-33
lines changed

src/LeanplumInternal.ts

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -255,25 +255,23 @@ export default class LeanplumInternal {
255255
}
256256

257257
const args = new ArgsBuilder()
258-
.add(Constants.PARAMS.USER_ATTRIBUTES, JSON.stringify(userAttributes))
259-
.add(Constants.PARAMS.COUNTRY, Constants.VALUES.DETECT)
260-
.add(Constants.PARAMS.REGION, Constants.VALUES.DETECT)
261-
.add(Constants.PARAMS.CITY, Constants.VALUES.DETECT)
262-
.add(Constants.PARAMS.LOCATION, Constants.VALUES.DETECT)
263-
.add(Constants.PARAMS.SYSTEM_NAME, this._systemName || this._browserDetector.OS)
264-
.add(Constants.PARAMS.SYSTEM_VERSION, (this._systemVersion || '').toString())
265-
.add(Constants.PARAMS.BROWSER_NAME, this._browserDetector.browser)
266-
.add(Constants.PARAMS.BROWSER_VERSION, this._browserDetector.version.toString())
267-
.add(Constants.PARAMS.LOCALE, Constants.VALUES.DETECT)
268-
.add(Constants.PARAMS.DEVICE_NAME, this._deviceName ||
269-
`${this._browserDetector.browser} ${this._browserDetector.version}`)
270-
.add(Constants.PARAMS.DEVICE_MODEL, this._deviceModel || 'Web Browser')
271-
.add(Constants.PARAMS.NEWSFEED_MESSAGES, this._lpInbox.messageIds())
272-
.add(Constants.PARAMS.INCLUDE_DEFAULTS, false)
273-
.add(Constants.PARAMS.INCLUDE_VARIANT_DEBUG_INFO, this._internalState.variantDebugInfoEnabled)
274-
275-
// Issue request.
276-
// noinspection Annotator
258+
.add(Constants.PARAMS.USER_ATTRIBUTES, JSON.stringify(userAttributes))
259+
.add(Constants.PARAMS.COUNTRY, Constants.VALUES.DETECT)
260+
.add(Constants.PARAMS.REGION, Constants.VALUES.DETECT)
261+
.add(Constants.PARAMS.CITY, Constants.VALUES.DETECT)
262+
.add(Constants.PARAMS.LOCATION, Constants.VALUES.DETECT)
263+
.add(Constants.PARAMS.SYSTEM_NAME, this._systemName || this._browserDetector.OS)
264+
.add(Constants.PARAMS.SYSTEM_VERSION, (this._systemVersion || '').toString())
265+
.add(Constants.PARAMS.BROWSER_NAME, this._browserDetector.browser)
266+
.add(Constants.PARAMS.BROWSER_VERSION, this._browserDetector.version.toString())
267+
.add(Constants.PARAMS.LOCALE, Constants.VALUES.DETECT)
268+
.add(Constants.PARAMS.DEVICE_NAME, this._deviceName ||
269+
`${this._browserDetector.browser} ${this._browserDetector.version}`)
270+
.add(Constants.PARAMS.DEVICE_MODEL, this._deviceModel || 'Web Browser')
271+
.add(Constants.PARAMS.NEWSFEED_MESSAGES, this._lpInbox.messageIds())
272+
.add(Constants.PARAMS.INCLUDE_DEFAULTS, false)
273+
.add(Constants.PARAMS.INCLUDE_VARIANT_DEBUG_INFO, this._internalState.variantDebugInfoEnabled)
274+
277275
this.createRequest(Constants.METHODS.START, args, {
278276
queued: true,
279277
sendNow: true,
@@ -300,9 +298,9 @@ Use "npm update leanplum-sdk" or go to https://docs.leanplum.com/reference#javas
300298
}
301299

302300
this._varCache.applyDiffs(
303-
startResponse[Constants.KEYS.VARS],
304-
startResponse[Constants.KEYS.VARIANTS],
305-
startResponse[Constants.KEYS.ACTION_METADATA])
301+
startResponse[Constants.KEYS.VARS],
302+
startResponse[Constants.KEYS.VARIANTS],
303+
startResponse[Constants.KEYS.ACTION_METADATA])
306304
this._varCache.setVariantDebugInfo(startResponse[Constants.KEYS.VARIANT_DEBUG_INFO])
307305
this._varCache.token = startResponse[Constants.KEYS.TOKEN]
308306
} else {
@@ -553,8 +551,8 @@ Use "npm update leanplum-sdk" or go to https://docs.leanplum.com/reference#javas
553551
appId: this._lpRequest.appId,
554552
deviceId: this._lpRequest.deviceId,
555553
},
556-
this.createRequest,
557-
this._lpRequest.getLastResponse
554+
this.createRequest.bind(this),
555+
this._lpRequest.getLastResponse.bind(this._lpRequest)
558556
)
559557
}
560558

test/mocks/internal.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,19 @@ import VarCache from '../../src/VarCache'
55
export const lpRequestMock: Partial<jest.Mocked<LeanplumRequest>> = {
66
getLastResponse: jest.fn().mockImplementation((data) => data.response[0]),
77
isResponseSuccess: jest.fn().mockImplementation((response) => Boolean(response?.success)),
8-
request: jest.fn()
8+
request: jest.fn(),
9+
}
10+
11+
export const lpSocketMock = {
12+
connect: jest.fn(),
913
}
1014

1115
export const pushManagerMock: Partial<jest.Mocked<PushManager>> = {
1216
isWebPushSubscribed: jest.fn(),
1317
isWebPushSupported: jest.fn(),
1418
register: jest.fn(),
1519
subscribeUser: jest.fn(),
16-
unsubscribeUser: jest.fn()
20+
unsubscribeUser: jest.fn(),
1721
}
1822

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

32-
export function mockNextResponse(data: any) {
36+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
37+
export function mockNextResponse(data: any): void {
3338
lpRequestMock.request.mockImplementationOnce(
3439
(method, args, options) => {
3540
options.response(data)

test/specs/LeanplumInternal.test.ts

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@ import Constants from '../../src/Constants'
2020
import LeanplumInternal from '../../src/LeanplumInternal'
2121
import { APP_ID, KEY_DEV } from '../data/constants'
2222
import { windowMock } from '../mocks/external'
23-
import { lpRequestMock, mockNextResponse, pushManagerMock, varCacheMock } from '../mocks/internal'
23+
import { lpRequestMock, lpSocketMock, mockNextResponse, pushManagerMock, varCacheMock } from '../mocks/internal'
2424

2525
jest.mock('../../src/LeanplumRequest', () => jest.fn().mockImplementation(() => lpRequestMock))
26+
jest.mock('../../src/LeanplumSocket', () => jest.fn().mockImplementation(() => lpSocketMock))
2627
jest.mock('../../src/PushManager', () => jest.fn().mockImplementation(() => pushManagerMock))
2728
jest.mock('../../src/VarCache', () => jest.fn().mockImplementation(() => varCacheMock))
2829

@@ -77,12 +78,30 @@ describe(LeanplumInternal, () => {
7778
expect(method).toEqual('getNewsfeedMessages')
7879
})
7980

81+
it('works in DEV mode', () => {
82+
lp.setAppIdForDevelopmentMode(APP_ID, KEY_DEV)
83+
mockNextResponse({ response: [{ success: true }] })
84+
85+
lp.start()
86+
87+
expect(lpSocketMock.connect).toHaveBeenCalledTimes(1)
88+
89+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
90+
const [cahe, auth, createRequest, getLastResponse] = lpSocketMock.connect.mock.calls[0]
91+
92+
createRequest(expect.any(String), expect.any(Object), expect.any(Object))
93+
getLastResponse({ response: [] })
94+
95+
expect(lpRequestMock.request).toHaveBeenCalledTimes(2)
96+
expect(lpRequestMock.getLastResponse).toHaveBeenCalledTimes(2)
97+
})
98+
8099
describe('useSessionLength', () => {
81100
it('starts a new session if there is no stored session', () => {
82101
jest.spyOn(Date, 'now').mockImplementation(() => 0)
83102

84103
lp.useSessionLength(2)
85-
mockNextResponse({ response: [{ success: true }], })
104+
mockNextResponse({ response: [{ success: true }] })
86105
lp.start()
87106

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

96-
mockNextResponse({ response: [{ success: true }], })
115+
mockNextResponse({ response: [{ success: true }] })
97116
lp.start()
98117
currentTime = 1000
99118
lp.start()
@@ -107,16 +126,35 @@ describe(LeanplumInternal, () => {
107126

108127
lp.useSessionLength(2)
109128

110-
mockNextResponse({ response: [{ success: true }], })
129+
mockNextResponse({ response: [{ success: true }] })
111130
lp.start()
112131
currentTime = 2001
113-
mockNextResponse({ response: [{ success: true }], })
132+
mockNextResponse({ response: [{ success: true }] })
114133
lp.start()
115134

116135
expect(lpRequestMock.request).toHaveBeenCalledTimes(2)
117136
})
118137
})
138+
})
139+
140+
describe('startFromCache', () => {
141+
it('works in DEV mode', () => {
142+
lp.setAppIdForDevelopmentMode(APP_ID, KEY_DEV)
143+
mockNextResponse({ response: [{ success: true }] })
144+
145+
lp.start()
146+
147+
expect(lpSocketMock.connect).toHaveBeenCalledTimes(1)
148+
149+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
150+
const [cahe, auth, createRequest, getLastResponse] = lpSocketMock.connect.mock.calls[0]
119151

152+
createRequest(expect.any(String), expect.any(Object), expect.any(Object))
153+
getLastResponse({ response: [] })
154+
155+
expect(lpRequestMock.request).toHaveBeenCalledTimes(2)
156+
expect(lpRequestMock.getLastResponse).toHaveBeenCalledTimes(2)
157+
})
120158
})
121159

122160
describe('track', () => {
@@ -396,7 +434,7 @@ describe(LeanplumInternal, () => {
396434

397435
lp.setWebPushOptions({ serviceWorkerUrl, scope })
398436

399-
const result = await lp.registerForWebPush()
437+
await lp.registerForWebPush()
400438

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

0 commit comments

Comments
 (0)