Skip to content

Commit b6fa0df

Browse files
committed
fix(flagsmith): Fetch identity flags when context changes (WIP)
1 parent a928c6c commit b6fa0df

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

libs/providers/flagsmith-client/src/lib/flagsmith-client-provider.spec.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,30 @@ describe('FlagsmithProvider', () => {
353353
);
354354
expect(config.fetch).toHaveBeenCalledTimes(3);
355355
});
356+
357+
it('should set new traits when the context is updated', async () => {
358+
const config = defaultConfig();
359+
const provider = new FlagsmithClientProvider({
360+
logger,
361+
...config,
362+
});
363+
await OpenFeature.setProviderAndWait(provider);
364+
await OpenFeature.setContext({ targetingKey: 'first', traitA: 'a' });
365+
expect(config.fetch).toHaveBeenCalledWith(
366+
`${provider.flagsmithClient.getState().api}identities/`,
367+
expect.objectContaining({
368+
body: JSON.stringify({ identifier: 'first', traits: [{ trait_key: 'traitA', trait_value: 'a' }] }),
369+
}),
370+
);
371+
await OpenFeature.setContext({ targetingKey: 'second', traitB: 'b' });
372+
expect(config.fetch).toHaveBeenCalledWith(
373+
`${provider.flagsmithClient.getState().api}identities/`,
374+
expect.objectContaining({
375+
body: JSON.stringify({ identifier: 'second', traits: [{ trait_key: 'traitB', trait_value: 'b' }] }),
376+
}),
377+
);
378+
});
379+
356380
it('should initialize with the targeting key and traits when passed to initialize', async () => {
357381
const targetingKey = 'test';
358382
const traits = { foo: 'bar', example: 123 };

libs/providers/flagsmith-client/src/lib/flagsmith-client-provider.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,14 @@ export class FlagsmithClientProvider implements Provider {
5353
...(context || {}),
5454
});
5555
this.events.emit(ProviderEvents.Stale, { message: 'context has changed' });
56-
return isLogout ? this._client.logout() : this._client.getFlags();
56+
if (isLogout) {
57+
return this._client.logout();
58+
}
59+
if (identity) {
60+
const { targetingKey, ...traits } = context;
61+
return this._client.identify(identity, traits as any);
62+
}
63+
return this._client.getFlags();
5764
}
5865

5966
const serverState = this._config.state;

0 commit comments

Comments
 (0)