NEO-44: Fix Bruno defeat spine for CI collection order.
Reset prototype target HP before cast chain, use slot 2 to avoid cooldown pollution, and assert +25 gig XP delta from baseline.pull/118/head
parent
9d9b53332f
commit
32fbcec766
|
|
@ -5,12 +5,13 @@ meta {
|
||||||
}
|
}
|
||||||
|
|
||||||
docs {
|
docs {
|
||||||
NEO-44 AC spine: pre-request runs four pulse casts on prototype_target_alpha (slot 1, 3.2s between).
|
NEO-44 AC spine: pre-request resets prototype target HP (NEO-83 fixture), then four pulse casts on alpha (slot 2 — avoids slot 0/1 cooldown from ability-cast and combat-targets folders).
|
||||||
Asserts breach xp === 25 and salvage/refine skill xp unchanged from pre-defeat baseline.
|
Asserts breach xp increased by 25 from pre-spine baseline; salvage/refine skill xp unchanged.
|
||||||
}
|
}
|
||||||
|
|
||||||
script:pre-request {
|
script:pre-request {
|
||||||
const axios = require("axios");
|
const axios = require("axios");
|
||||||
|
const { resetPrototypeCombatTargets } = require("./scripts/combat-targets-reset-helper.js");
|
||||||
const baseUrl = bru.getEnvVar("baseUrl") || bru.getVar("baseUrl");
|
const baseUrl = bru.getEnvVar("baseUrl") || bru.getVar("baseUrl");
|
||||||
const playerId = bru.getEnvVar("playerId") || bru.getVar("playerId");
|
const playerId = bru.getEnvVar("playerId") || bru.getVar("playerId");
|
||||||
const jsonHeaders = { headers: { "Content-Type": "application/json" } };
|
const jsonHeaders = { headers: { "Content-Type": "application/json" } };
|
||||||
|
|
@ -26,6 +27,18 @@ script:pre-request {
|
||||||
bru.setVar("neo44SalvageXpBefore", String(skillBefore.data.skills.find((x) => x.id === "salvage").xp));
|
bru.setVar("neo44SalvageXpBefore", String(skillBefore.data.skills.find((x) => x.id === "salvage").xp));
|
||||||
bru.setVar("neo44RefineXpBefore", String(skillBefore.data.skills.find((x) => x.id === "refine").xp));
|
bru.setVar("neo44RefineXpBefore", String(skillBefore.data.skills.find((x) => x.id === "refine").xp));
|
||||||
|
|
||||||
|
const gigBefore = await axios.get(
|
||||||
|
`${baseUrl}/game/players/${playerId}/gig-progression`,
|
||||||
|
jsonHeaders,
|
||||||
|
);
|
||||||
|
const breachBefore = gigBefore.data.gigs.find((x) => x.id === "breach");
|
||||||
|
bru.setVar(
|
||||||
|
"neo44BreachXpBefore",
|
||||||
|
String(breachBefore?.xp ?? 0),
|
||||||
|
);
|
||||||
|
|
||||||
|
await resetPrototypeCombatTargets(bru);
|
||||||
|
|
||||||
await axios.post(
|
await axios.post(
|
||||||
`${baseUrl}/game/players/${playerId}/move`,
|
`${baseUrl}/game/players/${playerId}/move`,
|
||||||
{ schemaVersion: 1, target: { x: -5, y: 0.9, z: -5 } },
|
{ schemaVersion: 1, target: { x: -5, y: 0.9, z: -5 } },
|
||||||
|
|
@ -36,7 +49,7 @@ script:pre-request {
|
||||||
`${baseUrl}/game/players/${playerId}/hotbar-loadout`,
|
`${baseUrl}/game/players/${playerId}/hotbar-loadout`,
|
||||||
{
|
{
|
||||||
schemaVersion: 1,
|
schemaVersion: 1,
|
||||||
slots: [{ slotIndex: 1, abilityId: "prototype_pulse" }],
|
slots: [{ slotIndex: 2, abilityId: "prototype_pulse" }],
|
||||||
},
|
},
|
||||||
jsonHeaders,
|
jsonHeaders,
|
||||||
);
|
);
|
||||||
|
|
@ -49,7 +62,7 @@ script:pre-request {
|
||||||
|
|
||||||
const castBody = {
|
const castBody = {
|
||||||
schemaVersion: 1,
|
schemaVersion: 1,
|
||||||
slotIndex: 1,
|
slotIndex: 2,
|
||||||
abilityId: "prototype_pulse",
|
abilityId: "prototype_pulse",
|
||||||
targetId: "prototype_target_alpha",
|
targetId: "prototype_target_alpha",
|
||||||
};
|
};
|
||||||
|
|
@ -87,13 +100,14 @@ script:post-response {
|
||||||
}
|
}
|
||||||
|
|
||||||
tests {
|
tests {
|
||||||
test("breach gig xp is 25 after alpha defeat", function () {
|
test("breach gig xp increases by 25 after alpha defeat", function () {
|
||||||
const body = res.getBody();
|
const body = res.getBody();
|
||||||
expect(res.getStatus()).to.equal(200);
|
expect(res.getStatus()).to.equal(200);
|
||||||
expect(body.mainGigId).to.equal("breach");
|
expect(body.mainGigId).to.equal("breach");
|
||||||
const breach = body.gigs.find((x) => x.id === "breach");
|
const breach = body.gigs.find((x) => x.id === "breach");
|
||||||
expect(breach).to.be.an("object");
|
expect(breach).to.be.an("object");
|
||||||
expect(breach.xp).to.equal(25);
|
const breachXpBefore = Number(bru.getVar("neo44BreachXpBefore"));
|
||||||
|
expect(breach.xp).to.equal(breachXpBefore + 25);
|
||||||
expect(breach.level).to.equal(1);
|
expect(breach.level).to.equal(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ meta {
|
||||||
|
|
||||||
docs {
|
docs {
|
||||||
NEO-44: read-only gig XP snapshot (combat defeat path — not E2.M2 skill XP).
|
NEO-44: read-only gig XP snapshot (combat defeat path — not E2.M2 skill XP).
|
||||||
Run order: Get gig progression → Get gig progression after defeat spine (depends on ability-cast defeat spine setup).
|
Run order: Get gig progression → Get gig progression after defeat spine (~13s pre-request).
|
||||||
Cross-link: bruno/neon-sprawl-server/ability-cast/
|
Defeat spine resets prototype target HP via __dev/combat-targets-fixture (same as combat-targets folder) and uses slot 2 to avoid cooldown pollution from earlier folders.
|
||||||
|
Cross-link: bruno/neon-sprawl-server/ability-cast/ and combat-targets/
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ Fourth accept should show **`targetDefeated": true`**. Fifth cast should deny **
|
||||||
curl -sS "${BASE}/game/players/${ID}/gig-progression"
|
curl -sS "${BASE}/game/players/${ID}/gig-progression"
|
||||||
```
|
```
|
||||||
|
|
||||||
Expect **`breach`** row **`xp` 25** (one defeat transition).
|
Expect **`breach`** row **`xp`** increased by **25** from the pre-spine baseline (Postgres retains prior totals across the full Bruno collection).
|
||||||
|
|
||||||
## 5. Verify skill XP unchanged
|
## 5. Verify skill XP unchanged
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue