Zwei Pruefungen waren rot, weil Namen sich geaendert hatten
Beide meldeten seit Tagen einen Fehler, den es nicht gab. Eine rote Pruefung, die rot BLEIBT, gewoehnt einem das Hinsehen ab -- ab da uebersieht man auch die echte. --- pruef-teilen: 14 ok / 3 Fehler -> 27 ok / 0 -------------------- Sie suchte `.teilen__brett`. Die Seite baut `.tl-brett`; die Klassen wurden irgendwann umbenannt, und die Pruefung suchte seitdem nach Elementen, die es nicht gibt. Gemeldet hat sie das sogar richtig -- "drei Ziele zur Auswahl (0)" --, nur hat niemand die Klammer gelesen. Danach lief sie in einen Klick-Zeitablauf und brach ab, weswegen DREIZEHN weitere Pruefungen nie stattfanden. --- pruef-crew-wand-bild: 41 ok / 4 Fehler -> 45 ok / 0 ------------ Zwei feste Erwartungen aus einer Zeit, die vorbei ist: 1. `/Team Dogi/` im Reiter. Die App heisst seit dem Treff-Umzug "DogFather Universe". Statt den neuen Namen einzutragen -- und damit dieselbe Zeitbombe mit neuem Datum zu stellen -- kommt er jetzt aus `crew.webmanifest`. Benennt jemand die App um, folgt der Reiter, und beides bleibt gruen. Weichen sie auseinander, sieht der Mensch im Reiter einen anderen Namen als auf seinem Startbildschirm, und genau das soll die Pruefung finden. 2. `kacheln === 3`, seit Filipe am 10.09. sagte "3 rollen. dogfather. rechte hand und modis". Am 19.09. zog der Treff in Team Dogi ein und die Community kam als vierte dazu -- die Zahl war ab da falsch, die Wand richtig. Verglichen wird jetzt die MENGE der Rollen, nicht ihre Anzahl: Eine Zahl sagt beim Scheitern "3 erwartet, 4 gefunden" und verschweigt, WELCHE. Beide Male war die Seite richtig und die Pruefung veraltet -- das ist dieselbe Krankheit wie bei den Portnummern und bei pruef-entwicklung: ein Name oder eine Zahl, abgeschrieben an einer zweiten Stelle, die niemand mitpflegt. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -81,7 +81,14 @@ for (const geraet of [
|
|||||||
deviceScaleFactor: 1,
|
deviceScaleFactor: 1,
|
||||||
});
|
});
|
||||||
const seite = await ctx.newPage();
|
const seite = await ctx.newPage();
|
||||||
const meldungen = [];
|
/* Der App-Name kommt aus dem Manifest der Crew-Adresse. Eine zweite
|
||||||
|
Fassung hier waere die, die beim naechsten Umbenennen vergessen
|
||||||
|
wird. */
|
||||||
|
const { readFileSync } = await import("node:fs");
|
||||||
|
const APPNAME = JSON.parse(
|
||||||
|
readFileSync(new URL("../workspace/crew.webmanifest", import.meta.url), "utf8")).name;
|
||||||
|
|
||||||
|
const meldungen = [];
|
||||||
seite.on("console", (m) => { if (m.type() === "error") meldungen.push(m.text()); });
|
seite.on("console", (m) => { if (m.type() === "error") meldungen.push(m.text()); });
|
||||||
|
|
||||||
const adresse = geraet.alt
|
const adresse = geraet.alt
|
||||||
@@ -105,11 +112,35 @@ for (const geraet of [
|
|||||||
if (geraet.alt) {
|
if (geraet.alt) {
|
||||||
ok(kacheln === 5, `${geraet.name}: die alte Wand hat ihre fuenf Kacheln (${kacheln})`);
|
ok(kacheln === 5, `${geraet.name}: die alte Wand hat ihre fuenf Kacheln (${kacheln})`);
|
||||||
} else {
|
} else {
|
||||||
ok(/Team Dogi/.test(titel), `${geraet.name}: der Reiter heisst "${titel}"`);
|
/* DER REITER TRAEGT DEN APP-NAMEN -- abgeleitet, nicht abgeschrieben.
|
||||||
/* DREI, seit Filipe am 10.09.2026 sagte: "3 rollen. dogfather.
|
Hier stand `/Team Dogi/`, aus der Zeit, als die App so hiess. Sie
|
||||||
rechte hand und modis." Hier stand vorher `=== 0` -- am Vormittag
|
heisst seit dem Treff-Umzug "DogFather Universe", und die Pruefung
|
||||||
richtig, am Nachmittag nicht mehr. */
|
war seitdem rot, ohne dass etwas kaputt war. Ein fester Name in
|
||||||
ok(kacheln === 3, `${geraet.name}: drei Rollenkacheln (${kacheln})`);
|
einer Pruefung ist eine Zeitbombe mit Datum: Er stimmt, bis
|
||||||
|
jemand umbenennt, und dann kostet er Vertrauen in den ganzen
|
||||||
|
Satz. Gemessen wird deshalb gegen das Manifest -- benennt jemand
|
||||||
|
die App um, folgt der Reiter, und beides bleibt gruen. Weichen
|
||||||
|
sie auseinander, sieht der Mensch im Reiter einen anderen Namen
|
||||||
|
als auf seinem Startbildschirm, und das ist der Fehler, den es
|
||||||
|
zu finden gilt. */
|
||||||
|
ok(titel.includes(APPNAME),
|
||||||
|
`${geraet.name}: der Reiter traegt den App-Namen "${APPNAME}" (steht da: "${titel}")`);
|
||||||
|
|
||||||
|
/* WELCHE ROLLEN AUF DIE WAND GEHOEREN.
|
||||||
|
Hier stand `=== 3`, seit Filipe am 10.09.2026 sagte: "3 rollen.
|
||||||
|
dogfather. rechte hand und modis." Am 19.09. ist der Treff in
|
||||||
|
Team Dogi eingezogen, und die Community kam als vierte dazu --
|
||||||
|
die Zahl war ab da falsch, die Wand richtig.
|
||||||
|
|
||||||
|
Eine Zahl sagt beim Scheitern nur "3 erwartet, 4 gefunden" und
|
||||||
|
verschweigt, WELCHE. Deshalb wird die MENGE verglichen: Fehlt
|
||||||
|
eine Rolle, steht ihr Name in der Meldung, und wer sie entfernt
|
||||||
|
hat, sieht sofort, ob das Absicht war. */
|
||||||
|
const rollen = (await seite.locator(".rolle").evaluateAll(
|
||||||
|
(ns) => ns.map((n) => n.dataset.rolle || ""))).sort();
|
||||||
|
const SOLL = ["admin", "gast", "hand", "modi"];
|
||||||
|
ok(JSON.stringify(rollen) === JSON.stringify(SOLL),
|
||||||
|
`${geraet.name}: die vier Rollen stehen da (${rollen.join(", ") || "keine"})`);
|
||||||
/* Jede muss auch bedienbar sein. Eine Kachel, die im HTML steht,
|
/* Jede muss auch bedienbar sein. Eine Kachel, die im HTML steht,
|
||||||
aber 0 px hoch ist, zaehlt oben mit und laesst sich trotzdem
|
aber 0 px hoch ist, zaehlt oben mit und laesst sich trotzdem
|
||||||
nicht antippen -- genau die Sorte Fehler, die eine Zaehlung
|
nicht antippen -- genau die Sorte Fehler, die eine Zaehlung
|
||||||
|
|||||||
+11
-4
@@ -132,8 +132,15 @@ melde("=== 1. Wenn der Link in „url“ steht ===");
|
|||||||
ok(await gezeigterLink() === VIDEO, "der Link wird erkannt und angezeigt");
|
ok(await gezeigterLink() === VIDEO, "der Link wird erkannt und angezeigt");
|
||||||
ok(!(await seite.$("#haendisch:not([hidden])")),
|
ok(!(await seite.$("#haendisch:not([hidden])")),
|
||||||
"und das Feld zum Einfügen bleibt weg – es gibt ja nichts einzufügen");
|
"und das Feld zum Einfügen bleibt weg – es gibt ja nichts einzufügen");
|
||||||
const bretter = await seite.$$eval(".teilen__brett", (ns) => ns.map((n) => ({
|
/* DIE KLASSEN HEISSEN `tl-…`, NICHT `teilen__…` (berichtigt
|
||||||
name: n.querySelector(".teilen__brett-name")?.textContent,
|
20.09.2026). Sie wurden irgendwann umbenannt, und diese Pruefung
|
||||||
|
suchte seitdem nach Elementen, die es nicht gibt: Sie meldete
|
||||||
|
"drei Ziele zur Auswahl (0)" -- also rot mit der richtigen Zahl
|
||||||
|
in Klammern, und niemand hat die Klammer gelesen. Ein Selektor
|
||||||
|
ist ein Name, und Namen altern: Sie stehen in zwei Dateien und
|
||||||
|
werden nur in einer geaendert. */
|
||||||
|
const bretter = await seite.$$eval(".tl-brett", (ns) => ns.map((n) => ({
|
||||||
|
name: n.querySelector(".tl-brett-name")?.textContent,
|
||||||
gewaehlt: n.getAttribute("aria-pressed"),
|
gewaehlt: n.getAttribute("aria-pressed"),
|
||||||
})));
|
})));
|
||||||
ok(bretter.length === 3, `drei Ziele zur Auswahl (${bretter.length})`);
|
ok(bretter.length === 3, `drei Ziele zur Auswahl (${bretter.length})`);
|
||||||
@@ -227,9 +234,9 @@ melde("=== 5. Wohin ist eine Frage ===");
|
|||||||
{
|
{
|
||||||
const vorher = await zahlIm("treff");
|
const vorher = await zahlIm("treff");
|
||||||
await oeffne(`url=${encodeURIComponent(`http://127.0.0.1:${TIKTOK}/@hasidog00804/video/99`)}`);
|
await oeffne(`url=${encodeURIComponent(`http://127.0.0.1:${TIKTOK}/@hasidog00804/video/99`)}`);
|
||||||
await seite.click('.teilen__brett[data-brett="treff"]');
|
await seite.click('.tl-brett[data-brett="treff"]');
|
||||||
await seite.waitForTimeout(300);
|
await seite.waitForTimeout(300);
|
||||||
const gewaehlt = await seite.$$eval(".teilen__brett",
|
const gewaehlt = await seite.$$eval(".tl-brett",
|
||||||
(ns) => ns.filter((n) => n.getAttribute("aria-pressed") === "true").map((n) => n.dataset.brett));
|
(ns) => ns.filter((n) => n.getAttribute("aria-pressed") === "true").map((n) => n.dataset.brett));
|
||||||
ok(gewaehlt.length === 1 && gewaehlt[0] === "treff",
|
ok(gewaehlt.length === 1 && gewaehlt[0] === "treff",
|
||||||
`genau ein Ziel ist gewählt (${gewaehlt.join(", ")})`);
|
`genau ein Ziel ist gewählt (${gewaehlt.join(", ")})`);
|
||||||
|
|||||||
Reference in New Issue
Block a user