diff --git a/server/pruef-gifs.mjs b/server/pruef-gifs.mjs index 4eb07d27..bdc1e6bf 100644 --- a/server/pruef-gifs.mjs +++ b/server/pruef-gifs.mjs @@ -57,7 +57,7 @@ function anlegen(name, rolle, code) { return d.prepare("SELECT last_insert_rowid() AS id").get().id; } anlegen("Filipe", "admin", "CODE-DOGI-0001"); -anlegen("Miss", "modi", "CODE-MODI-0001"); +const idMiss = anlegen("Miss", "modi", "CODE-MODI-0001"); anlegen("Luna", "creator", "CODE-CREA-0001"); d.close(); @@ -96,9 +96,53 @@ try { (Zeile 810), nicht geraten. Mein erster Versuch probierte drei erfundene Namen und traf keinen; der Raum blieb zu, und der GIF-Knopf deshalb verborgen. */ - await seite.evaluate(() => { - document.querySelector(".chat-raum__knopf")?.click(); - }); + + /* ==== EIN GANZ NORMALES GESPRAECH, NICHT DAS ERSTE DER LISTE ====== + (02.10.2026 -- und das ist eine Zeitbombe, die hochgegangen ist) + + Hier stand `document.querySelector(".chat-raum__knopf")?.click()` + -- also „nimm das erste Gespraech". Das erste ist der TREFF, den + der Server beim Start selbst anlegt. Und im Treff gilt die + Nachtruhe: zwischen 0 und 6 Uhr weist der Server jedes Schreiben + mit 403 ab, Text, Anhang und GIF. + + FOLGE: Diese Pruefung war tagsueber gruen und nachts rot -- + seit es sie gibt. Gemessen um 04:30 Uhr, und die Antwort stand + im Protokoll: + + 403 {"fehler":"Das Rudel schläft. Ab 06:00 Uhr geht es + weiter …","nachtruhe":{"zu":true,"ab":0,"bis":6}} + + Nicht das GIF war kaputt, sondern die Uhr war eine Annahme. Das + ist derselbe Fehler wie am 06.09. im Shop („ein Test, der die + Wanduhr als Annahme benutzt, misst irgendwann das Gegenteil") -- + dort war es ein Oeffnungstermin, hier ein Raum mit Nachtruhe. + + Deshalb wird jetzt ein eigenes Gespraech mit Miss angelegt und + GENAU DAS geoeffnet: Fuer ein normales Gespraech gibt es keine + Nachtruhe, die Messung gilt rund um die Uhr. + + UND DIE NACHTRUHE IST NICHT UNGEPRUEFT GEBLIEBEN: Sie steht + jetzt in pruef-treffchat, wo das Zeitfenster richtig gesetzt + wird (ueber die Einstellung, nicht ueber die Systemuhr) und + beide Zustaende in einem Lauf vorkommen. Dort war der GIF-Weg + als einziger der drei noch gar nicht geprueft. */ + await seite.evaluate(async (id) => { + await fetch("/workspace/api/chat/direkt", { + method: "POST", + headers: { "Content-Type": "application/json" }, + credentials: "same-origin", + body: JSON.stringify({ mit: id }), + }); + }, idMiss); + await seite.reload({ waitUntil: "networkidle" }); + await seite.waitForSelector(".chat-raum__knopf", { timeout: 8000 }); + const zuMiss = seite.locator(".chat-raum__knopf", { hasText: "Miss" }).first(); + /* LAUT ABBRECHEN, WENN ES IHN NICHT GIBT. Ein stilles + `?.click()` auf nichts waere wieder eine Messung, die „der Raum + ist zu" meldet und den Grund verschweigt. */ + await zuMiss.waitFor({ timeout: 8000 }); + await zuMiss.click(); try { await seite.waitForFunction( () => { const k = document.getElementById("gif-auf"); return k && !k.hidden; }, diff --git a/server/pruef-treffchat.mjs b/server/pruef-treffchat.mjs index d758db4b..e12a2ab6 100644 --- a/server/pruef-treffchat.mjs +++ b/server/pruef-treffchat.mjs @@ -335,6 +335,34 @@ let treffId = null; { cookie: kGast, "Content-Type": "image/png" }, { egal: 1 }); ok(anhang.code === 403, `auch kein Anhang (${anhang.code})`); + /* ==== UND DAS GIF (02.10.2026) ================================== + + Neben dieser Regel steht in workspace-chat.js woertlich: „Sie + nur beim Text und beim Anhang zu pruefen hiesse, dass man + nachts zwar nicht schreiben, aber ein GIF schicken kann -- der + Weg, den jeder findet, der es einmal versucht." + + Genau dieser dritte Weg war bis heute der einzige, den keine + Pruefung je gegangen ist. Der Kommentar hat den Fehler + beschrieben und nicht verhindert -- dieselbe Sorte Luecke wie + beim Spaltenverlust vom 11.09. + + GEFRAGT WIRD ALS DOGFATHER, nicht als Gast. Die GIF-Kiste + gehoert dem Rudel; ein Gast bekaeme seine 403 von der FALSCHEN + Schranke (`nurRudel`), und die Messung waere wertlos -- grün, + ohne die Nachtruhe je berührt zu haben. + + UND MIT EINER NUMMER, DIE ES NICHT GIBT. Das ist Absicht: + Kommt trotzdem die Nachtruhe-Absage, steht die Schranke VOR + dem Nachschlagen. Stuende sie dahinter, verriete der Server + nachts an der Nummer, welche GIFs es gibt. */ + const gifNachts = await ruf(`/workspace/api/chat/raeume/${treffId}/gif`, CREW, "POST", + { cookie: kDogi }, { gif_id: 999999 }); + ok(gifNachts.code === 403, `auch kein GIF (${gifNachts.code})`); + ok(/schläft/i.test(json(gifNachts).fehler || ""), + "und zwar wegen der Nachtruhe, nicht wegen der Nummer: " + + `„${(json(gifNachts).fehler || "").slice(0, 44)}…“`); + /* GELESEN WERDEN DARF DIE GANZE NACHT. Sonst waere es keine Nachtruhe, sondern eine geschlossene Tuer -- und wer nachts nachsehen will, was los war, koennte es nicht. */ @@ -366,6 +394,18 @@ let treffId = null; } else { ok(a.code === 201 || a.code === 200, `ein Gast kann schreiben (${a.code})`); ok(b.code === 201 || b.code === 200, `ein Modi auch (${b.code})`); + + /* DIE GEGENPROBE ZUM GIF. Dieselbe Anfrage, dieselbe erfundene + Nummer wie im Nachtzweig -- bei Tag MUSS die Absage vom + Nachschlagen kommen und nicht von der Nachtruhe. Ohne diese + Zeile waere „auch kein GIF" oben auch dann gruen, wenn die + Schranke rund um die Uhr zu waere. */ + const gifTags = await ruf(`/workspace/api/chat/raeume/${treffId}/gif`, CREW, "POST", + { cookie: kDogi }, { gif_id: 999999 }); + ok(gifTags.code === 404, + `beim GIF antwortet bei Tag das Nachschlagen, nicht die Nachtruhe (${gifTags.code})`); + ok(!/schläft/i.test(json(gifTags).fehler || ""), + ` und kein Wort von Schlaf („${(json(gifTags).fehler || "").slice(0, 44)}")`); } if (!NACHTLAUF) {