sdlc-hub/web/src/api/legacyStorage.test.ts
Andrey Epifancev 3ade954713 fix(sdlc-rename): сбой переноса ключа хранилища не теряет значение
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-24 11:58:25 +04:00

44 lines
2.0 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { readMigrated } from "./legacyStorage";
describe("readMigrated", () => {
beforeEach(() => localStorage.clear());
afterEach(() => vi.restoreAllMocks());
it("переносит старый ключ jira-hub-* в sdlc-hub-*", () => {
localStorage.setItem("jira-hub-token", "abc");
expect(readMigrated("sdlc-hub-token")).toBe("abc");
expect(localStorage.getItem("sdlc-hub-token")).toBe("abc");
expect(localStorage.getItem("jira-hub-token")).toBeNull();
});
it("при наличии обоих возвращает новое и не трогает старое", () => {
localStorage.setItem("jira-hub-token", "old");
localStorage.setItem("sdlc-hub-token", "new");
expect(readMigrated("sdlc-hub-token")).toBe("new");
expect(localStorage.getItem("jira-hub-token")).toBe("old");
});
it("без обоих ключей возвращает null и ничего не пишет", () => {
expect(readMigrated("sdlc-hub-token")).toBeNull();
expect(localStorage.length).toBe(0);
});
it("исключение хранилища даёт null", () => {
vi.spyOn(Storage.prototype, "getItem").mockImplementation(() => { throw new Error("closed"); });
expect(readMigrated("sdlc-hub-token")).toBeNull();
});
it("бросающий setItem при переносе: значение всё равно возвращается", () => {
localStorage.setItem("jira-hub-token", "abc");
vi.spyOn(Storage.prototype, "setItem").mockImplementation(() => { throw new Error("quota"); });
expect(readMigrated("sdlc-hub-token")).toBe("abc");
});
it("бросающий removeItem при переносе: значение всё равно возвращается", () => {
localStorage.setItem("jira-hub-token", "abc");
vi.spyOn(Storage.prototype, "removeItem").mockImplementation(() => { throw new Error("closed"); });
expect(readMigrated("sdlc-hub-token")).toBe("abc");
});
});