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
35 changes: 17 additions & 18 deletions packages/experiment-tag/src/experiment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,24 +59,23 @@ export const initializeExperiment = async (
user = {};
}

// create new user if it does not exist, or it does not have device_id or web_exp_id
if (Object.keys(user).length === 0 || !user.device_id || !user.web_exp_id) {
if (!user.device_id || !user.web_exp_id) {
// if user has device_id, migrate it to web_exp_id
if (user.device_id) {
user.web_exp_id = user.device_id;
} else if (user.web_exp_id) {
user.device_id = user.web_exp_id;
} else {
const uuid = UUID();
// both IDs are set for backwards compatibility, to be removed in future update
user = { device_id: uuid, web_exp_id: uuid };
}
globalScope.localStorage.setItem(
experimentStorageName,
JSON.stringify(user),
);
}
// if web_exp_id does not exist:
// 1. if device_id exists, migrate device_id to web_exp_id and remove device_id
// 2. if device_id does not exist, create a new web_exp_id
// 3. if both device_id and web_exp_id exist, remove device_id
if (!user.web_exp_id) {
user.web_exp_id = user.device_id || UUID();
delete user.device_id;
globalScope.localStorage.setItem(
experimentStorageName,
JSON.stringify(user),
);
} else if (user.web_exp_id && user.device_id) {
delete user.device_id;
globalScope.localStorage.setItem(
experimentStorageName,
JSON.stringify(user),
);
}

const urlParams = getUrlParams();
Expand Down
3 changes: 1 addition & 2 deletions packages/experiment-tag/test/experiment.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,11 @@ describe('initializeExperiment', () => {
test('should initialize experiment with empty user', () => {
initializeExperiment(stringify(apiKey), JSON.stringify([]));
expect(ExperimentClient.prototype.setUser).toHaveBeenCalledWith({
device_id: 'mock',
web_exp_id: 'mock',
});
expect(mockGlobal.localStorage.setItem).toHaveBeenCalledWith(
'EXP_1',
JSON.stringify({ device_id: 'mock', web_exp_id: 'mock' }),
JSON.stringify({ web_exp_id: 'mock' }),
);
});

Expand Down
Loading