From b637fb3db892794a43c696390ce0912296c99132 Mon Sep 17 00:00:00 2001 From: Sucukdeluxe Date: Tue, 3 Mar 2026 20:23:44 +0100 Subject: [PATCH] Fix test suite: await async calls, update status expectations, add timeouts - cleanup.test.ts: add async/await for removeDownloadLinkArtifacts and removeSampleArtifacts - download-manager.test.ts: await manager.start() to prevent race conditions - download-manager.test.ts: update "Entpackt" -> "Entpackt - Done" expectations - download-manager.test.ts: await async getStartConflicts() - download-manager.test.ts: add 35s timeout for extraction tests Co-Authored-By: Claude Opus 4.6 --- tests/cleanup.test.ts | 14 ++++---- tests/download-manager.test.ts | 60 +++++++++++++++++----------------- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/tests/cleanup.test.ts b/tests/cleanup.test.ts index cc53c96..8937bc2 100644 --- a/tests/cleanup.test.ts +++ b/tests/cleanup.test.ts @@ -25,15 +25,15 @@ describe("cleanup", () => { expect(fs.existsSync(path.join(dir, "movie.mkv"))).toBe(true); }); - it("removes sample artifacts and link files", () => { + it("removes sample artifacts and link files", async () => { const dir = fs.mkdtempSync(path.join(os.tmpdir(), "rd-clean-")); tempDirs.push(dir); fs.mkdirSync(path.join(dir, "Samples"), { recursive: true }); fs.writeFileSync(path.join(dir, "Samples", "demo-sample.mkv"), "x"); fs.writeFileSync(path.join(dir, "download_links.txt"), "https://example.com/a\n"); - const links = removeDownloadLinkArtifacts(dir); - const samples = removeSampleArtifacts(dir); + const links = await removeDownloadLinkArtifacts(dir); + const samples = await removeSampleArtifacts(dir); expect(links).toBeGreaterThan(0); expect(samples.files + samples.dirs).toBeGreaterThan(0); }); @@ -66,7 +66,7 @@ describe("cleanup", () => { expect(fs.existsSync(path.join(sub2, "subtitle.srt"))).toBe(true); }); - it("detects link artifacts by URL content in text files", () => { + it("detects link artifacts by URL content in text files", async () => { const dir = fs.mkdtempSync(path.join(os.tmpdir(), "rd-clean-")); tempDirs.push(dir); @@ -81,7 +81,7 @@ describe("cleanup", () => { // .dlc files should always be removed fs.writeFileSync(path.join(dir, "container.dlc"), "encrypted-data"); - const removed = removeDownloadLinkArtifacts(dir); + const removed = await removeDownloadLinkArtifacts(dir); expect(removed).toBeGreaterThanOrEqual(3); // download_links.txt + bookmark.url + container.dlc expect(fs.existsSync(path.join(dir, "download_links.txt"))).toBe(false); expect(fs.existsSync(path.join(dir, "bookmark.url"))).toBe(false); @@ -90,7 +90,7 @@ describe("cleanup", () => { expect(fs.existsSync(path.join(dir, "readme.txt"))).toBe(true); }); - it("does not recurse into sample symlink or junction targets", () => { + it("does not recurse into sample symlink or junction targets", async () => { const dir = fs.mkdtempSync(path.join(os.tmpdir(), "rd-clean-")); const external = fs.mkdtempSync(path.join(os.tmpdir(), "rd-clean-ext-")); tempDirs.push(dir, external); @@ -102,7 +102,7 @@ describe("cleanup", () => { const linkType: fs.symlink.Type = process.platform === "win32" ? "junction" : "dir"; fs.symlinkSync(external, linkedSampleDir, linkType); - const result = removeSampleArtifacts(dir); + const result = await removeSampleArtifacts(dir); expect(result.files).toBe(0); expect(fs.existsSync(outsideFile)).toBe(true); }); diff --git a/tests/download-manager.test.ts b/tests/download-manager.test.ts index cfb45f7..cb847c9 100644 --- a/tests/download-manager.test.ts +++ b/tests/download-manager.test.ts @@ -177,7 +177,7 @@ describe("download manager", () => { ); manager.addPackages([{ name: "retry", links: ["https://dummy/retry"] }]); - manager.start(); + await manager.start(); await waitFor(() => !manager.getSnapshot().session.running, 25000); const item = Object.values(manager.getSnapshot().session.items)[0]; @@ -253,7 +253,7 @@ describe("download manager", () => { ); manager.addPackages([{ name: "same-name", links: ["https://dummy/first", "https://dummy/second"] }]); - manager.start(); + await manager.start(); await waitFor(() => !manager.getSnapshot().session.running, 25000); const items = Object.values(manager.getSnapshot().session.items); @@ -465,7 +465,7 @@ describe("download manager", () => { ); manager.addPackages([{ name: "stall", links: ["https://dummy/stall"] }]); - manager.start(); + await manager.start(); await waitFor(() => !manager.getSnapshot().session.running, 25000); const item = Object.values(manager.getSnapshot().session.items)[0]; @@ -563,7 +563,7 @@ describe("download manager", () => { ); manager.addPackages([{ name: "connect-stall", links: ["https://dummy/connect-stall"] }]); - manager.start(); + await manager.start(); await waitFor(() => !manager.getSnapshot().session.running, 30000); const item = Object.values(manager.getSnapshot().session.items)[0]; @@ -666,7 +666,7 @@ describe("download manager", () => { ); manager.addPackages([{ name: "stall-connect", links: ["https://dummy/stall-connect"] }]); - manager.start(); + await manager.start(); await waitFor(() => !manager.getSnapshot().session.running, 30000); const item = Object.values(manager.getSnapshot().session.items)[0]; @@ -765,7 +765,7 @@ describe("download manager", () => { ); manager.addPackages([{ name: "watchdog-stall", links: ["https://dummy/watchdog-stall"] }]); - manager.start(); + await manager.start(); await waitFor(() => !manager.getSnapshot().session.running, 30000); const item = Object.values(manager.getSnapshot().session.items)[0]; @@ -969,7 +969,7 @@ describe("download manager", () => { ); manager.addPackages([{ name: "content-name", links: ["https://rapidgator.net/file/6f09df2984fe01378537c7cd8d7fa7ce"] }]); - manager.start(); + await manager.start(); await waitFor(() => !manager.getSnapshot().session.running, 25000); const item = Object.values(manager.getSnapshot().session.items)[0]; @@ -1099,7 +1099,7 @@ describe("download manager", () => { createStoragePaths(path.join(root, "state")) ); - manager.start(); + await manager.start(); await waitFor(() => !manager.getSnapshot().session.running, 25000); const item = manager.getSnapshot().session.items[itemId]; @@ -1232,7 +1232,7 @@ describe("download manager", () => { createStoragePaths(path.join(root, "state")) ); - manager.start(); + await manager.start(); await waitFor(() => !manager.getSnapshot().session.running, 25000); const item = manager.getSnapshot().session.items[itemId]; @@ -1376,7 +1376,7 @@ describe("download manager", () => { createStoragePaths(path.join(root, "state")) ); - manager.start(); + await manager.start(); await waitFor(() => !manager.getSnapshot().session.running, 25000); const item = manager.getSnapshot().session.items[itemId]; @@ -1491,7 +1491,7 @@ describe("download manager", () => { createStoragePaths(path.join(root, "state")) ); - manager.start(); + await manager.start(); await waitFor(() => !manager.getSnapshot().session.running, 45000); const item = manager.getSnapshot().session.items[itemId]; @@ -1572,7 +1572,7 @@ describe("download manager", () => { ); manager.addPackages([{ name: "status-retry", links: ["https://dummy/status-retry"] }]); - manager.start(); + await manager.start(); await waitFor(() => !manager.getSnapshot().session.running, 30000); const item = Object.values(manager.getSnapshot().session.items)[0]; @@ -1792,7 +1792,7 @@ describe("download manager", () => { expect(fs.existsSync(targetPath)).toBe(false); }); - it("detects start conflicts when extract output already exists", () => { + it("detects start conflicts when extract output already exists", async () => { const root = fs.mkdtempSync(path.join(os.tmpdir(), "rd-dm-")); tempDirs.push(root); @@ -1851,7 +1851,7 @@ describe("download manager", () => { createStoragePaths(path.join(root, "state")) ); - const conflicts = manager.getStartConflicts(); + const conflicts = await manager.getStartConflicts(); expect(conflicts.length).toBe(1); expect(conflicts[0]?.packageId).toBe(packageId); }); @@ -2495,7 +2495,7 @@ describe("download manager", () => { createStoragePaths(path.join(root, "state")) ); - manager.start(); + await manager.start(); await waitFor(() => !manager.getSnapshot().session.running, 5000); const snapshot = manager.getSnapshot(); @@ -2727,7 +2727,7 @@ describe("download manager", () => { ); manager.addPackages([{ name: "new", links: ["https://dummy/new"] }]); - manager.start(); + await manager.start(); await new Promise((resolve) => setTimeout(resolve, 120)); const runningSnapshot = manager.getSnapshot(); @@ -2805,7 +2805,7 @@ describe("download manager", () => { ); manager.addPackages([{ name: "fresh-retry", links: ["https://dummy/fresh"] }]); - manager.start(); + await manager.start(); await waitFor(() => !manager.getSnapshot().session.running, 30000); const item = Object.values(manager.getSnapshot().session.items)[0]; @@ -2890,7 +2890,7 @@ describe("download manager", () => { expect(extractDir).toBeTruthy(); expect(fs.existsSync(extractDir)).toBe(false); - manager.start(); + await manager.start(); await new Promise((resolve) => setTimeout(resolve, 140)); expect(fs.existsSync(extractDir)).toBe(false); @@ -2899,14 +2899,14 @@ describe("download manager", () => { const snapshot = manager.getSnapshot(); const item = Object.values(snapshot.session.items)[0]; expect(item?.status).toBe("completed"); - expect(item?.fullStatus).toBe("Entpackt"); + expect(item?.fullStatus).toBe("Entpackt - Done"); expect(fs.existsSync(extractDir)).toBe(true); expect(fs.existsSync(path.join(extractDir, "inside.txt"))).toBe(true); } finally { server.close(); await once(server, "close"); } - }); + }, 35000); it("keeps accurate summary when completed items are cleaned immediately", async () => { const root = fs.mkdtempSync(path.join(os.tmpdir(), "rd-dm-")); @@ -2967,7 +2967,7 @@ describe("download manager", () => { ); manager.addPackages([{ name: "cleanup", links: ["https://dummy/cleanup"] }]); - manager.start(); + await manager.start(); await waitFor(() => !manager.getSnapshot().session.running, 25000); const snapshot = manager.getSnapshot(); @@ -3048,7 +3048,7 @@ describe("download manager", () => { ); manager.addPackages([{ name: "cleanup-package", links: ["https://dummy/cleanup-package"] }]); - manager.start(); + await manager.start(); await waitFor(() => !manager.getSnapshot().session.running, 30000); const snapshot = manager.getSnapshot(); @@ -3061,7 +3061,7 @@ describe("download manager", () => { server.close(); await once(server, "close"); } - }); + }, 35000); it("counts queued package cancellations in run summary", async () => { const root = fs.mkdtempSync(path.join(os.tmpdir(), "rd-dm-")); @@ -3213,7 +3213,7 @@ describe("download manager", () => { const disabledItemId = initial.session.packages[disabledPkgId]?.itemIds[0] || ""; manager.togglePackage(disabledPkgId); - manager.start(); + await manager.start(); await waitFor(() => !manager.getSnapshot().session.running, 25000); const snapshot = manager.getSnapshot(); @@ -3705,7 +3705,7 @@ describe("download manager", () => { await waitFor(() => fs.existsSync(path.join(extractDir, "episode.txt")), 25000); const snapshot = manager.getSnapshot(); expect(snapshot.session.packages[packageId]?.status).toBe("completed"); - expect(snapshot.session.items[itemId]?.fullStatus).toBe("Entpackt"); + expect(snapshot.session.items[itemId]?.fullStatus).toBe("Entpackt - Done"); }); it("does not fail startup post-processing when source package dir is missing but extract output exists", async () => { @@ -3772,7 +3772,7 @@ describe("download manager", () => { await waitFor(() => manager.getSnapshot().session.items[itemId]?.fullStatus.startsWith("Entpackt"), 12000); const snapshot = manager.getSnapshot(); expect(snapshot.session.packages[packageId]?.status).toBe("completed"); - expect(snapshot.session.items[itemId]?.fullStatus).toBe("Entpackt"); + expect(snapshot.session.items[itemId]?.fullStatus).toBe("Entpackt - Done"); }); it("marks missing source package dir as extracted instead of failed", async () => { @@ -4012,7 +4012,7 @@ describe("download manager", () => { await waitFor(() => fs.existsSync(expectedPath), 12000); const snapshot = manager.getSnapshot(); expect(snapshot.session.packages[packageId]?.status).toBe("completed"); - expect(snapshot.session.items[itemId]?.fullStatus).toBe("Entpackt"); + expect(snapshot.session.items[itemId]?.fullStatus).toBe("Entpackt - Done"); expect(fs.existsSync(expectedPath)).toBe(true); expect(fs.existsSync(originalExtractedPath)).toBe(false); }); @@ -4135,7 +4135,7 @@ describe("download manager", () => { await waitFor(() => fs.existsSync(flattenedPath), 12000); expect(manager.getSnapshot().session.packages[packageId]?.status).toBe("completed"); - expect(manager.getSnapshot().session.items[itemId]?.fullStatus).toBe("Entpackt"); + expect(manager.getSnapshot().session.items[itemId]?.fullStatus).toBe("Entpackt - Done"); expect(fs.existsSync(flattenedPath)).toBe(true); expect(fs.existsSync(originalExtractedPath)).toBe(false); }); @@ -4306,7 +4306,7 @@ describe("download manager", () => { expect(internal.globalSpeedLimitNextAt).toBeGreaterThan(start); }); - it("resets speed window head when start finds no runnable items", () => { + it("resets speed window head when start finds no runnable items", async () => { const root = fs.mkdtempSync(path.join(os.tmpdir(), "rd-dm-")); tempDirs.push(root); @@ -4330,7 +4330,7 @@ describe("download manager", () => { internal.speedEventsHead = 5; internal.speedBytesLastWindow = 999; - manager.start(); + await manager.start(); expect(internal.speedEventsHead).toBe(0); expect(internal.speedEvents.length).toBe(0); expect(internal.speedBytesLastWindow).toBe(0);