// @vitest-environment jsdom // // E22 S5: the detail the consented levels add — filter changes and what a player went through. // Below Részletes they cost nothing and log nothing, except a media error, which is always a warning. import { afterEach, describe, expect, it } from "vitest"; import { logFilterChange } from "./filterLog"; import { clear, events, setLevel } from "./log"; import { logMediaElement, logYouTubeError, logYouTubeState } from "./mediaLog"; afterEach(() => { clear(); setLevel("INFO"); }); const attrsOf = (code: string) => events() .filter((e) => e.event === code) .map((e) => e.attrs); describe("filter changes", () => { it("are not logged at the base level", () => { logFilterChange("feed", { tags: [3] }, "lofi"); expect(events()).toEqual([]); }); it("log their values at DEBUG, but only whether there is a search", () => { setLevel("DEBUG"); logFilterChange("feed", { tags: [3], sort: "newest", q: "lofi beats" }, "lofi beats"); expect(attrsOf("filter.change")).toEqual([ { scope: "feed", tags: [3], sort: "newest", query_set: true }, ]); expect(JSON.stringify(events())).not.toContain("lofi"); }); it("log the typed search at TRACE, and never the display titles riding in a filter", () => { setLevel("TRACE"); logFilterChange("plex", { filters: { collections: ["9"] }, collectionTitles: { 9: "Mine" } }); logFilterChange("plex", {}, "alien"); expect(attrsOf("filter.change")).toEqual([ { scope: "plex", filters: { collections: ["9"] } }, { scope: "plex", query: "alien" }, ]); }); }); describe("player events", () => { it("a media error is a warning at every level; the rest waits for DEBUG", () => { const video = document.createElement("video"); const detach = logMediaElement(video, "plex"); video.dispatchEvent(new Event("waiting")); video.dispatchEvent(new Event("error")); logYouTubeState(3, 12.4); logYouTubeError(150); expect(events().map((e) => [e.event, e.level])).toEqual([ ["player.media_error", "WARNING"], ["player.media_error", "WARNING"], ]); clear(); setLevel("DEBUG"); video.dispatchEvent(new Event("waiting")); logYouTubeState(3, 12.4); detach(); video.dispatchEvent(new Event("stalled")); expect(attrsOf("player.media")).toEqual([ { player: "plex", event: "waiting", at: 0 }, { player: "youtube", event: "buffering", at: 12 }, ]); }); });