import { beforeEach, describe, expect, it, vi } from "vitest"; import { getRelaySettings, setLanOnly, setRelayUrl, } from "./relay-settings"; import { DEFAULT_RELAY_URL } from "../shared/rendezvous"; let stored: Record; beforeEach(() => { stored = {}; (globalThis as { chrome?: unknown }).chrome = { storage: { local: { get: vi.fn(async (keys: string[]) => Object.fromEntries(keys.filter((key) => key in stored).map((key) => [key, stored[key]])), ), set: vi.fn(async (values: Record) => { Object.assign(stored, values); }), }, }, }; }); describe("relay settings", () => { it("defaults to June's relay with internet fallback enabled", async () => { await expect(getRelaySettings()).resolves.toEqual({ relayUrl: DEFAULT_RELAY_URL, lanOnly: false, }); }); it("persists a normalized self-hosted wss URL and LAN-only opt-out", async () => { await expect(setRelayUrl("wss://relay.example.test/base/")).resolves.toBe( "wss://relay.example.test/base", ); await setLanOnly(true); await expect(getRelaySettings()).resolves.toEqual({ relayUrl: "wss://relay.example.test/base", lanOnly: true, }); }); it("rejects ws and ignores an invalid stored URL", async () => { await expect(setRelayUrl("ws://relay.example.test")).rejects.toThrow(/wss/); stored.peach_relay_url_v1 = "https://not-a-websocket.example"; await expect(getRelaySettings()).resolves.toMatchObject({ relayUrl: DEFAULT_RELAY_URL, }); }); });