Skip to content

Commit 1cbdb4b

Browse files
authored
Merge pull request #3 from gutro/fix-incorrect-user
Only update user once we have the flags for that user.
2 parents 00bc7ba + 6db57d7 commit 1cbdb4b

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

src/__tests__/LDClient-test.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,23 @@ describe('LDClient', () => {
452452
});
453453

454454
describe('identify', () => {
455+
it('does not set user until the flag config has been updated', async () => {
456+
function sleep(ms) {
457+
return new Promise(resolve => setTimeout(resolve, ms));
458+
}
459+
460+
const user2 = { key: 'user2' };
461+
const client = platform.testing.makeClient(envName, user);
462+
await client.waitForInitialization();
463+
server.autoRespond = false;
464+
const identifyPromise = client.identify(user2);
465+
await sleep(200); // sleep to jump some async ticks.
466+
expect(client.getUser()).toEqual(user);
467+
server.respond();
468+
await identifyPromise;
469+
expect(client.getUser()).toEqual(user2);
470+
});
471+
455472
it('updates flag values when the user changes', async () => {
456473
const flags0 = { 'enable-foo': { value: false } };
457474
const flags1 = { 'enable-foo': { value: true } };

src/index.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,10 +191,12 @@ export function initialize(env, user, specifiedOptions, platform, extraOptionDef
191191
return utils.wrapPromiseCallback(
192192
clearFirst
193193
.then(() => userValidator.validateUser(user))
194-
.then(realUser => ident.setUser(realUser))
195-
.then(() => requestor.fetchFlagSettings(ident.getUser(), hash))
196-
.then(requestedFlags => {
194+
.then(realUser =>
195+
requestor.fetchFlagSettings(realUser, hash).then(requestedFlags => ({ requestedFlags, realUser }))
196+
)
197+
.then(({ requestedFlags, realUser }) => {
197198
const flagValueMap = utils.transformVersionedValuesToValues(requestedFlags);
199+
ident.setUser(realUser);
198200
if (requestedFlags) {
199201
return replaceAllFlags(requestedFlags).then(() => flagValueMap);
200202
} else {

0 commit comments

Comments
 (0)