Hustler-Stufe: Keller und Bot-Leads erst ab Stufe 6 (Seite, Keller-Etage, Spur-Links, Abruf von /botleads)
WorkersPage: ?tab=botleads (auch mit &bot=) und unbekannte Werte fallen unterhalb von Stufe 6 auf das Hochhaus zurück, BotLeadList wird nie eingehängt; die Weiterleitungen /leads und /workers bleiben. HochhausWelt: die Keller-Etage ist dann ein Knopf wie jede andere (zoomt heran) statt eines Links; Arne bleibt klickbar, die Zahl Bot-Leads in der Kopfzeile bleibt Text. HustlerDialog: Spur-Links in den Keller bleiben Text. workersApi.botleads ruft unterhalb von Stufe 6 nichts ab (kein JWT, keine Anfrage), sondern liefert 404 mit deutschem Satz. Bestehende Keller-Tests laufen ausdrücklich auf Stufe 6; neue Tests prüfen Stufe 1, 3 und 5 (gesperrt) und 6 bis 9 (offen). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5e48fbf264
commit
32f4f1d941
10 files changed
+262
-21
No files matched your search
@@ -3,7 +3,7 @@ import assert from 'node:assert/strict'
|
||||
import { loadModule } from './load.mjs'
|
||||
|
||||
// API-Client der Hustler-Seite: URLs, Methoden, Header, deutsche Fehlertexte, JWT-Wiederholung, Pult-Prüfungen
|
||||
const { createWorkersApi, REQUEST_TIMEOUT_MS, AUTH_COOLDOWN_MS, ACTION_TIMEOUT_MS, SLOW_PULT_ACTIONS, UNCERTAIN_STATUS } = await loadModule('src/lib/workersApi.js')
|
||||
const { createWorkersApi, REQUEST_TIMEOUT_MS, AUTH_COOLDOWN_MS, ACTION_TIMEOUT_MS, SLOW_PULT_ACTIONS, UNCERTAIN_STATUS, KELLER_GESPERRT_TEXT } = await loadModule('src/lib/workersApi.js')
|
||||
const { actionErrorText, UNCERTAIN_TEXT } = await loadModule('src/lib/workersPult.js')
|
||||
const { createJwtCache } = await loadModule('src/lib/serverpulsAuth.js')
|
||||
|
||||
@@ -36,7 +36,7 @@ const okReplies = (n) => Array.from({ length: n }, () => ({ status: 200, body: {
|
||||
|
||||
test('URLs, Methoden, Header, Body', async () => {
|
||||
const f = fakeFetch(okReplies(12))
|
||||
const api = createWorkersApi({ getJwt, fetchImpl: f })
|
||||
const api = createWorkersApi({ getJwt, fetchImpl: f, stufe: 6 }) // Stufe 6: der Keller (botleads) ist offen; darunter ruft der Client /botleads nie ab (hustlerStufe.test.mjs)
|
||||
await api.state()
|
||||
await api.events('2026-10-17T20:00:00.000+00:00')
|
||||
await api.events(null, 500)
|
||||
@@ -706,3 +706,27 @@ test('createJWT: Übertragungsfehler beim frischen JWT nach einer 401 sperrt nic
|
||||
assert.deepEqual(await api.state(), { ok: 1 }) // 401 mit dem gespeicherten JWT, die Wiederholung mit frischem JWT darf wieder erfolgen und klappt
|
||||
assert.deepEqual(mints, [false, true, false, true]) // keine Sperre: weder für frische JWTs noch für createJWT überhaupt
|
||||
})
|
||||
|
||||
// ---------- Stufen-Sperre (hustlerStufe.js): kein Abruf des Kellers unterhalb von Stufe 6 ----------
|
||||
|
||||
|
||||
test('API: auf Stufe 3 geht kein Abruf von /api/workers/botleads hinaus (auch kein JWT), auf Stufe 6 wie bisher', async () => {
|
||||
for (const s of [1, 3, 5]) {
|
||||
const f = fakeFetch(okReplies(8)); let jwtGeholt = 0
|
||||
const api = createWorkersApi({ getJwt: async () => { jwtGeholt += 1; return 'jwt' }, fetchImpl: f, stufe: s })
|
||||
for (const params of [undefined, {}, { room: 'handwerk' }, { q: 'Bäcker', page: 2 }, { id: 'abc' }]) {
|
||||
await assert.rejects(api.botleads(params), (err) => err.status === 404 && err.message === KELLER_GESPERRT_TEXT, `Stufe ${s}`)
|
||||
}
|
||||
assert.equal(f.calls.length, 0, `Stufe ${s}`); assert.equal(jwtGeholt, 0, `Stufe ${s}`)
|
||||
// die übrigen Abrufe der Stufe 3 laufen
|
||||
await api.state(); await api.pult(); await api.pultAction('p1', 'claim'); await api.prospect('p1')
|
||||
assert.deepEqual(f.calls.map((c) => c.url), ['/api/workers/state', '/api/workers/pult?status=offen', '/api/workers/pult/p1/claim', '/api/workers/prospect/p1'])
|
||||
}
|
||||
for (const s of [6, 9]) {
|
||||
const f = fakeFetch(okReplies(1))
|
||||
const api = createWorkersApi({ getJwt: async () => 'jwt', fetchImpl: f, stufe: s })
|
||||
await api.botleads({ room: 'handwerk', page: 2 })
|
||||
assert.deepEqual(f.calls.map((c) => [c.init.method || 'GET', c.url]), [['GET', '/api/workers/botleads?room=handwerk&page=2']])
|
||||
}
|
||||
assert.match(KELLER_GESPERRT_TEXT, /Keller/)
|
||||
})
|
||||
Reference in new issue
Block a user