Metric Sets — QA Plan
1. Sets
| # | Scenario | Expected |
|---|---|---|
| 1.1 | Create org-owned set with 3 definitions | 201; junction has 3 rows |
| 1.2 | Create with zero owner FKs | 400 — exactly one required |
| 1.3 | Create with two owner FKs | 400 |
| 1.4 | Create org-owned for another org id | 403 |
| 1.5 | Create with an unknown definition id | 400 |
| 1.6 | Create as a member role | 403 |
2. Recording values
| # | Scenario | Expected |
|---|---|---|
| 2.1 | Coach records 145kg back squat 1RM for member | 201 |
| 2.2 | Record without recordedAt | Defaults to now |
| 2.3 | Record value 0 | DTO @Min(0) allows; verify product intent |
| 2.4 | Record for a user not in this org | Allowed today (values are user-scoped, not membership-scoped) — flag as security note |
3. Resolution
| # | Scenario | Expected |
|---|---|---|
| 3.1 | Resolve set for member with one value per def | Each entry returns latest |
| 3.2 | Resolve set for member with no values | Each entry returns null value |
| 3.3 | Member has stale value + a newer one | Newer one returned (index supports ORDER BY recorded_at DESC LIMIT 1) |
4. Definition catalogue
| # | Scenario | Expected |
|---|---|---|
| 4.1 | List definitions returns global catalogue | All seeded rows |
| 4.2 | Try to delete a definition still referenced | Restricted by FK |
5. Smoke
- Workout builder resolves a member’s 1RM correctly via the bound set.
- CHECK constraint rejects manual 2-owner row inserts.