NEO-31: plan Bruno requests for ability-cast API parity
parent
e9fcf46b02
commit
e0e9f90329
|
|
@ -47,7 +47,9 @@
|
|||
|
||||
4. **Tests** — **Server:** xUnit suite posting valid/invalid bodies (unknown player, empty slot, ability mismatch). **Client:** GdUnit suite with mock HTTP verifying URL/method/body for bound vs unbound paths and correct target id propagation from a stub target state provider.
|
||||
|
||||
5. **Docs / backlog hygiene (light)** — After behavior exists, optionally refresh [E1_M4_AbilityInputScaffold.md](../decomposition/modules/E1_M4_AbilityInputScaffold.md) implementation snapshot + Linear table row for E1M4-02 (still optional if timeboxed).
|
||||
5. **Bruno (`bruno/neon-sprawl-server/`)** — Add `.bru` requests mirroring the existing **hotbar-loadout** pattern (`{{baseUrl}}`, `dev-local-1`): at minimum **happy-path cast POST**, **bad schema / missing player**, and **loadout mismatch or empty slot** so manual API checks and collection runs stay aligned with server xUnit coverage.
|
||||
|
||||
6. **Docs / backlog hygiene (light)** — After behavior exists, optionally refresh [E1_M4_AbilityInputScaffold.md](../decomposition/modules/E1_M4_AbilityInputScaffold.md) implementation snapshot + Linear table row for E1M4-02 (still optional if timeboxed).
|
||||
|
||||
## Files to add
|
||||
|
||||
|
|
@ -59,6 +61,10 @@
|
|||
| `client/scripts/ability_cast_client.gd` | Thin HTTP client for cast POST (injection pattern matches hotbar client). |
|
||||
| `client/test/ability_cast_client_test.gd` | Mock-transport tests for payload formation and unbound-slot no-op. |
|
||||
| `docs/manual-qa/NEO-31.md` | Manual QA checklist (slot keys, bound vs unbound, target id from HUD lock). |
|
||||
| `bruno/neon-sprawl-server/ability-cast-post.bru` | Happy-path `POST …/ability-cast` after loadout binds slot 0 (same workflow as `hotbar-loadout-post.bru`). |
|
||||
| `bruno/neon-sprawl-server/ability-cast-post-bad-schema.bru` | Wrong/missing `schemaVersion` or malformed body; expect deny + stable shape. |
|
||||
| `bruno/neon-sprawl-server/ability-cast-post-missing-player.bru` | Unknown `playerId` path segment; parity with `hotbar-loadout-get-missing-player.bru`. |
|
||||
| `bruno/neon-sprawl-server/ability-cast-post-loadout-mismatch.bru` | Ability/slot does not match persisted hotbar (or unbound slot); documents deny `reasonCode`. |
|
||||
|
||||
## Files to modify
|
||||
|
||||
|
|
@ -76,6 +82,7 @@
|
|||
| `AbilityCastApiTests.cs` | POST success when loadout matches; denies with stable `reasonCode` for bad player, wrong slot/ability, empty binding. |
|
||||
| `ability_cast_client_test.gd` | Client builds JSON with `targetId` from injected target state; unbound slot does not call `request`; bound slot emits exactly one POST body. |
|
||||
| Manual `docs/manual-qa/NEO-31.md` | Human verification of keys, logs, and HUD target id alignment. |
|
||||
| Bruno `ability-cast-*.bru` | Embedded `tests { … }` blocks assert status + JSON fields for quick regression (same style as `hotbar-loadout-post.bru`). |
|
||||
|
||||
## Open questions / risks
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue