Updated the calendar to improve opportunity display and navigation
This commit is contained in:
@@ -96,7 +96,7 @@ for (const family of ["chrome", "firefox"]) {
|
||||
});
|
||||
}
|
||||
|
||||
test("expired SPA session recovery handles 401, 403 and network errors, then releases its in-flight request", async () => {
|
||||
test("expired SPA session recovery handles 401, 403 and network errors, then reuses its successful identity", async () => {
|
||||
let attempts = 0;
|
||||
const app = loadBackground({ fetch: async () => {
|
||||
attempts++;
|
||||
@@ -111,7 +111,8 @@ test("expired SPA session recovery handles 401, 403 and network errors, then rel
|
||||
assert.deepEqual(first.debugRequests.map(entry => entry.httpStatus), [401, 403, null, 200]);
|
||||
assert.deepEqual(app.removedTabs, [91]);
|
||||
assert.equal((await app.dispatch({ type })).ok, true);
|
||||
assert.equal(attempts, 5, "background must not persist identity after the shared request settles");
|
||||
assert.equal(attempts, 4, "successful identity must not be fetched again");
|
||||
assert.equal((await app.dispatch({ type })).debugRequests.length, 0);
|
||||
assert.equal(app.tabs.length, 1);
|
||||
});
|
||||
|
||||
@@ -273,3 +274,25 @@ for (const family of ["chrome", "firefox"]) {
|
||||
assert.equal(attempts, payloads.length);
|
||||
});
|
||||
}
|
||||
|
||||
test("identity cache survives background recreation, shares windows and isolates containers", async () => {
|
||||
const factory = new (require("node:vm").Script)(require("node:fs").readFileSync("src/services/spa/current-user.js", "utf8") + "\ncreateSpaCurrentUser").runInNewContext();
|
||||
const data = {};
|
||||
const sessionStorage = { async get(key) { return { [key]: data[key] }; }, async set(values) { Object.assign(data, values); } };
|
||||
let calls = 0;
|
||||
const deps = { sessionStorage, fetchJson: async () => { calls++; return validIdentity; } };
|
||||
const service = factory(deps);
|
||||
const sender = (windowId, cookieStoreId = "", incognito = false) => ({ tab: { windowId, cookieStoreId, incognito } });
|
||||
await Promise.all([service.requestCurrentUser(sender(1)), service.requestCurrentUser(sender(2))]);
|
||||
assert.equal(calls, 1);
|
||||
await service.requestCurrentUser(sender(3));
|
||||
assert.equal(calls, 1);
|
||||
const restored = await factory(deps).requestCurrentUser(sender(4));
|
||||
assert.equal(restored.user.id, validIdentity.user.id);
|
||||
assert.equal(restored.debugRequests.length, 0);
|
||||
assert.equal(calls, 1);
|
||||
await service.requestCurrentUser(sender(1, "container-2"));
|
||||
await service.requestCurrentUser(sender(1, "", true));
|
||||
assert.equal(calls, 3);
|
||||
assert.ok(Object.values(data).every(user => !user.token));
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user