Skip to content

Commit

Permalink
Fix issue All-Hands-AI#4941: [Bug]: Browser tab does not reset after …
Browse files Browse the repository at this point in the history
…starting a new session (All-Hands-AI#4945)

Co-authored-by: amanape <[email protected]>
  • Loading branch information
openhands-agent and amanape authored Nov 12, 2024
1 parent 50e7da9 commit c555611
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 1 deletion.
40 changes: 40 additions & 0 deletions frontend/__tests__/clear-session.test.ts
Original file line number Diff line number Diff line change
@@ -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);
});
});
16 changes: 15 additions & 1 deletion frontend/src/utils/clear-session.ts
Original file line number Diff line number Diff line change
@@ -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,
});
};

0 comments on commit c555611

Please sign in to comment.