diff --git a/frontend/__tests__/clear-session.test.ts b/frontend/__tests__/clear-session.test.ts new file mode 100644 index 000000000000..4a172608497f --- /dev/null +++ b/frontend/__tests__/clear-session.test.ts @@ -0,0 +1,40 @@ +import { describe, it, expect, beforeEach, vi } from "vitest"; +import { clearSession } from "../src/utils/clear-session"; +import store from "../src/store"; +import { initialState as browserInitialState } from "../src/state/browserSlice"; + +describe("clearSession", () => { + beforeEach(() => { + // Mock localStorage + const localStorageMock = { + getItem: vi.fn(), + setItem: vi.fn(), + removeItem: vi.fn(), + clear: vi.fn(), + }; + vi.stubGlobal("localStorage", localStorageMock); + + // Set initial browser state to non-default values + store.dispatch({ + type: "browser/setUrl", + payload: "https://example.com", + }); + store.dispatch({ + type: "browser/setScreenshotSrc", + payload: "base64screenshot", + }); + }); + + it("should clear localStorage and reset browser state", () => { + clearSession(); + + // Verify localStorage items were removed + expect(localStorage.removeItem).toHaveBeenCalledWith("token"); + expect(localStorage.removeItem).toHaveBeenCalledWith("repo"); + + // Verify browser state was reset + const state = store.getState(); + expect(state.browser.url).toBe(browserInitialState.url); + expect(state.browser.screenshotSrc).toBe(browserInitialState.screenshotSrc); + }); +}); diff --git a/frontend/src/utils/clear-session.ts b/frontend/src/utils/clear-session.ts index 27013c31b550..e0a7beed5c54 100644 --- a/frontend/src/utils/clear-session.ts +++ b/frontend/src/utils/clear-session.ts @@ -1,7 +1,21 @@ +import store from "#/store"; +import { initialState as browserInitialState } from "#/state/browserSlice"; + /** - * Clear the session data from the local storage. This will remove the token and repo + * Clear the session data from the local storage and reset relevant Redux state */ export const clearSession = () => { + // Clear local storage localStorage.removeItem("token"); localStorage.removeItem("repo"); + + // Reset browser state to initial values + store.dispatch({ + type: "browser/setUrl", + payload: browserInitialState.url, + }); + store.dispatch({ + type: "browser/setScreenshotSrc", + payload: browserInitialState.screenshotSrc, + }); };