Traceability Matrix

Each requirement of qa-practice-api, the designed test cases that check it, and their results in CI run #110 (schedule, 2026-10-19, commit d8355c4). Requirements and cases come from the test plan, risks from the test strategy. Back to the reports. Generated 2026-10-19.

Requirements passing
18 / 18
Cases passed
119 / 119
Cases failed
0
Cases with no result
0

Requirements

A requirement passes only when every one of its cases passed. One failed case makes it failing; a case with no result makes it incomplete.

RequirementWhat it saysRisksCasesStatus
REQ-01A product's price is a JSON number ≥ 0, on create and on updateR-05
TC-EP-01 passedTC-EP-02 passedTC-EP-03 passedTC-EP-04 passedTC-EP-05 passedTC-EP-06 passedTC-BVA-01 passedTC-BVA-02 passedTC-BVA-03 passed
Passing
REQ-02A product's stock is a whole JSON number ≥ 0; left out on create, it is 0R-05
TC-EP-07 passedTC-EP-08 passedTC-EP-09 passedTC-EP-10 passedTC-BVA-04 passedTC-BVA-05 passedTC-BVA-06 passed
Passing
REQ-03Each order line has a product_id and a whole-number quantity ≥ 1; items is a non-empty arrayR-04, R-11
TC-EP-11 passedTC-EP-12 passedTC-EP-13 passedTC-EP-14 passedTC-EP-15 passedTC-EP-16 passedTC-BVA-07 passedTC-BVA-08 passedTC-DT-10 passed
Passing
REQ-04An order is accepted only if every product exists and has stock for its quantity summed across lines. If accepted, stock goes down by that amount; if not, no stock changesR-04
TC-BVA-09 passedTC-BVA-10 passedTC-BVA-11 passedTC-BVA-12 passedTC-DT-11 passedTC-DT-12 passedTC-DT-14 passed
Passing
REQ-05An order's total is the sum of price × quantity, rounded to centsR-12
TC-DT-13 passed
Passing
REQ-06Order status follows the order lifecycle (pending → processing or cancelled, processing → shipped or cancelled, shipped → delivered). Any other move returns 409 and leaves the status as it wasR-01
TC-ST-01 passedTC-ST-02 passedTC-ST-03 passedTC-ST-04 passedTC-ST-05 passedTC-ST-06 passedTC-ST-07 passedTC-ST-08 passedTC-ST-09 passedTC-ST-10 passedTC-ST-11 passedTC-ST-12 passedTC-ST-13 passedTC-ST-14 passedTC-ST-15 passedTC-ST-16 passedTC-ST-17 passedTC-ST-18 passedTC-ST-19 passedTC-ST-20 passedTC-ST-21 passedTC-ST-22 passedTC-ST-23 passedTC-ST-24 passedTC-ST-25 passed
Passing
REQ-07Cancelling an order returns its stock to the products that still existR-01
TC-ST-26 passedTC-ST-27 passedTC-ST-28 passedTC-ST-29 passed
Passing
REQ-08Lists use page ≥ 1 and limit 1–50; values outside are clamped to the nearest edge, a missing or non-numeric value means page 1 or limit 10, and a page past the end is emptyR-17
TC-BVA-13 passedTC-BVA-14 passedTC-BVA-15 passedTC-BVA-16 passedTC-BVA-17 passedTC-BVA-18 passedTC-BVA-19 passedTC-BVA-20 passedTC-BVA-21 passedTC-BVA-22 passed
Passing
REQ-09PUT /users/:id changes only the caller's own account (admins: any). Another account gets 403 before its existence is checked; name and email must be non-empty strings; an email used by another account gets 409; a deleted or unknown account gets 404 to an adminR-02
TC-DT-01 passedTC-DT-02 passedTC-DT-03 passedTC-DT-04 passedTC-DT-05 passedTC-DT-06 passedTC-DT-07 passedTC-DT-08 passedTC-DT-15 passedTC-DT-16 passedTC-DT-17 passed
Passing
REQ-10Every error response is JSON { error }, including for a malformed request bodyR-11
TC-EP-17 passed
Passing
REQ-11Sign-up and sign-in fields must be non-empty strings; anything else gets 400, not 500R-11
TC-EP-18 passedTC-EP-19 passedTC-EP-20 passed
Passing
REQ-12Placing an order needs a signed-in userR-06
TC-DT-09 passed
Passing
REQ-13Only an admin creates, changes or deletes products; a customer gets 403 and nothing changesR-03
TC-AC-01 passedTC-AC-02 passedTC-AC-03 passedTC-AC-04 passed
Passing
REQ-14A customer reads, lists and cancels only their own orders; another customer's order answers 404, as if it didn't exist. An admin reads and lists every orderR-08
TC-AC-05 passedTC-AC-06 passedTC-AC-07 passedTC-AC-08 passed
Passing
REQ-15Only an admin moves an order to processing, shipped or delivered; a customer asking for any of these gets 403. A customer may cancel their own order (the lifecycle rules of REQ-06 still apply)R-07
TC-AC-09 passedTC-AC-10 passedTC-AC-11 passedTC-AC-12 passed
Passing
REQ-16Only an admin lists accounts or reads or deletes another user's account; a customer gets 403 for any account but their ownR-19
TC-AC-13 passedTC-AC-14 passedTC-AC-15 passedTC-AC-16 passed
Passing
REQ-17A token works only while its account exists and only if this server signed it; the role comes from the account, never from the requestR-06, R-20, R-21
TC-AC-17 passedTC-AC-18 passedTC-AC-19 passedTC-AC-20 passedTC-AC-21 passedTC-AC-22 passed
Passing
REQ-18Sign-in allows 5 attempts per email and client in 15 minutes without a success. Further attempts get 429 with Retry-After, even with the right password, until the window ends; a success clears the count; other emails are unaffected; concurrent attempts are counted as they startR-09
TC-BVA-23 passedTC-BVA-24 passedTC-BVA-25 passedTC-DT-18 passedTC-DT-19 passedTC-DT-20 passedTC-DT-21 passedTC-DT-22 passedTC-DT-23 passed
Passing

All 119 cases

Failure details are in the qa-practice-api report. 172 other tests in the suite are route-level checks written before the plan and aren't tied to a requirement.

CaseTechniqueRequirementInputExpectedResult
TC-EP-01Equivalence partitioningREQ-01price 12.5201, price 12.5passed
TC-EP-02Equivalence partitioningREQ-01price "12.5"400passed
TC-EP-03Equivalence partitioningREQ-01price ""400passed
TC-EP-04Equivalence partitioningREQ-01price true400passed
TC-EP-05Equivalence partitioningREQ-01price "abc"400passed
TC-EP-06Equivalence partitioningREQ-01price [5]400passed
TC-EP-07Equivalence partitioningREQ-02no stock201, stock 0passed
TC-EP-08Equivalence partitioningREQ-02stock ""400passed
TC-EP-09Equivalence partitioningREQ-02stock "5"400passed
TC-EP-10Equivalence partitioningREQ-02stock 2.5400passed
TC-EP-11Equivalence partitioningREQ-03quantity 2 (stock 10)201, stock 8passed
TC-EP-12Equivalence partitioningREQ-03quantity "2"400, stock unchangedpassed
TC-EP-13Equivalence partitioningREQ-03quantity 1.5400, stock unchangedpassed
TC-EP-14Equivalence partitioningREQ-03line with no quantity400, stock unchangedpassed
TC-EP-15Equivalence partitioningREQ-03items: [null]400 JSON, stock unchangedpassed
TC-EP-16Equivalence partitioningREQ-03items: "two widgets"400passed
TC-EP-17Equivalence partitioningREQ-10body {"name": "Widget",400, JSON { error }passed
TC-EP-18Equivalence partitioningREQ-11sign-up with password 12345 (a number)400passed
TC-EP-19Equivalence partitioningREQ-11sign-up with email { "$ne": "" }400passed
TC-EP-20Equivalence partitioningREQ-11sign-in with password 12345 (a number)400passed
TC-BVA-01Boundary value analysisREQ-01price −0.01400passed
TC-BVA-02Boundary value analysisREQ-01price 0201passed
TC-BVA-03Boundary value analysisREQ-01price 0.01201passed
TC-BVA-04Boundary value analysisREQ-02stock −1400passed
TC-BVA-05Boundary value analysisREQ-02stock 0201passed
TC-BVA-06Boundary value analysisREQ-02stock 1201passed
TC-BVA-07Boundary value analysisREQ-03quantity 0, stock 5400, stock 5passed
TC-BVA-08Boundary value analysisREQ-03quantity 1, stock 5201, stock 4passed
TC-BVA-09Boundary value analysisREQ-04quantity 5, stock 5201, stock 0passed
TC-BVA-10Boundary value analysisREQ-04quantity 6, stock 5400, stock 5passed
TC-BVA-11Boundary value analysisREQ-04two lines, 2 + 3, stock 5201, stock 0passed
TC-BVA-12Boundary value analysisREQ-04two lines, 3 + 3, stock 5400, stock 5passed
TC-BVA-13Boundary value analysisREQ-08limit=-1limit 1passed
TC-BVA-14Boundary value analysisREQ-08limit=0limit 1passed
TC-BVA-15Boundary value analysisREQ-08limit=1limit 1passed
TC-BVA-16Boundary value analysisREQ-08limit=50limit 50passed
TC-BVA-17Boundary value analysisREQ-08limit=51limit 50passed
TC-BVA-18Boundary value analysisREQ-08no limitlimit 10passed
TC-BVA-19Boundary value analysisREQ-08limit=abclimit 10passed
TC-BVA-20Boundary value analysisREQ-08page=0, 3 items, limit 2page 1, 2 itemspassed
TC-BVA-21Boundary value analysisREQ-08page=2 (last)1 item, pages 2passed
TC-BVA-22Boundary value analysisREQ-08page=3 (past the end)0 items, pages 2passed
TC-BVA-23Boundary value analysisREQ-185th wrong password401passed
TC-BVA-24Boundary value analysisREQ-186th wrong password429passed
TC-BVA-25Boundary value analysisREQ-1820 wrong passwords sent at onceexactly 5 × 401, 15 × 429passed
TC-DT-01Decision tablesREQ-09update another user's name403passed
TC-DT-02Decision tablesREQ-09update own name and email to an unused email200passed
TC-DT-03Decision tablesREQ-09update own email to the same email200passed
TC-DT-04Decision tablesREQ-09update own email to another user's409, account unchangedpassed
TC-DT-05Decision tablesREQ-09update own name to " "400passed
TC-DT-06Decision tablesREQ-09update own email to 42400passed
TC-DT-07Decision tablesREQ-09update user 999999403passed
TC-DT-08Decision tablesREQ-09admin updates an account after it was deleted404passed
TC-DT-09Decision tablesREQ-12order with no token401passed
TC-DT-10Decision tablesREQ-03order with quantity 0400passed
TC-DT-11Decision tablesREQ-04order product 999999404passed
TC-DT-12Decision tablesREQ-04order 2 of a product with stock 1400passed
TC-DT-13Decision tablesREQ-05order 3 at price 0.1201, total 0.3passed
TC-DT-14Decision tablesREQ-04lines for a real product and product 999999404, real product's stock unchangedpassed
TC-DT-15Decision tablesREQ-09admin updates another user's name200passed
TC-DT-16Decision tablesREQ-09admin updates user 999999404passed
TC-DT-17Decision tablesREQ-09admin gives a user another account's email409passed
TC-DT-18Decision tablesREQ-184 wrong passwords, the right one, 4 wrong, the right one200 both timespassed
TC-DT-19Decision tablesREQ-181 wrong password401passed
TC-DT-20Decision tablesREQ-185 wrong passwords, then the right one429, Retry-After 1–900 spassed
TC-DT-21Decision tablesREQ-185 wrong passwords, then a 6th429passed
TC-DT-22Decision tablesREQ-185 wrong for one email, then the right password for another200passed
TC-DT-23Decision tablesREQ-185 attempts for an email with no account, then a 6th429passed
TC-ST-01State transitionsREQ-06pending → pending409passed
TC-ST-02State transitionsREQ-06pending → processing200passed
TC-ST-03State transitionsREQ-06pending → shipped409passed
TC-ST-04State transitionsREQ-06pending → delivered409passed
TC-ST-05State transitionsREQ-06pending → cancelled200passed
TC-ST-06State transitionsREQ-06processing → pending409passed
TC-ST-07State transitionsREQ-06processing → processing409passed
TC-ST-08State transitionsREQ-06processing → shipped200passed
TC-ST-09State transitionsREQ-06processing → delivered409passed
TC-ST-10State transitionsREQ-06processing → cancelled200passed
TC-ST-11State transitionsREQ-06shipped → pending409passed
TC-ST-12State transitionsREQ-06shipped → processing409passed
TC-ST-13State transitionsREQ-06shipped → shipped409passed
TC-ST-14State transitionsREQ-06shipped → delivered200passed
TC-ST-15State transitionsREQ-06shipped → cancelled409passed
TC-ST-16State transitionsREQ-06delivered → pending409passed
TC-ST-17State transitionsREQ-06delivered → processing409passed
TC-ST-18State transitionsREQ-06delivered → shipped409passed
TC-ST-19State transitionsREQ-06delivered → delivered409passed
TC-ST-20State transitionsREQ-06delivered → cancelled409passed
TC-ST-21State transitionsREQ-06cancelled → pending409passed
TC-ST-22State transitionsREQ-06cancelled → processing409passed
TC-ST-23State transitionsREQ-06cancelled → shipped409passed
TC-ST-24State transitionsREQ-06cancelled → delivered409passed
TC-ST-25State transitionsREQ-06cancelled → cancelled409passed
TC-ST-26State transitionsREQ-07cancel a pending order of 4 (stock 10 → 6)200, stock 10passed
TC-ST-27State transitionsREQ-07cancel a processing order of 4200, stock 10passed
TC-ST-28State transitionsREQ-07cancel a shipped order of 4409, stock stays 6passed
TC-ST-29State transitionsREQ-07cancel after the product was deleted200passed
TC-AC-01Access controlREQ-13customer creates a product403passed
TC-AC-02Access controlREQ-13customer sets a product's price to 0.01403, price unchangedpassed
TC-AC-03Access controlREQ-13customer deletes a product403, product still therepassed
TC-AC-04Access controlREQ-13admin creates, updates and deletes a product201, 200, 204passed
TC-AC-05Access controlREQ-14customer reads another customer's order404passed
TC-AC-06Access controlREQ-14customer lists orders while another customer has oneonly their ownpassed
TC-AC-07Access controlREQ-14customer cancels another customer's order404, still pendingpassed
TC-AC-08Access controlREQ-14admin reads and lists a customer's order200, in the listpassed
TC-AC-09Access controlREQ-15customer moves their own pending order to processing403, still pendingpassed
TC-AC-10Access controlREQ-15customer marks their own shipped order delivered403, still shippedpassed
TC-AC-11Access controlREQ-15customer cancels their own pending order200, stock returnedpassed
TC-AC-12Access controlREQ-15admin moves a customer's order to processing200passed
TC-AC-13Access controlREQ-16customer lists all users403, no emails in the bodypassed
TC-AC-14Access controlREQ-16customer reads another user's account403, no email in the bodypassed
TC-AC-15Access controlREQ-16customer reads their own account200passed
TC-AC-16Access controlREQ-16admin deletes a customer's account204, then 404passed
TC-AC-17Access controlREQ-17deleted account's token on GET /auth/me401passed
TC-AC-18Access controlREQ-17deleted account's token places an order401, stock unchangedpassed
TC-AC-19Access controlREQ-17admin token signed with the secret that used to be built in401passed
TC-AC-20Access controlREQ-17unsigned token (alg: none) claiming admin401passed
TC-AC-21Access controlREQ-17sign-up with role: "admin" in the body201, role user, admin routes 403passed
TC-AC-22Access controlREQ-17PUT own account with role: "admin"200, role still userpassed