Create work directories when settings are saved

This commit is contained in:
Sucukdeluxe
2026-09-01 15:27:12 +02:00
parent b09c50675f
commit 0896720bc0
8 changed files with 121 additions and 19 deletions
+61
View File
@@ -735,6 +735,67 @@ describe("AppController history retention updates", () => {
});
});
describe("AppController work directory settings updates", () => {
it("creates all enabled missing work directories immediately after saving the option", () => {
const root = fs.mkdtempSync(path.join(os.tmpdir(), "mdd-controller-work-dirs-"));
tempDirs.push(root);
const outputDir = path.join(root, "downloads");
const extractDir = path.join(root, "extracted");
const mkvLibraryDir = path.join(root, "videos");
const controller = createController({
...defaultSettings(),
outputDir,
extractDir,
mkvLibraryDir,
autoExtract: true,
collectMkvToLibrary: true,
createWorkDirectoriesOnStartup: false
});
controller.updateSettings({ createWorkDirectoriesOnStartup: true });
expect(fs.statSync(outputDir).isDirectory()).toBe(true);
expect(fs.statSync(extractDir).isDirectory()).toBe(true);
expect(fs.statSync(mkvLibraryDir).isDirectory()).toBe(true);
});
it("recreates a missing directory when enabled work-directory settings are saved unchanged", () => {
const root = fs.mkdtempSync(path.join(os.tmpdir(), "mdd-controller-work-dirs-"));
tempDirs.push(root);
const outputDir = path.join(root, "downloads");
const controller = createController({
...defaultSettings(),
outputDir,
autoExtract: false,
collectMkvToLibrary: false,
createWorkDirectoriesOnStartup: true
});
controller.updateSettings({ createWorkDirectoriesOnStartup: true });
expect(fs.statSync(outputDir).isDirectory()).toBe(true);
expect((controller as any).manager.setSettings).not.toHaveBeenCalled();
});
it("does not create directories when the settings cannot be persisted", () => {
const root = fs.mkdtempSync(path.join(os.tmpdir(), "mdd-controller-work-dirs-"));
tempDirs.push(root);
const outputDir = path.join(root, "downloads");
const controller = createController({
...defaultSettings(),
outputDir,
createWorkDirectoriesOnStartup: false
});
bootStorage.settingsSaveError = new Error("settings work directories locked");
expect(() => controller.updateSettings({ createWorkDirectoriesOnStartup: true }))
.toThrow("settings work directories locked");
expect(fs.existsSync(outputDir)).toBe(false);
expect(controller.getSettings().createWorkDirectoriesOnStartup).toBe(false);
});
});
describe("AppController provider quota reset statistics", () => {
it("persists quota settings before rebasing statistics and applying runtime settings", () => {
const settings = {
+2
View File
@@ -20,6 +20,8 @@ describe("renderer localization", () => {
expect(translateUiText("Animations", "de")).toBe("Animationen");
expect(translateUiText("Geschwindigkeit & Proxy", "en")).toBe("Speed & Proxy");
expect(translateUiText("Fehlende Arbeitsordner beim Start anlegen", "en")).toBe("Create missing work folders on startup");
expect(translateUiText("Erstellt fehlende Download-, Entpack- und Videosammelordner sofort beim Speichern sowie bei jedem Programmstart. Optionale Ordner werden nur bei aktiver Funktion angelegt; vorhandene Inhalte bleiben unverändert.", "en"))
.toBe("Creates missing download, extraction, and video library folders immediately when settings are saved and on every application start. Optional folders are created only when their feature is enabled; existing contents remain unchanged.");
});
it.each([
+2 -1
View File
@@ -655,7 +655,8 @@ describe("settings views", () => {
expect(field).toEqual(expect.objectContaining({
kind: "switch",
label: "Fehlende Arbeitsordner beim Start anlegen",
value: false
value: false,
help: "Erstellt fehlende Download-, Entpack- und Videosammelordner sofort beim Speichern sowie bei jedem Programmstart. Optionale Ordner werden nur bei aktiver Funktion angelegt; vorhandene Inhalte bleiben unverändert."
}));
});