Skip to content

Commit 60ea015

Browse files
committed
Fix tests.
1 parent d1a59c8 commit 60ea015

File tree

12 files changed

+545
-91
lines changed

12 files changed

+545
-91
lines changed

packages/sdk/browser/__tests__/BrowserClient.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ describe('given a mock platform for a BrowserClient', () => {
141141
'client-side-id',
142142
AutoEnvAttributes.Disabled,
143143
{
144-
initialConnectionMode: 'polling',
144+
stream: false,
145145
logger,
146146
diagnosticOptOut: true,
147147
},
@@ -169,7 +169,7 @@ describe('given a mock platform for a BrowserClient', () => {
169169
'client-side-id',
170170
AutoEnvAttributes.Disabled,
171171
{
172-
initialConnectionMode: 'polling',
172+
stream: false,
173173
logger,
174174
diagnosticOptOut: true,
175175
eventUrlTransformer: (url: string) =>
@@ -202,7 +202,7 @@ describe('given a mock platform for a BrowserClient', () => {
202202
'client-side-id',
203203
AutoEnvAttributes.Disabled,
204204
{
205-
initialConnectionMode: 'polling',
205+
stream: false,
206206
logger,
207207
diagnosticOptOut: true,
208208
eventUrlTransformer: (url: string) =>
@@ -245,7 +245,7 @@ describe('given a mock platform for a BrowserClient', () => {
245245
'client-side-id',
246246
AutoEnvAttributes.Disabled,
247247
{
248-
initialConnectionMode: 'polling',
248+
stream: false,
249249
logger,
250250
diagnosticOptOut: true,
251251
eventUrlTransformer: (url: string) =>

packages/sdk/browser/src/BrowserClient.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ export class BrowserClient extends LDClientImpl {
159159
}
160160
}
161161

162-
override async identify(context: LDContext, identifyOptions: LDIdentifyOptions): Promise<void> {
162+
override async identify(context: LDContext, identifyOptions?: LDIdentifyOptions): Promise<void> {
163163
await super.identify(context, identifyOptions);
164164
this.goalManager?.startTracking();
165165
}

packages/sdk/browser/src/BrowserDataManager.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import {
2+
BaseDataManager,
23
Configuration,
34
Context,
45
DataSourcePaths,
5-
DefaultDataManager,
66
FlagManager,
77
getPollingUri,
88
internal,
@@ -15,7 +15,7 @@ import {
1515

1616
import { ValidatedOptions } from './options';
1717

18-
export default class BrowserDataManager extends DefaultDataManager {
18+
export default class BrowserDataManager extends BaseDataManager {
1919
constructor(
2020
platform: Platform,
2121
flagManager: FlagManager,
@@ -48,7 +48,9 @@ export default class BrowserDataManager extends DefaultDataManager {
4848
_identifyOptions?: LDIdentifyOptions,
4949
): Promise<void> {
5050
this.context = context;
51-
await this.flagManager.loadCached(context);
51+
if (await this.flagManager.loadCached(context)) {
52+
this.logger.debug('Identify - Flags loaded from cache. Continuing to initialize via a poll.');
53+
}
5254
const plainContextString = JSON.stringify(Context.toLDContext(context));
5355
const requestor = this.getRequestor(plainContextString);
5456

packages/sdk/react-native/src/MobileDataManager.ts

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,50 @@
11
import {
2+
BaseDataManager,
3+
Configuration,
24
ConnectionMode,
35
Context,
4-
DefaultDataManager,
6+
DataSourcePaths,
7+
FlagManager,
8+
internal,
9+
LDEmitter,
10+
LDHeaders,
511
LDIdentifyOptions,
12+
Platform,
613
} from '@launchdarkly/js-client-sdk-common';
714

8-
export default class MobileDataManager extends DefaultDataManager {
15+
import { ValidatedOptions } from './options';
16+
17+
export default class MobileDataManager extends BaseDataManager {
918
// Not implemented yet.
1019
protected networkAvailable: boolean = true;
1120
protected connectionMode: ConnectionMode = 'streaming';
1221

22+
constructor(
23+
platform: Platform,
24+
flagManager: FlagManager,
25+
credential: string,
26+
config: Configuration,
27+
private readonly rnConfig: ValidatedOptions,
28+
getPollingPaths: () => DataSourcePaths,
29+
getStreamingPaths: () => DataSourcePaths,
30+
baseHeaders: LDHeaders,
31+
emitter: LDEmitter,
32+
diagnosticsManager?: internal.DiagnosticsManager,
33+
) {
34+
super(
35+
platform,
36+
flagManager,
37+
credential,
38+
config,
39+
getPollingPaths,
40+
getStreamingPaths,
41+
baseHeaders,
42+
emitter,
43+
diagnosticsManager,
44+
);
45+
this.connectionMode = rnConfig.initialConnectionMode;
46+
}
47+
1348
override async identify(
1449
identifyResolve: () => void,
1550
identifyReject: (err: Error) => void,

packages/sdk/react-native/src/ReactNativeLDClient.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ export default class ReactNativeLDClient extends LDClientImpl {
8181
flagManager,
8282
sdkKey,
8383
configuration,
84+
validatedRnOptions,
8485
() => ({
8586
pathGet(encoding: Encoding, _plainContextString: string): string {
8687
return `/msdk/evalx/contexts/${base64UrlEncode(_plainContextString, encoding)}`;
@@ -104,6 +105,8 @@ export default class ReactNativeLDClient extends LDClientImpl {
104105
internalOptions,
105106
);
106107

108+
this.setEventSendingEnabled(!this.isOffline(), false);
109+
107110
const dataManager = this.dataManager as MobileDataManager;
108111
const destination: ConnectionDestination = {
109112
setNetworkAvailability: (available: boolean) => {

packages/shared/sdk-client/__tests__/LDClientImpl.events.test.ts

Lines changed: 45 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import {
22
AutoEnvAttributes,
3+
base64UrlEncode,
34
ClientContext,
45
clone,
56
Encoding,
67
internal,
78
LDContext,
9+
LDHeaders,
810
subsystem,
911
} from '@launchdarkly/js-sdk-common';
1012
import {
@@ -13,10 +15,14 @@ import {
1315
MockEventProcessor,
1416
} from '@launchdarkly/private-js-mocks';
1517

18+
import { Configuration } from '../src/configuration/Configuration';
19+
import { FlagManager } from '../src/flag-manager/FlagManager';
1620
import LDClientImpl from '../src/LDClientImpl';
21+
import LDEmitter from '../src/LDEmitter';
1722
import { Flags } from '../src/types';
1823
import * as mockResponseJson from './evaluation/mockResponse.json';
1924
import { MockEventSource } from './streaming/LDClientImpl.mocks';
25+
import TestDataManager from './TestDataManager';
2026

2127
type InputCustomEvent = internal.InputCustomEvent;
2228
type InputIdentifyEvent = internal.InputIdentifyEvent;
@@ -80,18 +86,46 @@ describe('sdk-client object', () => {
8086

8187
mockPlatform.crypto.randomUUID.mockReturnValue('random1');
8288

83-
ldc = new LDClientImpl(testSdkKey, AutoEnvAttributes.Enabled, mockPlatform, {
84-
logger,
85-
});
86-
87-
jest.spyOn(LDClientImpl.prototype as any, 'getStreamingPaths').mockReturnValue({
88-
pathGet(_encoding: Encoding, _plainContextString: string): string {
89-
return '/stream/path';
90-
},
91-
pathReport(_encoding: Encoding, _plainContextString: string): string {
92-
return '/stream/path';
89+
ldc = new LDClientImpl(
90+
testSdkKey,
91+
AutoEnvAttributes.Enabled,
92+
mockPlatform,
93+
{
94+
logger,
9395
},
94-
});
96+
(
97+
flagManager: FlagManager,
98+
configuration: Configuration,
99+
baseHeaders: LDHeaders,
100+
emitter: LDEmitter,
101+
diagnosticsManager?: internal.DiagnosticsManager,
102+
) =>
103+
new TestDataManager(
104+
mockPlatform,
105+
flagManager,
106+
testSdkKey,
107+
configuration,
108+
() => ({
109+
pathGet(encoding: Encoding, _plainContextString: string): string {
110+
return `/msdk/evalx/contexts/${base64UrlEncode(_plainContextString, encoding)}`;
111+
},
112+
pathReport(_encoding: Encoding, _plainContextString: string): string {
113+
return `/msdk/evalx/context`;
114+
},
115+
}),
116+
() => ({
117+
pathGet(_encoding: Encoding, _plainContextString: string): string {
118+
return '/stream/path';
119+
},
120+
pathReport(_encoding: Encoding, _plainContextString: string): string {
121+
return '/stream/path';
122+
},
123+
}),
124+
baseHeaders,
125+
emitter,
126+
diagnosticsManager,
127+
),
128+
);
95129
});
96130

97131
afterEach(() => {

packages/shared/sdk-client/__tests__/LDClientImpl.storage.test.ts

Lines changed: 93 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,23 @@
1-
import { AutoEnvAttributes, clone, Encoding, type LDContext } from '@launchdarkly/js-sdk-common';
1+
import {
2+
AutoEnvAttributes,
3+
base64UrlEncode,
4+
clone,
5+
Encoding,
6+
internal,
7+
type LDContext,
8+
LDHeaders,
9+
} from '@launchdarkly/js-sdk-common';
210
import { createBasicPlatform, createLogger } from '@launchdarkly/private-js-mocks';
311

12+
import { Configuration } from '../src/configuration/Configuration';
413
import { toMulti } from '../src/context/addAutoEnv';
14+
import { FlagManager } from '../src/flag-manager/FlagManager';
515
import LDClientImpl from '../src/LDClientImpl';
616
import LDEmitter from '../src/LDEmitter';
717
import { Flags, PatchFlag } from '../src/types';
818
import * as mockResponseJson from './evaluation/mockResponse.json';
919
import { MockEventSource } from './streaming/LDClientImpl.mocks';
20+
import TestDataManager from './TestDataManager';
1021

1122
let mockPlatform: ReturnType<typeof createBasicPlatform>;
1223
let logger: ReturnType<typeof createLogger>;
@@ -51,19 +62,47 @@ describe('sdk-client storage', () => {
5162
}
5263
});
5364

54-
jest.spyOn(LDClientImpl.prototype as any, 'getStreamingPaths').mockReturnValue({
55-
pathGet(_encoding: Encoding, _plainContextString: string): string {
56-
return '/stream/path';
65+
ldc = new LDClientImpl(
66+
testSdkKey,
67+
AutoEnvAttributes.Disabled,
68+
mockPlatform,
69+
{
70+
logger,
71+
sendEvents: false,
5772
},
58-
pathReport(_encoding: Encoding, _plainContextString: string): string {
59-
return '/stream/path';
60-
},
61-
});
62-
63-
ldc = new LDClientImpl(testSdkKey, AutoEnvAttributes.Disabled, mockPlatform, {
64-
logger,
65-
sendEvents: false,
66-
});
73+
(
74+
flagManager: FlagManager,
75+
configuration: Configuration,
76+
baseHeaders: LDHeaders,
77+
inEmitter: LDEmitter,
78+
diagnosticsManager?: internal.DiagnosticsManager,
79+
) =>
80+
new TestDataManager(
81+
mockPlatform,
82+
flagManager,
83+
testSdkKey,
84+
configuration,
85+
() => ({
86+
pathGet(encoding: Encoding, _plainContextString: string): string {
87+
return `/msdk/evalx/contexts/${base64UrlEncode(_plainContextString, encoding)}`;
88+
},
89+
pathReport(_encoding: Encoding, _plainContextString: string): string {
90+
return `/msdk/evalx/context`;
91+
},
92+
}),
93+
() => ({
94+
pathGet(_encoding: Encoding, _plainContextString: string): string {
95+
return '/stream/path/get';
96+
},
97+
pathReport(_encoding: Encoding, _plainContextString: string): string {
98+
return '/stream/path/report';
99+
},
100+
}),
101+
baseHeaders,
102+
inEmitter,
103+
diagnosticsManager,
104+
),
105+
);
67106

68107
// @ts-ignore
69108
emitter = ldc.emitter;
@@ -120,10 +159,47 @@ describe('sdk-client storage', () => {
120159
},
121160
);
122161

123-
ldc = new LDClientImpl(testSdkKey, AutoEnvAttributes.Enabled, mockPlatform, {
124-
logger,
125-
sendEvents: false,
126-
});
162+
ldc = new LDClientImpl(
163+
testSdkKey,
164+
AutoEnvAttributes.Enabled,
165+
mockPlatform,
166+
{
167+
logger,
168+
sendEvents: false,
169+
},
170+
(
171+
flagManager: FlagManager,
172+
configuration: Configuration,
173+
baseHeaders: LDHeaders,
174+
inEmitter: LDEmitter,
175+
diagnosticsManager?: internal.DiagnosticsManager,
176+
) =>
177+
new TestDataManager(
178+
mockPlatform,
179+
flagManager,
180+
testSdkKey,
181+
configuration,
182+
() => ({
183+
pathGet(encoding: Encoding, _plainContextString: string): string {
184+
return `/msdk/evalx/contexts/${base64UrlEncode(_plainContextString, encoding)}`;
185+
},
186+
pathReport(_encoding: Encoding, _plainContextString: string): string {
187+
return `/msdk/evalx/context`;
188+
},
189+
}),
190+
() => ({
191+
pathGet(_encoding: Encoding, _plainContextString: string): string {
192+
return '/stream/path/get';
193+
},
194+
pathReport(_encoding: Encoding, _plainContextString: string): string {
195+
return '/stream/path/report';
196+
},
197+
}),
198+
baseHeaders,
199+
inEmitter,
200+
diagnosticsManager,
201+
),
202+
);
127203
// @ts-ignore
128204
emitter = ldc.emitter;
129205
jest.spyOn(emitter as LDEmitter, 'emit');

0 commit comments

Comments
 (0)