diff --git a/bruno/neon-sprawl-server/perk-state/Post branch select deny level too low.bru b/bruno/neon-sprawl-server/perk-state/Post branch select deny level too low.bru index 7a80656..1ce851f 100644 --- a/bruno/neon-sprawl-server/perk-state/Post branch select deny level too low.bru +++ b/bruno/neon-sprawl-server/perk-state/Post branch select deny level too low.bru @@ -6,11 +6,38 @@ meta { docs { NEO-48: salvage tier 1 requires skill level 2. On a fresh server (no prior salvage XP), expects selected false + level_too_low. - Restart server or use a fresh dev DB to hit this deny; skip if salvage already leveled from other Bruno runs. + Skipped automatically when dev-local-1 already has salvage level 2+ or a tier-1 branch pick (shared state after other Bruno requests). +} + +script:pre-request { + const axios = require("axios"); + const baseUrl = bru.getEnvVar("baseUrl") || bru.getVar("baseUrl"); + const playerId = bru.getEnvVar("playerId") || bru.getVar("playerId"); + let salvageLevel = 1; + let hasTier1Pick = false; + try { + const progression = await axios.get( + `${baseUrl}/game/players/${playerId}/skill-progression`, + ); + const salvage = progression.data?.skills?.find((s) => s.id === "salvage"); + salvageLevel = salvage?.level ?? 1; + const perkState = await axios.get(`${baseUrl}/game/players/${playerId}/perk-state`); + const salvageTrack = perkState.data?.branchPicks?.find((t) => t.skillId === "salvage"); + hasTier1Pick = Boolean( + salvageTrack?.picks?.some((p) => p.tierIndex === 1), + ); + } catch (_) { + /* server down or player missing — let the request surface the error */ + } + if (salvageLevel >= 2 || hasTier1Pick) { + bru.skipRequest( + "dev-local-1 already progressed (salvage level 2+ or tier-1 pick); restart server for strict level_too_low smoke", + ); + } } post { - url: {{baseUrl}}/game/players/dev-local-1/perk-state + url: {{baseUrl}}/game/players/{{playerId}}/perk-state body: json auth: none } @@ -29,11 +56,9 @@ tests { expect(res.getStatus()).to.equal(200); const body = res.getBody(); expect(body.schemaVersion).to.equal(1); - if (body.selected === false && body.reasonCode === "level_too_low") { - expect(body.unlockedEvents).to.be.an("array").that.is.empty; - expect(body.perkState.branchPicks).to.be.an("array"); - return; - } - expect(body.selected).to.equal(true, "salvage already at level 2+ — restart server for deny smoke"); + expect(body.selected).to.equal(false); + expect(body.reasonCode).to.equal("level_too_low"); + expect(body.unlockedEvents).to.be.an("array").that.is.empty; + expect(body.perkState.branchPicks).to.be.an("array"); }); } diff --git a/bruno/neon-sprawl-server/perk-state/folder.bru b/bruno/neon-sprawl-server/perk-state/folder.bru index 3a755c2..9d97eb3 100644 --- a/bruno/neon-sprawl-server/perk-state/folder.bru +++ b/bruno/neon-sprawl-server/perk-state/folder.bru @@ -4,6 +4,6 @@ meta { docs { NEO-48 perk-state HTTP smoke. Run folder in seq order for full coverage. - Post branch select deny level too low: passes if salvage is still level 1; if dev-local-1 already has salvage XP from other runs, restart the server (or reset DB in Postgres mode) before expecting level_too_low. + Post branch select deny level too low: skipped via pre-request when dev-local-1 already has salvage level 2+ or a tier-1 branch pick (normal after other requests in a full collection run). Post branch select deny branch already chosen: self-contained (pre-request grant + first pick); safe to re-run. }