1import { beforeEach, describe, expect, it, vi } from "vitest";23import {4 getRelaySettings,5 setLanOnly,6 setRelayUrl,7} from "./relay-settings";8import { DEFAULT_RELAY_URL } from "../shared/rendezvous";910let stored: Record<string, unknown>;1112beforeEach(() => {13 stored = {};14 (globalThis as { chrome?: unknown }).chrome = {15 storage: {16 local: {17 get: vi.fn(async (keys: string[]) =>18 Object.fromEntries(keys.filter((key) => key in stored).map((key) => [key, stored[key]])),19 ),20 set: vi.fn(async (values: Record<string, unknown>) => {21 Object.assign(stored, values);22 }),23 },24 },25 };26});2728describe("relay settings", () => {29 it("defaults to June's relay with internet fallback enabled", async () => {30 await expect(getRelaySettings()).resolves.toEqual({31 relayUrl: DEFAULT_RELAY_URL,32 lanOnly: false,33 });34 });3536 it("persists a normalized self-hosted wss URL and LAN-only opt-out", async () => {37 await expect(setRelayUrl("wss://relay.example.test/base/")).resolves.toBe(38 "wss://relay.example.test/base",39 );40 await setLanOnly(true);41 await expect(getRelaySettings()).resolves.toEqual({42 relayUrl: "wss://relay.example.test/base",43 lanOnly: true,44 });45 });4647 it("rejects ws and ignores an invalid stored URL", async () => {48 await expect(setRelayUrl("ws://relay.example.test")).rejects.toThrow(/wss/);49 stored.peach_relay_url_v1 = "https://not-a-websocket.example";50 await expect(getRelaySettings()).resolves.toMatchObject({51 relayUrl: DEFAULT_RELAY_URL,52 });53 });54});