mirror of
https://github.com/home-assistant/frontend.git
synced 2026-05-01 22:25:15 +01:00
Use localStorage with Web Storage API (#23172)
This commit is contained in:
140
test/common/auth/token_storage/saveTokens.test.ts
Normal file
140
test/common/auth/token_storage/saveTokens.test.ts
Normal file
@@ -0,0 +1,140 @@
|
||||
import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
|
||||
import type { AuthData } from "home-assistant-js-websocket";
|
||||
import { FallbackStorage } from "../../../test_helper/local-storage-fallback";
|
||||
|
||||
let saveTokens;
|
||||
|
||||
describe("token_storage.saveTokens", () => {
|
||||
beforeEach(() => {
|
||||
window.localStorage = new FallbackStorage();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
vi.resetModules();
|
||||
vi.resetAllMocks();
|
||||
});
|
||||
|
||||
test("saveTokens", async () => {
|
||||
const tokens: AuthData = {
|
||||
access_token: "test",
|
||||
expires: 1800,
|
||||
expires_in: 1800,
|
||||
hassUrl: "http://localhost",
|
||||
refresh_token: "refresh",
|
||||
clientId: "client",
|
||||
};
|
||||
|
||||
vi.stubGlobal(
|
||||
"window.__tokenCache",
|
||||
(window.__tokenCache = {
|
||||
tokens: undefined,
|
||||
writeEnabled: undefined,
|
||||
})
|
||||
);
|
||||
|
||||
({ saveTokens } = await import(
|
||||
"../../../../src/common/auth/token_storage"
|
||||
));
|
||||
saveTokens(tokens);
|
||||
expect(window.__tokenCache.tokens).toEqual(tokens);
|
||||
});
|
||||
|
||||
test("saveTokens write enabled", async () => {
|
||||
const tokens: AuthData = {
|
||||
access_token: "test",
|
||||
expires: 1800,
|
||||
expires_in: 1800,
|
||||
hassUrl: "http://localhost",
|
||||
refresh_token: "refresh",
|
||||
clientId: "client",
|
||||
};
|
||||
|
||||
vi.stubGlobal(
|
||||
"window.__tokenCache",
|
||||
(window.__tokenCache = {
|
||||
tokens: undefined,
|
||||
writeEnabled: undefined,
|
||||
})
|
||||
);
|
||||
|
||||
const extractSearchParamSpy = vi.fn().mockReturnValue("true");
|
||||
|
||||
vi.doMock("../../../../src/common/url/search-params", () => ({
|
||||
extractSearchParam: extractSearchParamSpy,
|
||||
}));
|
||||
const setItemSpy = vi.fn();
|
||||
window.localStorage.setItem = setItemSpy;
|
||||
|
||||
({ saveTokens } = await import(
|
||||
"../../../../src/common/auth/token_storage"
|
||||
));
|
||||
saveTokens(tokens);
|
||||
expect(window.__tokenCache.tokens).toEqual(tokens);
|
||||
expect(window.__tokenCache.writeEnabled).toBe(true);
|
||||
expect(extractSearchParamSpy).toHaveBeenCalledOnce();
|
||||
expect(extractSearchParamSpy).toHaveBeenCalledWith("storeToken");
|
||||
expect(setItemSpy).toHaveBeenCalledOnce();
|
||||
expect(setItemSpy).toHaveBeenCalledWith(
|
||||
"hassTokens",
|
||||
JSON.stringify(tokens)
|
||||
);
|
||||
});
|
||||
|
||||
test("saveTokens write enabled full storage", async () => {
|
||||
const tokens: AuthData = {
|
||||
access_token: "test",
|
||||
expires: 1800,
|
||||
expires_in: 1800,
|
||||
hassUrl: "http://localhost",
|
||||
refresh_token: "refresh",
|
||||
clientId: "client",
|
||||
};
|
||||
|
||||
vi.stubGlobal(
|
||||
"window.__tokenCache",
|
||||
(window.__tokenCache = {
|
||||
tokens: undefined,
|
||||
writeEnabled: true,
|
||||
})
|
||||
);
|
||||
|
||||
const extractSearchParamSpy = vi.fn();
|
||||
|
||||
vi.doMock("../../../../src/common/url/search-params", () => ({
|
||||
extractSearchParam: extractSearchParamSpy,
|
||||
}));
|
||||
|
||||
const setItemSpy = vi.fn(() => {
|
||||
throw new Error("Full storage");
|
||||
});
|
||||
|
||||
window.localStorage.setItem = setItemSpy;
|
||||
|
||||
// eslint-disable-next-line no-global-assign
|
||||
console = {
|
||||
warn: vi.fn(),
|
||||
error: vi.fn(),
|
||||
} as unknown as Console;
|
||||
|
||||
({ saveTokens } = await import(
|
||||
"../../../../src/common/auth/token_storage"
|
||||
));
|
||||
saveTokens(tokens);
|
||||
expect(window.__tokenCache.tokens).toEqual(tokens);
|
||||
expect(window.__tokenCache.writeEnabled).toBe(true);
|
||||
expect(extractSearchParamSpy).toBeCalledTimes(0);
|
||||
expect(setItemSpy).toHaveBeenCalledOnce();
|
||||
expect(setItemSpy).toHaveBeenCalledWith(
|
||||
"hassTokens",
|
||||
JSON.stringify(tokens)
|
||||
);
|
||||
// eslint-disable-next-line no-console
|
||||
expect(console.warn).toHaveBeenCalledOnce();
|
||||
// eslint-disable-next-line no-console
|
||||
expect(console.warn).toHaveBeenCalledWith(
|
||||
"Failed to store tokens; Are you in private mode or is your storage full?"
|
||||
);
|
||||
// eslint-disable-next-line no-console
|
||||
expect(console.error).toHaveBeenCalledOnce();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user