Files
lvmh/web/src/settings.test.ts
T

61 lines
1.6 KiB
TypeScript

import { beforeEach, describe, expect, it } from "vitest";
import {
buildWsUrl,
clearSettings,
getSettings,
saveSettings,
} from "./settings";
describe("settings", () => {
beforeEach(() => {
localStorage.clear();
});
it("getSettings returns null when absent", () => {
expect(getSettings()).toBeNull();
});
it("saveSettings then getSettings round-trips", () => {
saveSettings({ serverUrl: "http://x:8686", token: "t1" });
expect(getSettings()).toEqual({ serverUrl: "http://x:8686", token: "t1" });
});
it("clearSettings removes stored settings", () => {
saveSettings({ serverUrl: "http://x", token: "t" });
clearSettings();
expect(getSettings()).toBeNull();
});
it("rejects corrupt JSON", () => {
localStorage.setItem("lvmh.settings", "{not json");
expect(getSettings()).toBeNull();
});
it("rejects wrong shapes", () => {
localStorage.setItem(
"lvmh.settings",
JSON.stringify({ serverUrl: 1, token: "x" }),
);
expect(getSettings()).toBeNull();
localStorage.setItem("lvmh.settings", JSON.stringify("nope"));
expect(getSettings()).toBeNull();
localStorage.setItem(
"lvmh.settings",
JSON.stringify({ serverUrl: "http://x" }),
);
expect(getSettings()).toBeNull();
});
it("buildWsUrl converts scheme and appends encoded token", () => {
expect(buildWsUrl({ serverUrl: "http://a:1", token: "tok" })).toBe(
"ws://a:1/ws?token=tok",
);
expect(buildWsUrl({ serverUrl: "https://a:1/", token: "tok" })).toBe(
"wss://a:1/ws?token=tok",
);
expect(buildWsUrl({ serverUrl: "http://a:1//", token: "a b/c" })).toBe(
"ws://a:1/ws?token=a%20b%2Fc",
);
});
});