relay-settings.test.ts

1.6 KB · raw

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});