import { test } from "node:test"; import assert from "node:assert/strict"; import { resolvePersistenceDecision } from "./persistencePlan"; // Run with: // pnpm --filter yt-dlp-transcript-common exec tsx --test ytdlp/persistencePlan.test.ts test("outside the window with no overrides: audio-only via channel mode", () => { const d = resolvePersistenceDecision({ inWindow: false, pinned: false }); assert.equal(d.persist, false); assert.equal(d.extractionMode, "ytdlp"); }); test("channel app extraction is honored for audio-only downloads", () => { const d = resolvePersistenceDecision({ inWindow: false, pinned: false, channelExtractionMode: "app", }); assert.equal(d.persist, false); assert.equal(d.extractionMode, "app"); }); test("inside the keep-latest window persists via app extraction", () => { const d = resolvePersistenceDecision({ inWindow: true, pinned: false }); assert.equal(d.persist, true); assert.equal(d.extractionMode, "app"); assert.equal(d.category, "keep-latest"); }); test("a do-not-clean pin persists even outside the window", () => { const d = resolvePersistenceDecision({ inWindow: false, pinned: true }); assert.equal(d.persist, true); assert.equal(d.extractionMode, "app"); assert.equal(d.category, "pin"); }); test("category is 'none' for an audio-only outcome", () => { const d = resolvePersistenceDecision({ inWindow: false, pinned: false }); assert.equal(d.category, "none"); }); test("extractImmediately overrides the keep-latest window", () => { const d = resolvePersistenceDecision({ inWindow: true, pinned: true, overrides: { extractImmediately: true }, }); assert.equal(d.persist, false); }); test("keepSourceVideoOverride=true persists an out-of-window video", () => { const d = resolvePersistenceDecision({ inWindow: false, pinned: false, overrides: { keepSourceVideoOverride: true }, }); assert.equal(d.persist, true); assert.equal(d.extractionMode, "app"); assert.equal(d.category, "override"); }); test("keepSourceVideoOverride=false beats the window and extractImmediately", () => { const d = resolvePersistenceDecision({ inWindow: true, pinned: true, overrides: { keepSourceVideoOverride: false, extractImmediately: true }, }); assert.equal(d.persist, false); });