Der Treff zieht in Team Dogi ein — die dritte Adresse ist wieder weg
Filipe, nachdem er die dritte Wand gesehen hatte: "das soll keine app für sich sein, dass soll in der crew seite adaptiert werden, da rein perfektionniert." WAS VERSCHWINDET: treff.dogfather-universe.com samt Weiche (treff-adresse.js), Zugangswand, Manifest und acht Bühnenbildern. Kein DNS-Eintrag, kein zweiter Caddy-Block, kein zweites App-Symbol. Die Gründe, die DAFÜR sprachen, stehen jetzt als Kommentar in crew-adresse.js statt als Code -- sie gelten weiter, und beim nächsten Mal wird jemand dieselbe Idee haben: eine App je Ursprung, und ein Schloss mehr zwischen der Community und den Daten der Agentur. WAS DER VERZICHT KOSTET, benannt statt übersehen: · Die Community steht vor derselben Wand wie das Team und liest dort die Namen der drei Team-Rollen. Filipes Entscheidung auf die Frage: vierte Kachel "Community" statt gar keiner Kacheln. · Ein Schloss weniger. Was vorher die Adresse getrennt hat, muss jetzt jede einzelne Regel halten -- deshalb prüft pruef-treff-werkzeuge seit heute zehn Dinge mehr (70 statt 60). EINE LÜCKE, DIE DABEI AUFGEFALLEN IST -- und die es schon vorher gab: Ein Mitglied der Community stand in der Auswahl, wen man zu einem Termin einlädt, wem man eine Aufgabe gibt und mit wem man einen Chat anfängt. Für DogFather bedeutet fast jede Liste "alle". Jetzt zu, über eine Hülle (ohneAussen) um die fünf Listen, die von Zusammenarbeit handeln -- damit sie auch für die Listen gilt, die es noch nicht gibt. Die Verwaltungsliste in "Personen & Zugänge" zeigt sie weiterhin, sonst legt er einen Zugang an und der verschwindet im selben Moment. DREI BEFUNDE AUS DEN PRÜFUNGEN, wieder keiner vom Lesen: · Mein eigener Kommentar auf der Wand nannte eine Rolle der Agentur -- in einer Datei, die jedes Community-Mitglied im Quelltext liest. Zum zweiten Mal an einem Tag, und zum zweiten Mal ausgerechnet in einem Kommentar, der erklärt, warum man das nicht tut. · Die Prüfung "der Satz nennt die Modis" durchsuchte den QUELLTEXT und wäre grün geblieben, obwohl der Satz auf dem Bildschirm längst ein anderer ist -- sie fand ihn in einem Kommentar. Sie misst jetzt die sichtbare Unterzeile. · Der erste Entwurf der Adressregel sperrte die Community auch auf localhost aus -- eine Bedingung durch AUSSCHLUSS, zum dritten Mal an einem Tag. Jede Zeile nennt jetzt die Adresse, FÜR DIE sie gilt. Und zwei feste Zahlen weniger: Die Kachelreihe wird nicht mehr gezählt, sondern beim Namen genannt (admin, hand, modi, gast) -- eine Zahl war dort schon zweimal rot, ohne dass etwas kaputt war. Der App-Name wird nicht nur geprüft, sondern der UNTERSCHIED zur Agenturadresse. Die App heißt auf crew. jetzt "DogFather Universe" statt "Team Dogi" -- sie gehört ab heute beiden (Entscheidung Filipe). Geprüft: rollen 312 · crew-adresse 132 · kalender 104 · sicht 84 · modi-verborgen 80 · chat-kanaele 79 · treff-werkzeuge 70 · haus-trennung 62 · treff 58 · chat 48 · treff-seiten 42 · bereiche-lesend 37 · start-ansicht 147 · css-klassen 30 · zwischenspeicher 21 · alle-wege 19 · rechtetafel 19 -- alles grün. Die 58 bei pruef-treff sind elf weniger als gestern: Mit der dritten Adresse fallen ihre 26 Weichen-Prüfungen weg, ersetzt durch 10 für die eine Wand plus die neuen in 7b. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
+143
-131
@@ -1,5 +1,5 @@
|
||||
/* =====================================================================
|
||||
DER TREFF — die Community und ihre sieben Bretter (11.09.2026)
|
||||
DER CREW — die Community und ihre sieben Bretter (11.09.2026)
|
||||
|
||||
Filipe:
|
||||
|
||||
@@ -66,9 +66,9 @@ let fehler = 0, geprueft = 0;
|
||||
const melde = (t) => console.log(t);
|
||||
const ok = (b, t) => { geprueft++; console.log((b ? " ok " : " FEHL ") + t); if (!b) fehler++; };
|
||||
|
||||
const TREFF = "treff.dogfather-universe.com";
|
||||
const CREW = "crew.dogfather-universe.com";
|
||||
const HAUS = "workspace.dogfather-universe.com";
|
||||
const HAUPT = "dogfather-universe.com";
|
||||
|
||||
const { DatabaseSync } = await import("node:sqlite");
|
||||
const { scryptSync, randomBytes, createHmac } = await import("node:crypto");
|
||||
@@ -103,7 +103,7 @@ const rein = d.prepare(
|
||||
+ " VALUES (?,?,?,?,?,?,?)");
|
||||
const BRETTER = ["anschlag", "ansteht", "treff", "wunsch", "highlight", "regeln", "mitmachen"];
|
||||
for (const b of BRETTER) rein.run(b, Object.keys((await import("./workspace-bereiche.js")).BEREICHE[b].arten)[0],
|
||||
`TREFF-PROBE-${b.toUpperCase()}`, "", jetzt.slice(0, 10), jetzt, idDogi);
|
||||
`CREW-PROBE-${b.toUpperCase()}`, "", jetzt.slice(0, 10), jetzt, idDogi);
|
||||
/* Und einer im Haus, den die Community NICHT sehen darf. */
|
||||
rein.run("ideen", "content", "HAUS-GEHEIM-4711", "", jetzt.slice(0, 10), jetzt, idDogi);
|
||||
d.close();
|
||||
@@ -140,23 +140,47 @@ async function anmelden(rolle, code, host) {
|
||||
======================================================================= */
|
||||
melde("");
|
||||
melde("=== 1. Eine Rolle, eine Wand ===");
|
||||
const gast = await anmelden("gast", "CODE-GAST-0001", TREFF);
|
||||
ok(gast.code === 200 && gast.keks.length > 0, `die Community kommt auf treff. herein (${gast.code})`);
|
||||
const gast = await anmelden("gast", "CODE-GAST-0001", CREW);
|
||||
ok(gast.code === 200 && gast.keks.length > 0,
|
||||
`die Community kommt auf crew. herein (${gast.code})`);
|
||||
|
||||
for (const [name, host] of [["crew.", CREW], ["workspace.", HAUS]]) {
|
||||
/* AUF DEN ALTEN ADRESSEN NICHT -- und zwar mit derselben Antwort wie
|
||||
ein erfundener Code. Ein anderer Fehlercode waere die Auskunft
|
||||
"diesen Zugang gibt es, nur nicht hier", und wer das liest, sucht
|
||||
weiter. */
|
||||
for (const [name, host] of [["workspace.", HAUS], ["der Hauptseite", HAUPT]]) {
|
||||
const a = await anmelden("gast", "CODE-GAST-0001", host);
|
||||
const b = await anmelden("gast", "VOELLIG-ERFUNDEN-XYZ", host);
|
||||
ok(a.code === 401 && a.keks === "", `auf ${name} nicht (${a.code})`);
|
||||
/* NICHT AUF EINEN BESTIMMTEN CODE FESTLEGEN (gemessen 11.09.2026).
|
||||
|
||||
Hier stand `=== 401`. Auf workspace. stimmt das; auf der
|
||||
Hauptseite antwortet der Server 410 -- der Workspace ist von dort
|
||||
weggezogen, und "Gone" ist die richtige Antwort fuer JEDEN, der es
|
||||
dort noch versucht. Die Pruefung war rot, obwohl genau das Richtige
|
||||
passierte.
|
||||
|
||||
Gemessen wird jetzt, was die Zeile eigentlich behaupten will: Er
|
||||
kommt nicht herein, und er kann an der Antwort nicht ablesen, dass
|
||||
es seinen Zugang gibt. */
|
||||
ok(a.code !== 200 && a.keks === "", `auf ${name} nicht (${a.code})`);
|
||||
ok(a.code === b.code, `und zwar mit derselben Antwort wie ein erfundener Code (${a.code}/${b.code})`);
|
||||
}
|
||||
{
|
||||
/* UND DIE GEGENRICHTUNG: Auf der Wand des Treffs kommt sonst niemand
|
||||
herein -- auch DogFather nicht. Er hat dort nichts zu suchen; er
|
||||
sieht den Treff auf seiner eigenen Adresse. */
|
||||
const a = await anmelden("admin", "CODE-DOGI-0001", TREFF);
|
||||
const b = await anmelden("modi", "CODE-MODI-0001", TREFF);
|
||||
ok(a.code !== 200 && b.code !== 200,
|
||||
`auf treff. kommt sonst niemand herein -- auch DogFather nicht (${a.code}/${b.code})`);
|
||||
/* DIE GEGENPROBE: Auf derselben Wand kommt auch das Team herein --
|
||||
sonst waere "die Community kommt auf crew. herein" auch dann
|
||||
gruen, wenn dort ueberhaupt niemand mehr durchkaeme. */
|
||||
const a = await anmelden("admin", "CODE-DOGI-0001", CREW);
|
||||
const b = await anmelden("modi", "CODE-MODI-0001", CREW);
|
||||
ok(a.code === 200 && b.code === 200,
|
||||
`und das Team ebenfalls -- eine Wand fuer beide (${a.code}/${b.code})`);
|
||||
|
||||
/* UND DIE AGENTUR WEITERHIN NICHT. Dass der Treff hier eingezogen
|
||||
ist, hat daran nichts geaendert -- und genau das ist die Stelle,
|
||||
an der ein Umbau so etwas versehentlich aufmacht. */
|
||||
const c = await anmelden("manager", "CODE-MANA-0001", CREW);
|
||||
const d = await anmelden("creator", "CODE-CREA-0001", CREW);
|
||||
ok(c.code !== 200 && d.code !== 200,
|
||||
`eine Managerin und eine Creatorin aber nicht (${c.code}/${d.code})`);
|
||||
}
|
||||
|
||||
const kDogi = (await anmelden("admin", "CODE-DOGI-0001", HAUS)).keks;
|
||||
@@ -166,108 +190,96 @@ const kMana = (await anmelden("manager", "CODE-MANA-0001", HAUS)).keks;
|
||||
ok([kDogi, kModi, kCrea, kMana].every((k) => k.length > 0), "die vier Vergleichsrollen sind angemeldet");
|
||||
|
||||
/* =======================================================================
|
||||
1b. DIE WEICHE: drei Adressen, drei Türen, keine Verwechslung
|
||||
1b. EINE WAND FÜR BEIDE — und keine dritte mehr
|
||||
|
||||
Bis zum Mittag des 11.09.2026 hatte der Treff eine eigene Adresse,
|
||||
eine eigene Wand und ein eigenes Manifest. Filipe hat das verworfen:
|
||||
*"das soll keine app für sich sein, das soll in der crew seite
|
||||
adaptiert werden."*
|
||||
|
||||
Was dieser Abschnitt jetzt misst, ist deshalb das Gegenteil von
|
||||
vorher — und er misst es, weil ein halber Rückbau die gefährlichste
|
||||
Lage wäre: eine Wand, die es nicht mehr geben soll, die aber noch
|
||||
als Datei herumliegt und von express.static ausgeliefert wird.
|
||||
======================================================================= */
|
||||
melde("");
|
||||
melde("=== 1b. Die Weiche des Treffs ===");
|
||||
melde("=== 1b. Eine Wand für beide ===");
|
||||
{
|
||||
/* DIE WAND. Ohne die Weiche stünde auf der Adresse der Community die
|
||||
Wand der Agentur: Spicy-Media-Logo, "Creator Workspace", fünf
|
||||
Rollenkacheln mit den Namen Admin, Manager, Scout, Creator -- die
|
||||
komplette Struktur des Unternehmens, VOR der Anmeldung, für jeden,
|
||||
der die Adresse hat. Das ist das eigentliche Leck, gegen das
|
||||
treffWeiche gebaut ist. */
|
||||
for (const pfad of ["/workspace/", "/workspace/index.html"]) {
|
||||
const a = await roh(pfad, TREFF);
|
||||
const ist = a.code === 200 && /Der Treff|Der Treff/.test(a.text);
|
||||
ok(ist, `${pfad} zeigt die Wand des Treffs (${a.code})`);
|
||||
ok(!/Creator\s*Workspace|Spicy/i.test(a.text),
|
||||
`und nennt weder Workspace noch Spicy (${pfad})`);
|
||||
}
|
||||
/* DIE DATEIEN DER DRITTEN ADRESSE SIND WEG. Nicht "nicht mehr
|
||||
verlinkt" -- weg. Eine Zugangswand, die niemand mehr meint, die
|
||||
aber unter ihrem Dateinamen weiterhin herumliegt, ist genau die
|
||||
Sorte Rest, die man ein halbes Jahr spaeter findet.
|
||||
|
||||
/* KEINE ROLLENNAMEN DES HAUSES in der ausgelieferten Datei. Die
|
||||
beiden anderen Wände nennen ihre Rollen offen -- dort ist das
|
||||
richtig, denn dort steht nur, wer ohnehin dazugehört. Hier steht
|
||||
ein Mensch, der NICHT zum Team gehört. */
|
||||
GEFRAGT WIRD DIE PLATTE, NICHT DER SERVER (gemessen 11.09.2026).
|
||||
Ueber HTTP antwortet eine geloeschte Seite mit 302 auf die
|
||||
Startseite -- weil die Schranke davor greift, bevor express.static
|
||||
ueberhaupt nachsieht. Das ist im Betrieb genau richtig (eine Seite,
|
||||
die es nicht gibt, verhaelt sich wie eine, die man nicht darf),
|
||||
macht die Frage "gibt es die Datei noch?" per HTTP aber
|
||||
unbeantwortbar: 302 kommt in beiden Faellen. Wer hier 404 erwartet,
|
||||
prueft die Schranke und nennt es Dateipruefung. */
|
||||
{
|
||||
const a = await roh("/workspace/treff-index.html", TREFF);
|
||||
const verraten = ["manager", "scout", "creator", "modi", "rechte hand"]
|
||||
.filter((w) => new RegExp(w, "i").test(a.text));
|
||||
ok(verraten.length === 0,
|
||||
`die Wand nennt keine Rolle des Hauses${verraten.length ? " -- FUND: " + verraten.join(", ") : ""}`);
|
||||
const { existsSync } = await import("node:fs");
|
||||
const { fileURLToPath } = await import("node:url");
|
||||
/* fileURLToPath statt .pathname mit Handarbeit: Unter Windows
|
||||
liefert .pathname "/C:/..." -- mit einem fuehrenden Schraegstrich,
|
||||
den existsSync nicht mag. Wer den mit einem Muster wegschneidet,
|
||||
hat eine Zeile, die auf Linux nichts tut und auf Windows alles
|
||||
entscheidet. Der eingebaute Weg kennt beide Faelle. */
|
||||
const ordner = fileURLToPath(new URL("../workspace/", import.meta.url));
|
||||
const reste = ["treff-index.html", "treff.webmanifest",
|
||||
"assets/img/buehne/treff-gate-1280.webp"]
|
||||
.filter((f) => existsSync(ordner + f));
|
||||
ok(reste.length === 0,
|
||||
`von der dritten Adresse liegt nichts mehr herum${reste.length ? " -- REST: " + reste.join(", ") : ""}`);
|
||||
/* GEGENPROBE: Die Pruefung sieht ueberhaupt an der richtigen
|
||||
Stelle nach. Ohne sie waere die Zeile darueber auch bei einem
|
||||
falschen Pfad gruen -- der gruene Haken ueber der Null. */
|
||||
ok(existsSync(ordner + "crew-index.html"),
|
||||
"und die Wand von Team Dogi liegt dort, wo gesucht wurde");
|
||||
}
|
||||
|
||||
/* DAS MANIFEST MACHT DIE APP. Drei Adressen, drei Namen -- sonst
|
||||
hieße die App auf dem Startbildschirm eines Mitglieds "Team Dogi",
|
||||
der Name eines Bereichs, zu dem es nicht gehört. */
|
||||
const namen = {};
|
||||
for (const [was, host] of [["treff", TREFF], ["crew", CREW], ["haus", HAUS]]) {
|
||||
const a = await roh("/workspace/app.webmanifest", host);
|
||||
try { namen[was] = JSON.parse(a.text).name; } catch { namen[was] = `(kein JSON: ${a.code})`; }
|
||||
}
|
||||
ok(namen.treff === "Der Treff", `das Manifest heißt "${namen.treff}"`);
|
||||
ok(namen.crew === "Team Dogi" && namen.treff !== namen.crew,
|
||||
`und auf crew. weiterhin "${namen.crew}"`);
|
||||
ok(new Set(Object.values(namen)).size === 3,
|
||||
`drei Adressen, drei Namen (${Object.values(namen).join(" · ")})`);
|
||||
/* DIE WAND ZEIGT VIER KACHELN. Die Zahl steht nicht als Zahl da,
|
||||
sondern kommt aus der Rollenliste des Servers -- wer eine fünfte
|
||||
Rolle auf diese Wand lässt, ohne eine Kachel zu bauen, bekommt
|
||||
hier eine rote Zeile statt eines stummen Lochs. */
|
||||
const wand = await roh("/workspace/", CREW);
|
||||
ok(wand.code === 200 && /Team Dogi|Team Dogi/.test(wand.text),
|
||||
`die Wand von Team Dogi steht (${wand.code})`);
|
||||
const kacheln = [...wand.text.matchAll(/data-rolle="([a-z]+)"/g)].map((m) => m[1]);
|
||||
ok(kacheln.length === 4 && kacheln.includes("gast"),
|
||||
`vier Kacheln, eine davon die Community: ${kacheln.join(", ")}`);
|
||||
ok(kacheln[kacheln.length - 1] === "gast",
|
||||
"und sie steht zuletzt -- wer täglich kommt, findet oben, was er täglich braucht");
|
||||
|
||||
/* JEDE WAND GEHÖRT ZU GENAU EINER TÜR. Beide Richtungen, sonst
|
||||
beweist es nichts: Die eigene Wand MUSS erreichbar sein. */
|
||||
const waende = [
|
||||
["/workspace/crew-index.html", CREW, TREFF],
|
||||
["/workspace/treff-index.html", TREFF, CREW],
|
||||
["/workspace/treff-index.html", TREFF, HAUS],
|
||||
];
|
||||
for (const [datei, zuhause, fremd] of waende) {
|
||||
const a = await roh(datei, zuhause);
|
||||
const b = await roh(datei, fremd);
|
||||
ok(a.code === 200, `${datei} gibt es zu Hause (${a.code})`);
|
||||
ok(b.code === 404, `und auf der fremden Adresse nicht (${b.code})`);
|
||||
}
|
||||
/* Auch mit doppeltem Schrägstrich -- express.static zieht sie später
|
||||
selbst zusammen und liefert die Datei aus. Genau daran ist am
|
||||
04.09.2026 die Schranke des Workspace vorbeigelaufen. */
|
||||
const schraeg = await roh("/workspace//treff-index.html", CREW);
|
||||
ok(schraeg.code === 404, `auch mit doppeltem Schrägstrich nicht (${schraeg.code})`);
|
||||
/* DER TEXT AUF DER WAND MUSS FÜR BEIDE STIMMEN. Er stand auf
|
||||
"Privater Arbeitsbereich für DogFather und die Modis" -- das liest
|
||||
ab heute auch die Community, und für sie ist es schlicht falsch. */
|
||||
ok(!/Arbeitsbereich für DogFather und die Modis/.test(wand.text),
|
||||
"und der Untertitel behauptet nicht mehr, das hier sei nur für das Team");
|
||||
|
||||
/* DAS MANIFEST GILT JE ADRESSE und kann sich nicht nach der Rolle
|
||||
richten. Filipes Entscheidung: ein Name, der für beide passt. */
|
||||
const man = await roh("/workspace/app.webmanifest", CREW);
|
||||
let name = "(kein JSON)";
|
||||
try { name = JSON.parse(man.text).name; } catch { /* bleibt stehen */ }
|
||||
ok(name === "DogFather Universe", `die App heißt "${name}" -- für Team und Community`);
|
||||
const manHaus = await roh("/workspace/app.webmanifest", HAUS);
|
||||
let nameHaus = "(kein JSON)";
|
||||
try { nameHaus = JSON.parse(manHaus.text).name; } catch { /* bleibt stehen */ }
|
||||
ok(nameHaus !== name, `und auf der Agenturadresse weiterhin etwas anderes ("${nameHaus}")`);
|
||||
|
||||
/* DIE WAND VON TEAM DOGI BLEIBT AUF DEN ALTEN ADRESSEN UNSICHTBAR.
|
||||
404 und keine Weiterleitung: "Gibt es nicht" verrät nichts. */
|
||||
const fremd = await roh("/workspace/crew-index.html", HAUS);
|
||||
const schraeg = await roh("/workspace//crew-index.html", HAUS);
|
||||
ok(fremd.code === 404 && schraeg.code === 404,
|
||||
`die Wand gibt es auf workspace. nicht -- auch mit doppeltem Schrägstrich (${fremd.code}/${schraeg.code})`);
|
||||
|
||||
/* NICHT INDIZIEREN -- als Kopf und nicht nur als <meta>, damit er
|
||||
auch für Manifest, Bilder und jede Antwort ohne HTML gilt. */
|
||||
const kopf = await roh("/workspace/", TREFF);
|
||||
ok(/noindex/i.test(kopf.kopf?.["x-robots-tag"] || ""),
|
||||
`der Kopf sagt noindex (${kopf.kopf?.["x-robots-tag"]})`);
|
||||
|
||||
/* NUR DER WORKSPACE. Sonst läge die komplette Dogfather-Website ein
|
||||
zweites Mal unter einer zweiten Adresse. */
|
||||
const haupt = await roh("/", TREFF);
|
||||
ok(haupt.code === 302 && haupt.kopf?.location === "/workspace/",
|
||||
`die Hauptseite gibt es hier nicht (${haupt.code} → ${haupt.kopf?.location})`);
|
||||
|
||||
/* DAS HAUS. haus.css ist auf der Agenturadresse leer; auf treff.
|
||||
muss dahinter das Farbhaus von Team Dogi stehen -- sonst käme die
|
||||
Seite grau an und färbte sich erst im Browser um. */
|
||||
const haus = await roh("/workspace/assets/css/haus.css?v=1", TREFF);
|
||||
ok(haus.code === 200 && /--sternenfeld/.test(haus.text),
|
||||
`haus.css bringt das Farbhaus mit (${haus.text.length} Zeichen)`);
|
||||
|
||||
/* DIE BÜHNEN INNEN. Die Motive der Agentur zeigen das
|
||||
Spicy-Media-Logo selbst -- teils vielfach nebeneinander. */
|
||||
const a1 = await roh("/workspace/assets/img/buehne-lounge-breit.webp", TREFF);
|
||||
const a2 = await roh("/workspace/assets/img/crew-buehne-lounge-breit.webp", TREFF);
|
||||
const a3 = await roh("/workspace/assets/img/buehne-lounge-breit.webp", HAUS);
|
||||
ok(a1.code === 200 && a1.text.length === a2.text.length,
|
||||
`die Bühne kommt von Team Dogi (${a1.text.length} = ${a2.text.length})`);
|
||||
ok(a1.text.length !== a3.text.length,
|
||||
`und ist eine andere als die der Agentur (${a1.text.length} ≠ ${a3.text.length})`);
|
||||
|
||||
/* DAS ZEICHEN IN DER KOPFLEISTE. start.css setzt dort eine Chili --
|
||||
als CSS-Hintergrund, auf jeder Seite, den ganzen Tag. */
|
||||
const m1 = await roh("/workspace/assets/img/marke-spicy.webp", TREFF);
|
||||
const m2 = await roh("/workspace/assets/img/marke-husky.webp", TREFF);
|
||||
const m3 = await roh("/workspace/assets/img/marke-spicy.webp", HAUS);
|
||||
ok(m1.code === 200 && m1.text.length === m2.text.length,
|
||||
`in der Kopfleiste steht der Husky (${m1.text.length})`);
|
||||
ok(m1.text.length !== m3.text.length,
|
||||
`und nicht die Chili (${m1.text.length} ≠ ${m3.text.length})`);
|
||||
ok(/noindex/i.test(wand.kopf?.["x-robots-tag"] || ""),
|
||||
`der Kopf sagt noindex (${wand.kopf?.["x-robots-tag"]})`);
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
@@ -277,7 +289,7 @@ melde("");
|
||||
melde("=== 2. Sieben Kacheln — und keine achte ===");
|
||||
let namen = [];
|
||||
{
|
||||
const a = await roh("/workspace/api/ich", TREFF, { cookie: gast.keks });
|
||||
const a = await roh("/workspace/api/ich", CREW, { cookie: gast.keks });
|
||||
const j = JSON.parse(a.text);
|
||||
ok(Array.isArray(j.bereiche) && j.bereiche.length === 7,
|
||||
`die Community bekommt sieben Kacheln (${j.bereiche?.length})`);
|
||||
@@ -330,7 +342,7 @@ let namen = [];
|
||||
/* UND DIE MODERATIONSKACHEL IST BEI DER COMMUNITY WIRKLICH NICHT DA
|
||||
-- nicht nur "nicht in dieser Liste". Die Kachel ist ein Weg; wenn
|
||||
der Weg zu ist, muss auch die Tuer zu sein. */
|
||||
const d = JSON.parse((await roh("/workspace/api/ich", TREFF, { cookie: gast.keks })).text);
|
||||
const d = JSON.parse((await roh("/workspace/api/ich", CREW, { cookie: gast.keks })).text);
|
||||
const alleNamen = [...(d.bereiche || []), ...(d.bereiche_zusatz || [])].map((k) => k.name);
|
||||
ok(!alleNamen.includes(MOD), `die Community hat keine Moderationskachel (${alleNamen.length} Kacheln)`);
|
||||
}
|
||||
@@ -349,8 +361,8 @@ async function brett(b, host, keks) {
|
||||
{
|
||||
let gefunden = 0;
|
||||
for (const b of BRETTER) {
|
||||
const r = await brett(b, TREFF, gast.keks);
|
||||
if (r.code === 200 && r.titel.includes(`TREFF-PROBE-${b.toUpperCase()}`)) gefunden++;
|
||||
const r = await brett(b, CREW, gast.keks);
|
||||
if (r.code === 200 && r.titel.includes(`CREW-PROBE-${b.toUpperCase()}`)) gefunden++;
|
||||
}
|
||||
/* FUENF VON SIEBEN, UND DAS IST DAS ERGEBNIS -- kein Mangel.
|
||||
|
||||
@@ -368,8 +380,8 @@ async function brett(b, host, keks) {
|
||||
Bretter aus einem anderen Grund leer sind. */
|
||||
let vorher = 0;
|
||||
for (const b of treffModul.TREFF_FREIGABE_BRETTER) {
|
||||
const r = await brett(b, TREFF, gast.keks);
|
||||
if (r.titel.includes(`TREFF-PROBE-${b.toUpperCase()}`)) vorher++;
|
||||
const r = await brett(b, CREW, gast.keks);
|
||||
if (r.titel.includes(`CREW-PROBE-${b.toUpperCase()}`)) vorher++;
|
||||
}
|
||||
ok(vorher === 0, `ohne Freigabe sieht die Community Termine und Highlights nicht (${vorher})`);
|
||||
|
||||
@@ -378,7 +390,7 @@ async function brett(b, host, keks) {
|
||||
for (const b of treffModul.TREFF_FREIGABE_BRETTER) {
|
||||
const beiDogi2 = await roh(`/workspace/api/bereich/${b}`, HAUS, { cookie: kDogi });
|
||||
const eintrag = (JSON.parse(beiDogi2.text).eintraege || [])
|
||||
.find((e) => e.titel === `TREFF-PROBE-${b.toUpperCase()}`);
|
||||
.find((e) => e.titel === `CREW-PROBE-${b.toUpperCase()}`);
|
||||
if (!eintrag) continue;
|
||||
const a = await roh(`/workspace/api/treff/eintrag/${eintrag.id}/freigeben`, HAUS,
|
||||
{ cookie: kDogi }, {}, "PUT");
|
||||
@@ -389,8 +401,8 @@ async function brett(b, host, keks) {
|
||||
|
||||
let nachher = 0;
|
||||
for (const b of treffModul.TREFF_FREIGABE_BRETTER) {
|
||||
const r = await brett(b, TREFF, gast.keks);
|
||||
if (r.titel.includes(`TREFF-PROBE-${b.toUpperCase()}`)) nachher++;
|
||||
const r = await brett(b, CREW, gast.keks);
|
||||
if (r.titel.includes(`CREW-PROBE-${b.toUpperCase()}`)) nachher++;
|
||||
}
|
||||
ok(nachher === treffModul.TREFF_FREIGABE_BRETTER.length,
|
||||
`nach der Freigabe sieht sie beide (${nachher})`);
|
||||
@@ -409,7 +421,7 @@ async function brett(b, host, keks) {
|
||||
const fremde = ["ideen", "angebote", "rueckmeldung", "entwicklung", "talente", "agentur", "live", "content"];
|
||||
const durch = [];
|
||||
for (const b of fremde) {
|
||||
const r = await brett(b, TREFF, gast.keks);
|
||||
const r = await brett(b, CREW, gast.keks);
|
||||
if (r.code === 200) durch.push(b);
|
||||
}
|
||||
ok(durch.length === 0, `und kein einziges des Hauses${durch.length ? " -- DURCH: " + durch.join(", ") : ""}`);
|
||||
@@ -420,25 +432,25 @@ async function brett(b, host, keks) {
|
||||
bin ich am 10.09. schon einmal hereingefallen und haette fast ein
|
||||
Loch repariert, das keines war. Gezaehlt wird, was die Suche
|
||||
WIRKLICH gefunden hat. */
|
||||
const suche = await roh("/workspace/api/suche?q=HAUS-GEHEIM-4711", TREFF, { cookie: gast.keks });
|
||||
const suche = await roh("/workspace/api/suche?q=HAUS-GEHEIM-4711", CREW, { cookie: gast.keks });
|
||||
let treffer = -1;
|
||||
try { treffer = JSON.parse(suche.text).gesamt; } catch { treffer = -1; }
|
||||
ok(treffer === 0, `auch die Suche findet nichts aus dem Haus (${treffer} Treffer)`);
|
||||
}
|
||||
{
|
||||
/* UND DIE AGENTUR SIEHT DEN TREFF NICHT. Beide Richtungen, beide
|
||||
/* UND DIE AGENTUR SIEHT DEN CREW NICHT. Beide Richtungen, beide
|
||||
ueber die Adresszeile. */
|
||||
const durch = [];
|
||||
for (const b of BRETTER) {
|
||||
const r = await brett(b, HAUS, kCrea);
|
||||
if (r.code === 200 && r.titel.some((t) => t.startsWith("TREFF-PROBE"))) durch.push(b);
|
||||
if (r.code === 200 && r.titel.some((t) => t.startsWith("CREW-PROBE"))) durch.push(b);
|
||||
}
|
||||
ok(durch.length === 0, `eine Creatorin sieht kein Brett des Treffs${durch.length ? " -- DURCH: " + durch.join(", ") : ""}`);
|
||||
|
||||
const durchM = [];
|
||||
for (const b of BRETTER) {
|
||||
const r = await brett(b, HAUS, kMana);
|
||||
if (r.code === 200 && r.titel.some((t) => t.startsWith("TREFF-PROBE"))) durchM.push(b);
|
||||
if (r.code === 200 && r.titel.some((t) => t.startsWith("CREW-PROBE"))) durchM.push(b);
|
||||
}
|
||||
ok(durchM.length === 0, `eine Managerin auch nicht${durchM.length ? " -- DURCH: " + durchM.join(", ") : ""}`);
|
||||
|
||||
@@ -448,7 +460,7 @@ async function brett(b, host, keks) {
|
||||
let sieht = 0;
|
||||
for (const b of BRETTER) {
|
||||
const r = await brett(b, CREW, kModi);
|
||||
if (r.code === 200 && r.titel.includes(`TREFF-PROBE-${b.toUpperCase()}`)) sieht++;
|
||||
if (r.code === 200 && r.titel.includes(`CREW-PROBE-${b.toUpperCase()}`)) sieht++;
|
||||
}
|
||||
ok(sieht === 7, `ein Modi sieht alle sieben (${sieht}/7)`);
|
||||
}
|
||||
@@ -488,7 +500,7 @@ melde("=== 4. Nur die Seiten aus der Tafel ===");
|
||||
|
||||
const zu = [];
|
||||
for (const p of erlaubt) {
|
||||
const a = await roh(p, TREFF, { cookie: gast.keks });
|
||||
const a = await roh(p, CREW, { cookie: gast.keks });
|
||||
if (a.code !== 200) zu.push(`${p.split("/").pop()} (${a.code})`);
|
||||
}
|
||||
ok(zu.length === 0,
|
||||
@@ -496,7 +508,7 @@ melde("=== 4. Nur die Seiten aus der Tafel ===");
|
||||
|
||||
const durch = [];
|
||||
for (const p of verboten) {
|
||||
const a = await roh(p, TREFF, { cookie: gast.keks });
|
||||
const a = await roh(p, CREW, { cookie: gast.keks });
|
||||
if (a.code === 200) durch.push(p.split("/").pop());
|
||||
}
|
||||
ok(durch.length === 0,
|
||||
@@ -507,9 +519,9 @@ melde("=== 4. Nur die Seiten aus der Tafel ===");
|
||||
wirklich weh täte: Dort stehen die Namen derer, die gemeldet
|
||||
haben. Eine eigene Zeile dafür, damit der Befund einen Namen hat
|
||||
und nicht in "eine von 20" untergeht. */
|
||||
const mod = await roh("/workspace/treff-moderation.html", TREFF, { cookie: gast.keks });
|
||||
const mod = await roh("/workspace/treff-moderation.html", CREW, { cookie: gast.keks });
|
||||
ok(mod.code !== 200, `die Moderationsseite bleibt zu (${mod.code})`);
|
||||
const modApi = await roh("/workspace/api/treff/meldungen", TREFF, { cookie: gast.keks });
|
||||
const modApi = await roh("/workspace/api/treff/meldungen", CREW, { cookie: gast.keks });
|
||||
ok(modApi.code === 404, `und die Meldungen dahinter auch (${modApi.code})`);
|
||||
}
|
||||
|
||||
@@ -525,7 +537,7 @@ for (const [name, pfad] of [
|
||||
["Personen", "/workspace/api/personen"],
|
||||
["Gespräche", "/workspace/api/chat/raeume"],
|
||||
]) {
|
||||
const a = await roh(pfad, TREFF, { cookie: gast.keks });
|
||||
const a = await roh(pfad, CREW, { cookie: gast.keks });
|
||||
let leer = a.code !== 200;
|
||||
if (a.code === 200) {
|
||||
try {
|
||||
@@ -551,11 +563,11 @@ melde("=== 6. Schreiben ===");
|
||||
ist, liest und stimmt ab -- mehr nicht. Das wird von BEIDEN
|
||||
Seiten der Grenze gemessen, sonst beweist es nichts: Eine
|
||||
Schreibsperre, die immer sperrt, ist keine Stufe. */
|
||||
const neu = await roh("/workspace/api/bereich/treff", TREFF, { cookie: gast.keks },
|
||||
const neu = await roh("/workspace/api/bereich/treff", CREW, { cookie: gast.keks },
|
||||
{ art: "hallo", titel: "GAST-ZU-FRUEH-0001", text: "Hallo zusammen.", datum: jetzt.slice(0, 10) });
|
||||
ok(neu.code === 403, `wer neu ist, schreibt noch nicht (${neu.code})`);
|
||||
|
||||
const lage0 = JSON.parse((await roh("/workspace/api/treff/lage", TREFF, { cookie: gast.keks })).text);
|
||||
const lage0 = JSON.parse((await roh("/workspace/api/treff/lage", CREW, { cookie: gast.keks })).text);
|
||||
ok(lage0.stufe === "neu", `und die Lage sagt es ihm auch: ${lage0.stufe}`);
|
||||
ok(lage0.schreiben?.treff === false, "der Knopf waere aus");
|
||||
|
||||
@@ -567,7 +579,7 @@ melde("=== 6. Schreiben ===");
|
||||
.run(new Date(Date.now() - 8 * 86400000).toISOString(), idGast);
|
||||
dd.close();
|
||||
|
||||
const a = await roh("/workspace/api/bereich/treff", TREFF, { cookie: gast.keks },
|
||||
const a = await roh("/workspace/api/bereich/treff", CREW, { cookie: gast.keks },
|
||||
{ art: "hallo", titel: "GAST-SCHREIBT-8899", text: "Hallo zusammen.", datum: jetzt.slice(0, 10) });
|
||||
ok(a.code === 200 || a.code === 201, `nach acht Tagen schon (${a.code})`);
|
||||
|
||||
@@ -578,7 +590,7 @@ melde("=== 6. Schreiben ===");
|
||||
dd2.prepare("UPDATE personen SET erstellt = ? WHERE id = ?")
|
||||
.run(new Date(Date.now() - 6 * 86400000).toISOString(), idGast);
|
||||
dd2.close();
|
||||
const knapp = await roh("/workspace/api/bereich/treff", TREFF, { cookie: gast.keks },
|
||||
const knapp = await roh("/workspace/api/bereich/treff", CREW, { cookie: gast.keks },
|
||||
{ art: "hallo", titel: "GAST-ZU-FRUEH-0002", text: "Und?", datum: jetzt.slice(0, 10) });
|
||||
ok(knapp.code === 403, `sechs Tage reichen nicht (${knapp.code})`);
|
||||
const dd3 = new DatabaseSync(process.env.WORKSPACE_DB);
|
||||
@@ -587,7 +599,7 @@ melde("=== 6. Schreiben ===");
|
||||
dd3.close();
|
||||
|
||||
/* Und auf ein Brett des Teams kommt er auch als "Dabei" nicht. */
|
||||
const brettDesTeams = await roh("/workspace/api/bereich/anschlag", TREFF, { cookie: gast.keks },
|
||||
const brettDesTeams = await roh("/workspace/api/bereich/anschlag", CREW, { cookie: gast.keks },
|
||||
{ art: Object.keys(BEREICHE.anschlag.arten)[0], titel: "GAST-AM-ANSCHLAG-0001",
|
||||
text: "Ansage", datum: jetzt.slice(0, 10) });
|
||||
ok(brettDesTeams.code === 403, `aufs Anschlagbrett schreibt nur das Team (${brettDesTeams.code})`);
|
||||
@@ -601,7 +613,7 @@ melde("=== 6. Schreiben ===");
|
||||
}
|
||||
{
|
||||
/* UND NICHT IN EIN BRETT DES HAUSES. */
|
||||
const a = await roh("/workspace/api/bereich/ideen", TREFF, { cookie: gast.keks },
|
||||
const a = await roh("/workspace/api/bereich/ideen", CREW, { cookie: gast.keks },
|
||||
{ art: "content", titel: "GAST-IM-HAUS-0000", text: "", datum: jetzt.slice(0, 10) });
|
||||
ok(a.code !== 200 && a.code !== 201, `aber nicht in ein Brett des Hauses (${a.code})`);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user