diff --git a/server/pruef-bewerbung-aufgaben.mjs b/server/pruef-bewerbung-aufgaben.mjs index 50b009ad..fd7fc487 100644 --- a/server/pruef-bewerbung-aufgaben.mjs +++ b/server/pruef-bewerbung-aufgaben.mjs @@ -620,8 +620,26 @@ melde("=== 6. Am echten Bildschirm ==="); }); ok(vorher.istLink === false, "der Knopf fuehrt nicht mehr auf eine andere Seite (kein Link mehr)"); - ok(vorher.aus === true, - "und ist aus, solange niemand gewaehlt ist — er haette nichts zu verteilen"); + /* HIER STAND `vorher.aus === true` (bis 22.09.2026 abends). + --------------------------------------------------------------- + Die Pruefung hat damit MEINEN Entwurf bestaetigt, nicht die + Sache: Der Knopf war abgeschaltet, solange niemand gewaehlt + war, und daneben stand „Waehl links jemanden aus". + + Gemessen steht die Auswahl aber gar nicht links, sondern + 206 px WEITER UNTEN, bei derselben linken Kante (130 px). Wer + der Anweisung folgte, sah eine leere Flaeche neben einem + toten Knopf. + + Filipe: „weil gerade hängt das und weiß nicht wieso." + + Das ist die unangenehmste Sorte gruener Haken: Er lief, er war + gruen, und er hat den Fehler festgeschrieben. Jetzt wird das + Gegenteil verlangt -- der Knopf ist IMMER benutzbar, und die + Auswahl steht im Formular. */ + ok(vorher.aus === false, + "und er ist benutzbar, auch ohne vorherige Auswahl — die Frage" + + " nach der Person wird im Formular selbst gefragt"); ok(vorher.aufgabenBlock === false, "ohne Person steht auch keine Aufgabenliste da"); @@ -667,8 +685,164 @@ melde("=== 6. Am echten Bildschirm ==="); /* GEGENPROBE: Die Aufgabe ist wirklich da, nicht nur im Bild. */ const ausDerListe = await finde(chef.keks, titel); ok(!!ausDerListe, "sie steht auch wirklich in der Aufgabenliste des Servers"); + + /* ================================================================= + 6b. VERTEILEN OHNE VORHERIGE AUSWAHL -- und als Bewerbung + + Filipe am 22.09.2026 abends: „dogfather, die rechte hand und + die linke hand sollen immer noch aufgaben werden teilen + können plus die option dass die modis sich für aufgaben + bewerben können. weil gerade hängt das und weiß nicht wieso." + + Der Weg, der vorher tot war: Seite aufmachen, auf „Aufgabe + anlegen" druecken -- ohne unten jemanden angeklickt zu haben. + Frueher passierte dabei NICHTS. + + Und im selben Formular muss die Bewerbung zu finden sein. + Vorher steckte sie hinter „Noch jemanden dazunehmen" und + erschien erst, wenn man dort jemanden ankreuzte -- eine + Moeglichkeit, die man nicht findet, gibt es nicht. + ================================================================= */ + await e.s.goto(`${SEITE}/workspace/entwicklung.html`, { waitUntil: "networkidle" }); + await e.s.waitForTimeout(1800); + await e.s.click("#verteilen-knopf"); + await e.s.waitForTimeout(600); + + const direkt = await e.s.evaluate(() => ({ + offen: !document.getElementById("e-neu")?.hidden, + zurWahl: document.querySelectorAll("#e-fuer-leute input[type=checkbox]").length, + artSichtbar: document.getElementById("e-art") + ? !document.getElementById("e-art").hidden : null, + /* Die alte, zugeklappte zweite Liste darf es nicht mehr geben -- + sonst stehen wieder zwei Bedienungen fuer dieselbe Frage da. */ + alteZweiteListe: !!document.getElementById("e-mehr-auf"), + })); + ok(direkt.offen === true, + "das Formular geht auch ohne vorherige Auswahl auf — genau der Weg, der haengen blieb"); + ok(direkt.zurWahl >= 2, + `und die Frage nach der Person steht darin, mit ${direkt.zurWahl} Personen zur Wahl`); + ok(direkt.alteZweiteListe === false, + "die zweite, zugeklappte Personenliste gibt es nicht mehr"); + ok(direkt.artSichtbar === false, + "bei niemandem oder einer Person wird nicht nach der Verteilart gefragt"); + + /* Zwei anhaken -> jetzt MUSS die Frage kommen, und die + Bewerbung muss eine der Antworten sein. */ + const angehakt = await e.s.evaluate(() => { + const k = [...document.querySelectorAll("#e-fuer-leute input[type=checkbox]")]; + k[0].click(); k[1].click(); + return k.length; + }); + await e.s.waitForTimeout(500); + const zuZweit = await e.s.evaluate(() => ({ + artSichtbar: !document.getElementById("e-art").hidden, + antworten: [...document.querySelectorAll('#e-art input[name="e-verteilart"]')] + .map((x) => x.value), + knopf: document.getElementById("verteilen-knopf")?.textContent.trim(), + })); + ok(angehakt >= 2 && zuZweit.artSichtbar === true, + "bei zwei Personen wird gefragt, wie es laufen soll"); + ok(zuZweit.antworten.includes("pool"), + `und der Pool-Weg steht als Antwort da (${zuZweit.antworten.join(", ")})`); + ok(/2 Personen/.test(zuZweit.knopf || ""), + `der Knopf zaehlt mit („${zuZweit.knopf}")`); + + const poolTitel = "Pool von der Entwicklungsseite"; + await e.s.check('#e-art input[value="pool"]'); + await e.s.fill("#e-titel", poolTitel); + await e.s.click("#e-neu-speichern"); + await e.s.waitForTimeout(1800); + const poolFertig = await e.s.evaluate(() => ({ + zu: document.getElementById("e-neu")?.hidden, + meldung: document.getElementById("fehler")?.textContent.trim(), + gut: document.getElementById("fehler")?.dataset.gut, + })); + ok(poolFertig.zu === true && poolFertig.gut === "ja", + `angelegt und als gute Nachricht gemeldet (${poolFertig.gut})`); + /* DIE MELDUNG DARF NICHT „steht jetzt bei ihm" SAGEN. Bei einem + Pool sitzt noch niemand daran -- das ist der ganze Punkt. */ + ok(/bewirbt|bereit/i.test(poolFertig.meldung || "") + && !/bei ihm/.test(poolFertig.meldung || ""), + `und die Meldung sagt, dass eine Bewerbung kommt („${poolFertig.meldung}")`); + + const poolAufgabe = await finde(chef.keks, poolTitel); + ok(!!poolAufgabe, "die Pool-Aufgabe steht in der Liste des Servers"); + ok(poolAufgabe?.verteilart === "pool", + `und sie ist wirklich ein Pool (${poolAufgabe?.verteilart})`); + ok((poolAufgabe?.zuteilung || []).length === 2, + `mit zwei Leuten darin (${(poolAufgabe?.zuteilung || []).length})`); } finally { await e.ctx.close(); } + /* =================================================================== + 6c. ALLE DREI, DIE VERTEILEN DUERFEN -- am Bildschirm + + Filipe: „dogfather, die rechte hand und die linke hand sollen + immer noch aufgaben werden teilen können." + + Der Server sagt das seit dem 22.09. ueber `darfAufgabenVerteilen`, + und Abschnitt 1 misst das dort auch. Hier geht es um die andere + Haelfte: ob es auf der SEITE ankommt. Genau diese Luecke war der + Fehler -- die Regel stimmte, der Knopf war trotzdem tot. + + DIE DREI STEHEN IN EINER LISTE, und die Zahl der geprueften + Rollen steht in der Bedingung: Eine leere Schleife darf nicht + „in Ordnung" heissen. + =================================================================== */ + const verteiler = [ + ["admin", "CODE-DOGI-0001", "DogFather"], + ["hand", "CODE-HAND-0001", "die rechte Hand"], + ["linke", "CODE-LINK-0001", "die linke Hand"], + ]; + let konnten = 0; + for (const [rolle, code, wer] of verteiler) { + const v = await seiteAls(rolle, code, 1180); + try { + await v.s.goto(`${SEITE}/workspace/entwicklung.html`, { waitUntil: "networkidle" }); + await v.s.waitForTimeout(1700); + const stand = await v.s.evaluate(() => ({ + band: document.getElementById("verteilen-band") + ? !document.getElementById("verteilen-band").hidden : null, + aus: document.getElementById("verteilen-knopf")?.disabled, + darf: window.__ich?.darf_verteilen, + })); + if (stand.band === true && stand.aus === false && stand.darf === true) { + /* Nicht nur hinsehen -- einmal aufmachen. Ein Knopf, der + nicht abgeschaltet ist, muss noch lange nichts tun. */ + await v.s.click("#verteilen-knopf"); + await v.s.waitForTimeout(500); + const auf = await v.s.evaluate(() => ({ + offen: !document.getElementById("e-neu")?.hidden, + leute: document.querySelectorAll("#e-fuer-leute input[type=checkbox]").length, + })); + if (auf.offen && auf.leute > 0) konnten++; + } + ok(stand.band === true && stand.aus === false, + `${wer} sieht das Verteilband und kann es bedienen` + + ` (sichtbar=${stand.band}, aus=${stand.aus})`); + } finally { await v.ctx.close(); } + } + ok(konnten === verteiler.length, + `und alle ${verteiler.length} bekommen das Formular mit der Personenliste auf (${konnten})`); + + /* GEGENPROBE: Ein Modi darf es NICHT. Ohne diese Zeile waere nicht + bewiesen, dass die drei oben etwas Besonderes koennen -- eine + Pruefung, die bei jedem gruen wird, misst keine Grenze. */ + { + const m = await seiteAls("modi", "CODE-MODI-0001", 1180); + try { + await m.s.goto(`${SEITE}/workspace/entwicklung.html`, { waitUntil: "networkidle" }); + await m.s.waitForTimeout(1700); + const stand = await m.s.evaluate(() => ({ + band: document.getElementById("verteilen-band") + ? !document.getElementById("verteilen-band").hidden : null, + darf: window.__ich?.darf_verteilen, + })); + ok(stand.band === false && stand.darf === false, + `Gegenprobe: ein Modi sieht das Verteilband nicht` + + ` (sichtbar=${stand.band}, darf=${stand.darf})`); + } finally { await m.ctx.close(); } + } + ok(meckern.length === 0, meckern.length ? `der Browser meldet: ${meckern.slice(0, 3).join(" | ")}` : "kein Absturz und keine Fehlermeldung im Browser"); diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html index 44e5798c..c0b2823e 100644 --- a/workspace/anruf-probe.html +++ b/workspace/anruf-probe.html @@ -16,15 +16,15 @@ verdeckt. Gefunden hat es pruef-struktur. Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. --> - - + + - +