Skip to Content
Living documentation — last reviewed 2026-05-28
FeaturesBody MetricsBody Metrics — QA Plan

Body Metrics — QA Plan

1. Create

#ScenarioExpected
1.1Member self-reports weight 78.5 kg today201; row inserted with recorded_by=user.id
1.2Coach records body fat on member201; same row; recorded_by=coach.user.id
1.3Same member, same date, same metric twiceSecond returns conflict error from unique index
1.4Custom metric with label “forearm”201; subsequent forearm on same day collides
1.5Invalid unit for the type (e.g. kg for body_fat)DTO rejects (or service-layer) — 400
1.6Future recorded_atAllowed today; flag for product if undesired

2. List + summary

#ScenarioExpected
2.1List with type=weight and from/toReturns rows in range, newest first
2.2Summary returns latest + previous per (type, label) bucketVerify delta value
2.3Soft-deleted rows excludedConfirm with deleted row in fixture

3. Update / delete

#ScenarioExpected
3.1Member updates own row200
3.2Member updates another member’s row403
3.3Soft deletedeleted_at set; subsequent list excludes

4. Settings

#ScenarioExpected
4.1First-time settings PUT creates a row200
4.2Second PUT updates the same row200; no duplicate
4.3Disable body_fat for a memberUI hides the metric in self-report; data still readable

5. Permissions

#ScenarioExpected
5.1Member of org A queries org B membership403
5.2Coach with member role tries staff routes403
5.3Owner can do everything200

6. Smoke

  • Self-report on mobile → entry appears in coach’s member view.
  • Trend chart renders with at least 2 data points (verify after seeding).
  • Custom-label dedup works.