A music player that connects to your cloud/distributed storage. diffuse.sh
Something went wrong. Try again.
4.3 kB · 121 lines
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122import { describe, it } from "@std/testing/bdd";import { expect } from "@std/expect";
import type { Track } from "~/definitions/types.d.ts";import * as Worker from "~/components/input/https/worker.js";
describe("components/input/https (integration)", () => { it("resolve returns the URL as-is with a far-future expiry", async () => { const resolved = await Worker.resolve({ uri: "https://example.com/audio.mp3", }); expect(resolved).not.toBe(undefined); if (resolved && "url" in resolved) { expect(resolved.url).toBe("https://example.com/audio.mp3"); expect(resolved.expiresAt).toBeGreaterThan(Date.now() / 1000); } });
it("resolve passes through blob: URLs unchanged", async () => { const resolved = await Worker.resolve({ uri: "blob:https://example.com/123-456", }); expect(resolved).not.toBe(undefined); if (resolved && "url" in resolved) { expect(resolved.url).toBe("blob:https://example.com/123-456"); } });
it("resolve returns undefined for a non-HTTPS URI", async () => { const resolved = await Worker.resolve({ uri: "http://example.com/audio.mp3" }); expect(resolved).toBe(undefined); });
it("consult returns false for an unreachable host", async () => { // Port 1 on localhost — nothing listens, connection refused. const result = await Worker.consult("https://127.0.0.1:1/audio.mp3"); expect(result.supported).toBe(true); if (result.supported) { expect(result.consult).toBe(false); } });
it("consult returns false for a non-HTTPS URL", async () => { const result = await Worker.consult("http://example.com/audio.mp3"); expect(result.supported).toBe(false); });
it("list clears placeholder kind from cached tracks", async () => { const tracks: Track[] = [ { $type: "sh.diffuse.output.track", id: "t1", uri: "https://example.com/a.mp3", kind: "placeholder", }, ]; const refreshed = await Worker.list(tracks); expect(refreshed[0].kind).toBe(undefined); });
it("list preserves existing non-placeholder kind", async () => { const tracks: Track[] = [ { $type: "sh.diffuse.output.track", id: "t1", uri: "https://example.com/a.mp3", kind: "music", }, ]; const refreshed = await Worker.list(tracks); expect(refreshed[0].kind).toBe("music"); });
it("groupConsult groups URIs by host and reports availability", async () => { const result = await Worker.groupConsult([ "https://127.0.0.1:1/a.mp3", "https://127.0.0.1:1/b.mp3", ]); const key = "https://127.0.0.1:1"; expect(result[key]?.available).toBe(false); if (!result[key]?.available) { expect(result[key]?.reason).toBeDefined(); } expect(result[key]?.uris).toEqual([ "https://127.0.0.1:1/a.mp3", "https://127.0.0.1:1/b.mp3", ]); });
it("detach with scheme removes all HTTPS tracks", async () => { const tracks: Track[] = [ { $type: "sh.diffuse.output.track", id: "1", uri: "https://a.com/1.mp3" }, { $type: "sh.diffuse.output.track", id: "2", uri: "https://b.com/2.mp3" }, ]; const remaining = await Worker.detach({ fileUriOrScheme: "https", tracks }); expect(remaining.length).toBe(0); });
it("detach with a specific host URI removes only that host's tracks", async () => { const tracks: Track[] = [ { $type: "sh.diffuse.output.track", id: "1", uri: "https://example.com/a.mp3" }, { $type: "sh.diffuse.output.track", id: "2", uri: "https://cdn.example.com/b.mp3" }, { $type: "sh.diffuse.output.track", id: "3", uri: "https://example.com/c.mp3" }, ]; const remaining = await Worker.detach({ fileUriOrScheme: "https://example.com/a.mp3", tracks, }); // detach by URI removes the entire host group ("example.com") expect(remaining.length).toBe(1); expect(remaining[0].id).toBe("2"); });
it("detach with non-HTTPS scheme returns all tracks", async () => { const tracks: Track[] = [ { $type: "sh.diffuse.output.track", id: "1", uri: "https://example.com/a.mp3" }, ]; const remaining = await Worker.detach({ fileUriOrScheme: "icecast", tracks }); expect(remaining.length).toBe(1); });});