102 lines
3.4 KiB
TypeScript
102 lines
3.4 KiB
TypeScript
import fs from "node:fs";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
import { afterEach, describe, expect, it } from "vitest";
|
|
import { defaultSettings } from "../src/main/constants";
|
|
import { ensureStartupWorkDirectories } from "../src/main/startup-work-directories";
|
|
|
|
const tempDirs: string[] = [];
|
|
|
|
function tempRoot(): string {
|
|
const root = fs.mkdtempSync(path.join(os.tmpdir(), "mdd-startup-dirs-"));
|
|
tempDirs.push(root);
|
|
return root;
|
|
}
|
|
|
|
afterEach(() => {
|
|
for (const directory of tempDirs.splice(0)) {
|
|
fs.rmSync(directory, { recursive: true, force: true });
|
|
}
|
|
});
|
|
|
|
describe("startup work directories", () => {
|
|
it("does nothing while the setting is disabled", () => {
|
|
const root = tempRoot();
|
|
const outputDir = path.join(root, "downloads");
|
|
const result = ensureStartupWorkDirectories({
|
|
...defaultSettings(),
|
|
outputDir,
|
|
createWorkDirectoriesOnStartup: false
|
|
});
|
|
|
|
expect(result).toEqual({ created: [], existing: [], failures: [] });
|
|
expect(fs.existsSync(outputDir)).toBe(false);
|
|
});
|
|
|
|
it("creates only the enabled work directories and preserves existing contents", () => {
|
|
const root = tempRoot();
|
|
const outputDir = path.join(root, "downloads");
|
|
const extractDir = path.join(root, "extracted");
|
|
const mkvLibraryDir = path.join(root, "videos");
|
|
fs.mkdirSync(outputDir, { recursive: true });
|
|
fs.writeFileSync(path.join(outputDir, "keep.bin"), "keep");
|
|
|
|
const result = ensureStartupWorkDirectories({
|
|
...defaultSettings(),
|
|
outputDir,
|
|
extractDir,
|
|
mkvLibraryDir,
|
|
autoExtract: true,
|
|
collectMkvToLibrary: true,
|
|
createWorkDirectoriesOnStartup: true
|
|
});
|
|
|
|
expect(result.created.map((entry) => entry.kind)).toEqual(["extract", "video-library"]);
|
|
expect(result.existing.map((entry) => entry.kind)).toEqual(["download"]);
|
|
expect(result.failures).toEqual([]);
|
|
expect(fs.readFileSync(path.join(outputDir, "keep.bin"), "utf8")).toBe("keep");
|
|
expect(fs.statSync(extractDir).isDirectory()).toBe(true);
|
|
expect(fs.statSync(mkvLibraryDir).isDirectory()).toBe(true);
|
|
});
|
|
|
|
it("skips inactive optional directories", () => {
|
|
const root = tempRoot();
|
|
const outputDir = path.join(root, "downloads");
|
|
const extractDir = path.join(root, "extracted");
|
|
const mkvLibraryDir = path.join(root, "videos");
|
|
|
|
const result = ensureStartupWorkDirectories({
|
|
...defaultSettings(),
|
|
outputDir,
|
|
extractDir,
|
|
mkvLibraryDir,
|
|
autoExtract: false,
|
|
collectMkvToLibrary: false,
|
|
createWorkDirectoriesOnStartup: true
|
|
});
|
|
|
|
expect(result.created.map((entry) => entry.kind)).toEqual(["download"]);
|
|
expect(fs.existsSync(extractDir)).toBe(false);
|
|
expect(fs.existsSync(mkvLibraryDir)).toBe(false);
|
|
});
|
|
|
|
it("reports one invalid target without blocking the other directories", () => {
|
|
const root = tempRoot();
|
|
const blockedOutput = path.join(root, "blocked");
|
|
const extractDir = path.join(root, "extracted");
|
|
fs.writeFileSync(blockedOutput, "file");
|
|
|
|
const result = ensureStartupWorkDirectories({
|
|
...defaultSettings(),
|
|
outputDir: blockedOutput,
|
|
extractDir,
|
|
autoExtract: true,
|
|
createWorkDirectoriesOnStartup: true
|
|
});
|
|
|
|
expect(result.failures.map((entry) => entry.kind)).toEqual(["download"]);
|
|
expect(result.created.map((entry) => entry.kind)).toEqual(["extract"]);
|
|
expect(fs.statSync(extractDir).isDirectory()).toBe(true);
|
|
});
|
|
});
|