diff --git a/CHANGELOG.md b/CHANGELOG.md index b3deb93..ae1d1f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ +# v0.8.16-beta — De startwizard blijft gesloten + +**De knop Sluiten verborg de optionele startwizard alleen tijdelijk.** De +server kreeg daardoor nooit door dat de gebruiker de wizard had overgeslagen en +opende hem bij iedere nieuwe paginalading opnieuw. + +- **Sluiten wordt blijvend onthouden.** De knop markeert de wizard nu via de API + als afgerond en sluit pas nadat de server dit heeft opgeslagen. +- **Een ontbrekende appmap reset de wizard niet meer.** Een nog niet gemounte of + tijdelijk onbereikbare library wordt als padprobleem behandeld en overschrijft + niet langer een expliciete keuze van de gebruiker. +- **Bewust opnieuw starten blijft mogelijk.** De knop “Opnieuw uitvoeren” in + Instellingen wist de voltooiingsstatus en opent de wizard weer vanaf het + begin. + # v0.8.15-beta — Apps verwijderen en mobiele schermen werken weer **De verwijderknop stopte containers en verwijderde volumes, maar liet de diff --git a/VERSION b/VERSION index 58aa45e..542db42 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.8.15-beta +0.8.16-beta diff --git a/server-up/core/__init__.py b/server-up/core/__init__.py index 16dfad8..9479fae 100644 --- a/server-up/core/__init__.py +++ b/server-up/core/__init__.py @@ -325,9 +325,6 @@ def load() -> dict: val = cfg.get(key, "").rstrip("/") if val in _unsafe or not val.startswith("/"): cfg[key] = DEFAULTS[key] - # Auto-reset wizard als LIBRARY_DIR niet bestaat (verse installatie met oud volume) - if cfg.get("WIZARD_DONE") and not Path(cfg["LIBRARY_DIR"]).exists(): - cfg["WIZARD_DONE"] = False # Env-overrides gelden alleen voor eenvoudige waarden; lijsten en objecten # (APP_REPOS, AUTH, NETWORKS, …) zouden anders een kale string worden. for k, default in DEFAULTS.items(): diff --git a/server-up/templates/index.html b/server-up/templates/index.html index 2fec650..b7ebc0d 100644 --- a/server-up/templates/index.html +++ b/server-up/templates/index.html @@ -2477,7 +2477,7 @@ tailwind.config = {

We synchroniseren nu de repos en zijn klaar voor gebruik.

@@ -4236,6 +4236,17 @@ function app() { this.wizard.BACKUP_DIR = d.defaults?.BACKUP_DIR || '/opt/serverup/backups'; this.wizard.open = true; }, + // De wizard is volledig optioneel. Ook voortijdig sluiten wordt op + // de server onthouden, zodat hij niet na elke paginalading terugkomt. + async dismissWizard() { + const d = await this.rpc('/api/wizard/complete', {}); + if (!d.ok) { + this.toast(d.msg || d.error || this.t('error'), 'er'); + return false; + } + this.wizard.open = false; + return true; + }, // Opnieuw uitvoeren: markeer als niet-afgerond en open hem. async resetWizard() { await this.rpc('/api/wizard/reset', {}); @@ -4296,9 +4307,7 @@ function app() { } else { const d = await this.rpc('/api/wizard/sync', {}); if (d.job_id) this.pollJob(d.job_id, async () => { - await this.rpc('/api/wizard/complete', {}); - this.wizard.open = false; - this.loadDashboard(); + if (await this.dismissWizard()) this.loadDashboard(); }); } }, diff --git a/tests/js/menu.test.js b/tests/js/menu.test.js index f411530..dba843a 100644 --- a/tests/js/menu.test.js +++ b/tests/js/menu.test.js @@ -349,6 +349,19 @@ check('balk staat halverwege', c.job.progress.pct === 50); // De poortcontrole praat met de backend, dus die checks zijn asynchroon. // Top-level await kan niet in een CommonJS-script; vandaar deze afsluiting. (async () => { + // De wizard is optioneel. Ook "Sluiten" moet daarom blijvend onthouden dat + // de gebruiker hem niet bij iedere paginalading opnieuw wil zien. + let wizardVerzoek = null; + c.wizard.open = true; + c.rpc = async (url, body) => { + wizardVerzoek = {url, body}; + return {ok: true}; + }; + await c.dismissWizard(); + check('wizard sluiten wordt op de server bewaard', + wizardVerzoek.url === '/api/wizard/complete' && + c.wizard.open === false); + // ── App verwijderen ─────────────────────────────────────────────────────── // De veilige keuze hoort de appconfiguratie weg te halen en data te bewaren. let verwijderVerzoek = null; diff --git a/tests/test_wizard.py b/tests/test_wizard.py new file mode 100644 index 0000000..d19da55 --- /dev/null +++ b/tests/test_wizard.py @@ -0,0 +1,18 @@ +"""De startwizard blijft gesloten nadat de gebruiker hem heeft afgerond.""" + +from conftest import login + + +def test_voltooide_wizard_blijft_voltooid_als_library_niet_bestaat( + client, env): + login(client) + ontbrekend = env["tmp"] / "nog-niet-gemounte-library" + env["core"].patch({ + "LIBRARY_DIR": str(ontbrekend), + "WIZARD_DONE": True, + }) + + antwoord = client.get("/api/wizard") + + assert antwoord.status_code == 200 + assert antwoord.get_json()["done"] is True