diff --git a/server/pruef-modi-katalog.mjs b/server/pruef-modi-katalog.mjs index 1cf7d968..5c546526 100644 --- a/server/pruef-modi-katalog.mjs +++ b/server/pruef-modi-katalog.mjs @@ -854,6 +854,113 @@ console.log(""); ok(nachher.nochBeworben === 0, `und die Bewerbung wartet nicht mehr (${nachher.nochBeworben})`); + /* ==== UND WAS IN EINER ANDEREN KATEGORIE WARTET? (23.09.2026) === + + DAS WAR EIN LOCH, das ich selbst gebaut hatte. Die Bewerbung + steht an ihrer Karte -- und die Karte steht in EINER von + vierzehn Kategorien. Wer eine andere offen hat, sieht nichts: + Die Bewerbung ist da, das Brett ist offen, und trotzdem findet + er sie nie. + + Geprueft wird genau dieser Fall: Eine Bewerbung in einer + Kategorie, die gerade NICHT gewaehlt ist. Ohne das Band waere + hier nichts zu sehen -- und die Pruefung war es, die das + beweisen muss, nicht mein Zutrauen. */ + const fern = katalog.aufgaben.find((v) => v.gruppe === "wachstum"); + ok(!!fern, `es gibt eine Vorlage in einer anderen Kategorie (${fern?.gruppe})`); + await hole(modiAn.keks, "/workspace/api/vorlagen/bewerben", { + method: "POST", headers: jsonKopf, + body: JSON.stringify({ vorlage: fern.schluessel, text: "das kann ich" }), + }); + + /* Zurueck auf eine ANDERE Kategorie -- die Ausgangslage. */ + await seite.evaluate(() => { + const reihe = document.querySelector(".vorlagenbrett .stufenleiter"); + const k = [...(reihe?.querySelectorAll("button") || [])] + .find((b) => /Chat-Moderation/i.test(b.textContent)); + if (k) k.click(); + }); + await seite.reload({ waitUntil: "networkidle" }); + await seite.waitForTimeout(1600); + const zu2 = await seite.evaluate(() => + document.getElementById("vorlagenbrett")?.dataset.auf !== "ja"); + if (zu2) { + await seite.click(".vorlagenbrett__kopf").catch(() => {}); + await seite.waitForTimeout(800); + } + + const band = await seite.evaluate(() => { + const b = document.querySelector(".vorlagenbrett__warten"); + if (!b) return null; + const knoepfe = [...b.querySelectorAll(".vorlagenbrett__warten-knopf")]; + const offen = document.querySelector('.stufenleiter__knopf[aria-pressed="true"]'); + return { + schild: b.querySelector(".vorlagenbrett__warten-schild")?.textContent.trim() || "", + knoepfe: knoepfe.map((k) => k.textContent.trim()), + /* Steht die Karte dazu gerade ueberhaupt auf dem Brett? */ + karteDa: !!document.querySelector(".vorlagenbrett__karte"), + offeneKategorie: offen?.textContent.trim() || "", + hoch: Math.round(knoepfe[0]?.getBoundingClientRect().height || 0), + }; + }); + ok(!!band, "das Band sagt, dass etwas wartet — auch aus einer anderen Kategorie"); + ok(/wartet|warten/.test(band?.schild || ""), + `mit einem Satz, der sagt was zu tun ist ("${band?.schild}")`); + ok((band?.knoepfe || []).some((t) => /Marina/.test(t)), + `und nennt, wer sich beworben hat (${(band?.knoepfe || []).join(" | ")})`); + /* AM DAUMEN TREFFBAR -- 40 px ist die Grenze im Haus fuer alles, + was in einer Reihe steht. */ + ok((band?.hoch || 0) >= 40, `der Knopf ist ${band?.hoch} px hoch`); + + /* DER SPRUNG MUSS AUCH ANKOMMEN. Ein Knopf, der in die richtige + Kategorie fuehrt und dort nichts zeigt, ist schlimmer als + keiner -- genau das passiert, wenn der Stufenfilter stehen + bleibt. */ + await seite.evaluate(() => { + document.querySelector(".vorlagenbrett__warten-knopf")?.click(); + }); + await seite.waitForTimeout(1400); + const nachSprung = await seite.evaluate(() => { + const hervor = document.querySelector('.vorlagenbrett__karte[data-hervor="ja"]'); + return { + vorlage: hervor?.dataset.vorlage || "", + titel: hervor?.querySelector(".vorlagenbrett__titel")?.textContent.trim() || "", + bewerbungDa: !!hervor?.querySelector(".vorlagenbrett__bewerbung"), + }; + }); + ok(nachSprung.vorlage === fern.schluessel, + `der Sprung landet auf der richtigen Karte (${nachSprung.titel})`); + ok(nachSprung.bewerbungDa, + "und dort steht die Bewerbung mit Annehmen und Ablehnen"); + + /* GEGENPROBE: Wenn nichts mehr wartet, ist das Band WEG. + + Ohne sie bewiesen die Zeilen darueber nur, dass das Band immer + dasteht -- und ein Hinweis, der immer da ist, wird ueberlesen. + Dieselbe Hausregel wie bei der Warnung, die immer kommt. */ + const offeneAlle = (await hole(handAn.keks, "/workspace/api/vorlagen")) + .daten?.bewerbungen || []; + for (const b3 of offeneAlle) { + await hole(handAn.keks, "/workspace/api/vorlagen/bewerbung/ablehnen", { + method: "POST", headers: jsonKopf, + body: JSON.stringify({ id: b3.id, kommentar: "Aufraeumen der Pruefung" }), + }); + } + ok(offeneAlle.length > 0, + `${offeneAlle.length} offene Bewerbung(en) werden fuer die Gegenprobe beantwortet`); + await seite.reload({ waitUntil: "networkidle" }); + await seite.waitForTimeout(1600); + const zu3 = await seite.evaluate(() => + document.getElementById("vorlagenbrett")?.dataset.auf !== "ja"); + if (zu3) { + await seite.click(".vorlagenbrett__kopf").catch(() => {}); + await seite.waitForTimeout(800); + } + const ohneBand = await seite.evaluate(() => + document.querySelectorAll(".vorlagenbrett__warten").length); + ok(ohneBand === 0, + `Gegenprobe: wartet nichts, steht auch nichts da (${ohneBand})`); + ok(konsole.length === 0, konsole.length ? "Fehler in der Konsole: " + konsole[0].slice(0, 80) : "keine Fehler in der Konsole"); diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html index 771acdfe..8ba25171 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`. --> - - + + - +