fix(sdlc-rename): сбой переноса ключа хранилища не теряет значение

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Andrey Epifancev 2026-10-24 11:58:25 +04:00
parent ef9ec9f46d
commit 3ade954713
3 changed files with 17 additions and 3 deletions

View File

@ -28,4 +28,16 @@ describe("readMigrated", () => {
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");
});
});

View File

@ -11,8 +11,10 @@ export function readMigrated(key: string): string | null {
const oldKey = OLD + key.slice(NEW.length);
const v = localStorage.getItem(oldKey);
if (v === null) return null;
localStorage.setItem(key, v);
localStorage.removeItem(oldKey);
try {
localStorage.setItem(key, v);
localStorage.removeItem(oldKey);
} catch { /* перенос не удался: значение всё равно отдаём, старый ключ останется */ }
return v;
} catch { return null; }
}

View File

@ -1,4 +1,4 @@
// клиентский токен хаба: localStorage["sdlc-hub-token"] (со старого "sdlc-hub-token" переносится при чтении) и копия в памяти на случай
// клиентский токен хаба: localStorage["sdlc-hub-token"] (со старого "jira-hub-token" переносится при чтении) и копия в памяти на случай
// закрытого хранилища. reason — почему показан экран входа: "bad" — токен не подошёл (ответ 401)
import { readMigrated } from "../api/legacyStorage";