Spaces:
Sleeping
Sleeping
File size: 3,621 Bytes
4ae79ba | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | import {
CANVAS_LAYOUT_KEY,
CANVAS_STATES_KEY,
ACTIVE_ADVISORS_KEY,
SEARCH_PATH_KEY,
readScopedJson,
writeScopedJson,
readScopedItem,
writeScopedItem,
isolateIncomingSession,
prepareSignOut,
clearUnscopedMaterial,
clearScopedMaterialForUser,
} from './canvasStorage';
function seedUnscoped() {
localStorage.setItem(CANVAS_LAYOUT_KEY, JSON.stringify({ leaked: true }));
localStorage.setItem(CANVAS_STATES_KEY, JSON.stringify({ notes: 'account A leftover' }));
localStorage.setItem(ACTIVE_ADVISORS_KEY, JSON.stringify(['veggie_chef']));
localStorage.setItem(SEARCH_PATH_KEY, 'Supplements');
}
beforeEach(() => {
localStorage.clear();
sessionStorage.clear();
});
test('readScopedJson does not migrate unscoped leftovers into a new identity', () => {
seedUnscoped();
expect(readScopedJson(CANVAS_STATES_KEY, 'user-b', {})).toEqual({});
expect(localStorage.getItem(CANVAS_STATES_KEY)).toBeTruthy();
});
test('writeScopedJson with no userId does not write unscoped material', () => {
writeScopedJson(CANVAS_STATES_KEY, null, { notes: 'should not persist' });
expect(localStorage.getItem(CANVAS_STATES_KEY)).toBeNull();
});
test('account A canvas survives sign-out and is hidden from guest', () => {
writeScopedJson(CANVAS_STATES_KEY, 'user-a', { notes: 'Heidi widgets' });
writeScopedItem(ACTIVE_ADVISORS_KEY, 'user-a', JSON.stringify(['veggie_chef']));
seedUnscoped();
prepareSignOut({ id: 'user-a', is_guest: false });
expect(readScopedJson(CANVAS_STATES_KEY, 'user-a', {})).toEqual({ notes: 'Heidi widgets' });
expect(localStorage.getItem(CANVAS_STATES_KEY)).toBeNull();
expect(localStorage.getItem(ACTIVE_ADVISORS_KEY)).toBeNull();
expect(readScopedJson(CANVAS_STATES_KEY, 'guest-1', {})).toEqual({});
expect(readScopedItem(ACTIVE_ADVISORS_KEY, 'guest-1')).toBeNull();
});
test('guest sign-out drops that guest scoped material', () => {
writeScopedJson(CANVAS_STATES_KEY, 'guest-1', { notes: 'guest doodle' });
prepareSignOut({ id: 'guest-1', is_guest: true });
expect(readScopedJson(CANVAS_STATES_KEY, 'guest-1', {})).toEqual({});
});
test('incoming signup/guest session clears unscoped leftovers', () => {
seedUnscoped();
sessionStorage.setItem('__tourStarted__', '1');
isolateIncomingSession();
expect(localStorage.getItem(CANVAS_STATES_KEY)).toBeNull();
expect(localStorage.getItem(ACTIVE_ADVISORS_KEY)).toBeNull();
expect(sessionStorage.getItem('__tourStarted__')).toBeNull();
});
test('new account does not inherit previous account scoped canvas', () => {
writeScopedJson(CANVAS_LAYOUT_KEY, 'user-a', { widgets: ['produce'] });
isolateIncomingSession();
expect(readScopedJson(CANVAS_LAYOUT_KEY, 'user-new', null)).toBeNull();
expect(readScopedJson(CANVAS_LAYOUT_KEY, 'user-a', null)).toEqual({ widgets: ['produce'] });
});
test('clearUnscopedMaterial leaves auth and theme', () => {
localStorage.setItem('theme', 'dark');
localStorage.setItem('authToken', 'tok');
localStorage.setItem('user', '{"id":"user-a"}');
seedUnscoped();
clearUnscopedMaterial();
expect(localStorage.getItem('theme')).toBe('dark');
expect(localStorage.getItem('authToken')).toBe('tok');
expect(localStorage.getItem(CANVAS_STATES_KEY)).toBeNull();
});
test('clearScopedMaterialForUser only removes that user', () => {
writeScopedJson(CANVAS_STATES_KEY, 'user-a', { a: 1 });
writeScopedJson(CANVAS_STATES_KEY, 'user-b', { b: 1 });
clearScopedMaterialForUser('user-a');
expect(readScopedJson(CANVAS_STATES_KEY, 'user-a', {})).toEqual({});
expect(readScopedJson(CANVAS_STATES_KEY, 'user-b', {})).toEqual({ b: 1 });
});
|