30 lines
1.3 KiB
Markdown
30 lines
1.3 KiB
Markdown
# Manual QA — NEO-38 (skill XP grant)
|
|
|
|
Reference: [implementation plan](../plans/NEO-38-implementation-plan.md), [server README](../../server/README.md#skill-progression-grant-neo-38).
|
|
|
|
## Preconditions
|
|
|
|
- Run `NeonSprawl.Server` from `server/NeonSprawl.Server` (`dotnet run`; default `http://localhost:5253`).
|
|
- Use a **known** player id (e.g. `dev-local-1`, present in position state).
|
|
|
|
## Happy path — grant + read back
|
|
|
|
1. `POST /game/players/dev-local-1/skill-progression` with JSON:
|
|
- `schemaVersion` **1**
|
|
- `skillId` **`salvage`**
|
|
- `amount` **10**
|
|
- `sourceKind` **`activity`**
|
|
2. Expect **HTTP 200**, body `granted` **true**, `progression.skills` contains `salvage` with increased `xp` vs a prior `GET`.
|
|
3. `GET /game/players/dev-local-1/skill-progression` — **`salvage.xp`** matches the POST `progression`.
|
|
|
|
## Deny — source not allowed
|
|
|
|
1. `POST` same path with `skillId` **`salvage`**, `sourceKind` **`trainer`** (not in prototype catalog for salvage).
|
|
2. Expect **HTTP 200**, `granted` **false**, **`reasonCode`** **`source_kind_not_allowed`**, and `progression` still present.
|
|
|
|
## Bruno
|
|
|
|
- Folder: `bruno/neon-sprawl-server/skill-progression/`
|
|
- `Post skill progression grant.bru` — happy grant.
|
|
- `Get skill progression.bru` — confirms read model after grants.
|