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 | string[]) => { const requested = Array.isArray(keys) ? keys : [keys]; return Object.fromEntries( requested .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 () => { stored.peach_paired_devices_v3 = [ { deviceId: "phone", deviceName: "Phone", deviceType: "android", longTermPublicKeyHex: "0".repeat(64), pairedAt: 1, relayUrl: "wss://old-relay.example", }, ]; 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, }); expect(stored.peach_paired_devices_v3).toEqual([ expect.objectContaining({ deviceId: "phone", relayUrl: "wss://relay.example.test/base", }), ]); }); 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, }); }); });