Spicy Media sieht die Zahlen wieder -- und eine Creator-Liste enthaelt nur Creator
Zwei Dinge, das zweite habe ich nur gefunden, weil das erste eine
Pruefung rot gemacht hat.
1) DIE SPICY-SPERRE IST AUFGEHOBEN.
Filipe: "jetzt soll jede rolle diese kachel sehen. spicy, dogfather,
manager, scout und creator ... der manager scout dogfather oder spicy
koennen eintragen."
Kachel und Tuer hatte ich schon geoeffnet -- es reichte nicht. In
workspace-leistung.js sass eine dritte Schranke, die Spicy Media mit
404 abwies (Rest des Wunsches vom 07.09.). Folge: Die Seite lud, das
Auswahlfeld blieb leer, und es sah aus wie ein Fehler. Drei Schichten
mussten zustimmen, und die dritte stand woanders als die beiden
ersten.
Nebenwirkung, ausdruecklich: Damit stehen im Dashboard wieder
Diamanten, LIVE-Tage und Verweildauer je Creator-Karte. Das war der
zweite Teil der damaligen Entscheidung und faellt mit ihr weg.
Die Pruefung in pruef-spicy wurde nicht geloescht, sondern GEDREHT --
sie schlaegt jetzt an, wenn jemand die Sperre versehentlich wieder
einbaut.
2) EINE LISTE VON CREATOR-NUMMERN ENTHIELT KEINE CREATOR.
Beim Drehen fiel auf: Spicy Media bekam "Agentur, Filipe, Luna, Max,
NeuerCreator, NeuerManager" -- DogFather nur "Luna, NeuerCreator".
Ursache: `ohneVerborgene` schreibt ein `null` ("sieht alles") zu einer
echten Liste aus, sobald es etwas zu verbergen gibt -- zur Liste ALLER
Personen, weil sie nicht wissen kann, wovon "alles" gerade handelt.
Bei DogFather greift das nie (er verbirgt nichts vor sich selbst), bei
Spicy Media schon. Der Aufrufer baut daraus ein `IN (...)` OHNE
Rollenfilter, und damit wurden Manager und Scouts zu Creators.
Repariert an der Wurzel, nicht beim Aufrufer: Es gibt zehn Aufrufer,
und neun richtig plus einen vergessen sieht man nie. Der Name der
Funktion ist das Versprechen -- es wird jetzt dort eingeloest, wo der
Name steht.
AUFGEFALLEN IST ES, WEIL EINE PRUEFUNG DIE BEIDEN LISTEN VERGLICHEN
HAT, statt bei jeder einzeln "ist nicht leer" zu sagen. Genau dieser
Unterschied steht jetzt als eigene Aussage drin.
Gemessen: pruef-backstage-import 50 -> 63 (Manager und Spicy Media
kamen dazu, inklusive der Aussage, dass Spicy Media MEHR Creator sieht
als ein Manager), pruef-spicy 60 -> 62. Dazu gruen: betreuung,
manager-sicht, verborgen, haus-trennung, sicht, aufgabenbrett,
schulung, steckbrief, uebersicht, leistung, tiktok-datei,
fremde-sicht, personen-liste, creator-anlegen, ampel, tagesblick.
NICHT von mir: pruef-agentur meldet 31 Fehler (HTTP 503). Gegen den
Stand ohne meine Aenderungen nachgemessen -- dort dieselben 31. Ein
aelterer, eigener Befund, unangetastet.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -72,7 +72,7 @@ await starten();
|
||||
kind.kill();
|
||||
await new Promise((r) => setTimeout(r, 600));
|
||||
|
||||
let idNova, idKiro, idLumi, idSam;
|
||||
let idNova, idKiro, idLumi, idSam, idMira;
|
||||
{
|
||||
const d = new DatabaseSync(DB);
|
||||
const anlegen = (name, rolle, code, tiktok) => {
|
||||
@@ -85,6 +85,12 @@ let idNova, idKiro, idLumi, idSam;
|
||||
};
|
||||
anlegen("Filipe", "admin", "CODE-DOGI-0001");
|
||||
idSam = anlegen("Sam", "scout", "CODE-SAM-00001");
|
||||
/* Seit dem 11.09.2026 kommen auch Manager und Spicy Media auf diese
|
||||
Seite. Beide sehen andere Creator als ein Scout -- Spicy Media
|
||||
alle (siehtAlles), ein Manager nur seine eigenen und die seiner
|
||||
Scouts. Ohne beide im Bestand waere das ungeprueft. */
|
||||
idMira = anlegen("Mira", "manager", "CODE-MIRA-0001");
|
||||
anlegen("Sasha", "spicy", "CODE-SASHA-0001");
|
||||
/* Nova hat ein Handle, Kiro NICHT -- er wird ueber den Namen
|
||||
gefunden. Lumi hat ein Handle mit anderer Schreibweise als in der
|
||||
Tabelle: Genau daran zeigt sich, ob normalisiert wird. */
|
||||
@@ -98,6 +104,11 @@ let idNova, idKiro, idLumi, idSam;
|
||||
einem Zufall. */
|
||||
d.prepare("INSERT INTO betreuung (creator_id, betreuer_id, seit) VALUES (?,?,?)")
|
||||
.run(idNova, idSam, jetzt);
|
||||
/* Und Sam gehoert zu Mira -- damit der Manager ueber seinen Scout
|
||||
an Nova kommt. Sonst saehe er eine leere Seite, und die Pruefung
|
||||
unten wuerde messen, dass nichts da ist, statt dass es stimmt. */
|
||||
d.prepare("INSERT INTO scout_zuteilung (scout_id, manager_id, seit) VALUES (?,?,?)")
|
||||
.run(idSam, idMira, jetzt);
|
||||
d.close();
|
||||
}
|
||||
await starten();
|
||||
@@ -275,6 +286,21 @@ console.log("\n=== Gegenproben ===");
|
||||
ok(status === 200, `heute als Tag geht dagegen durch (HTTP ${status})`);
|
||||
}
|
||||
|
||||
/* WER SIEHT WEN -- direkt an der Schnittstelle gemessen, bevor der
|
||||
Browser ins Spiel kommt. Wird der Auswahlliste auf der Seite etwas
|
||||
fehlen, steht hier, ob es schon hier fehlte. */
|
||||
for (const [rolle, code, wer] of [
|
||||
["manager", "CODE-MIRA-0001", "über seinen Scout"],
|
||||
["spicy", "CODE-SASHA-0001", "alle"],
|
||||
]) {
|
||||
const keks = await anmelden(rolle, code);
|
||||
const a = await fetch(BASIS + "/workspace/api/leistung", { headers: { Cookie: keks } });
|
||||
const d = await a.json().catch(() => ({}));
|
||||
const namen = (d.creator || []).map((c) => c.name).join(", ");
|
||||
ok(a.status === 200 && namen.length > 0,
|
||||
`${rolle} bekommt Creator (${wer}): ${namen || `LEER, HTTP ${a.status}`}`);
|
||||
}
|
||||
|
||||
/* Vorbedingung fuer die Gegenprobe weiter unten: Sam MUSS Nova sehen.
|
||||
Sonst waere "der Scout sieht den Backstage-Satz nicht" nur die
|
||||
Auskunft, dass seine Seite leer ist. */
|
||||
@@ -444,6 +470,39 @@ console.log("\n=== Die Seite ===");
|
||||
ok(scoutBild.aendern > 0,
|
||||
`er kann einen Tag eintragen (${scoutBild.aendern} Knöpfe in der Liste)`);
|
||||
|
||||
/* MANAGER UND SPICY MEDIA -- die beiden, die ich beinahe nur
|
||||
mitgedacht haette. Sie gehoeren zur Leitung, also sollten sie
|
||||
alles koennen; "sollte" ist aber kein Messwert. Sie sehen
|
||||
ausserdem UNTERSCHIEDLICH viele Creator: Spicy Media alle
|
||||
(siehtAlles), ein Manager nur seine eigenen und die seiner
|
||||
Scouts. Genau das wird hier verglichen -- eine Pruefung, die bei
|
||||
beiden nur "sieht etwas" sagt, haette den Unterschied nie
|
||||
bemerkt. */
|
||||
for (const [rolle, code, mindestens] of [
|
||||
["manager", "CODE-MIRA-0001", 1],
|
||||
["spicy", "CODE-SASHA-0001", 3],
|
||||
]) {
|
||||
const b = await rollenBild(rolle, code);
|
||||
ok(b.kachel === true && /leistung\.html$/.test(b.weg),
|
||||
`${rolle}: findet die Kachel und kommt auf die Seite`);
|
||||
ok(b.fehler === "", `${rolle}: kein Skriptfehler (${b.fehler || "keiner"})`);
|
||||
ok(b.netz === false && b.tt === false && b.import === false && b.ziele === false,
|
||||
`${rolle}: alle vier Wege sind da -- auch die Backstage-Tabelle`);
|
||||
ok(b.sNetz === false && b.sTt === false,
|
||||
`${rolle}: und beide Erklärungen dazu`);
|
||||
ok(b.wahl >= mindestens,
|
||||
`${rolle}: sieht ${b.wahl} Creator zur Auswahl (mindestens ${mindestens})`);
|
||||
}
|
||||
/* Und der Unterschied selbst, als eigene Aussage: Spicy Media sieht
|
||||
MEHR als der Manager. Waeren beide gleich, waere oben alles gruen
|
||||
und die Haustrennung trotzdem kaputt. */
|
||||
{
|
||||
const m = await rollenBild("manager", "CODE-MIRA-0001");
|
||||
const sp = await rollenBild("spicy", "CODE-SASHA-0001");
|
||||
ok(sp.wahl > m.wahl,
|
||||
`Spicy Media sieht mehr Creator als der Manager (${sp.wahl} zu ${m.wahl})`);
|
||||
}
|
||||
|
||||
const creatorBild = await rollenBild("creator", "CODE-NOVA-0001");
|
||||
ok(creatorBild.kachel === true && /leistung\.html$/.test(creatorBild.weg),
|
||||
`der Creator findet die Kachel und kommt auf die Seite (${creatorBild.weg})`);
|
||||
|
||||
Reference in New Issue
Block a user