| Name | Pass count | Fail count |
|---|---|---|
| [HTTP] Status code must be 201 Created | 1 | 0 |
| [SCHEMA] Response contains required fields | 1 | 0 |
| [SCHEMA] Message includes registered keyword | 1 | 0 |
| [DATA] Email stored correctly | 1 | 0 |
| Name | Pass count | Fail count |
|---|---|---|
| [VALIDATION] Missing email test executed | 1 | 0 |
| [HTTP] Status code must be 409 Conflict | 0 | 1 |
| [VALIDATION] API rejects missing required email field | 1 | 0 |
| Name | Pass count | Fail count |
|---|---|---|
| [VALIDATION] Missing password test executed | 1 | 0 |
| [HTTP] Status code must be 409 Conflict | 0 | 1 |
| [VALIDATION] API rejects missing required password field | 1 | 0 |
| Name | Pass count | Fail count |
|---|---|---|
| [HTTP] Status code is 200 | 1 | 0 |
| [SCHEMA] Response has JWT token field | 1 | 0 |
| [SCHEMA] Token is non-empty string | 1 | 0 |
| [FORMAT] Token is valid JWT format | 1 | 0 |
| [STATE] Token stored in environment | 1 | 0 |
| Name | Pass count | Fail count |
|---|---|---|
| [AUTH] Should reject invalid credentials with 401 | 1 | 0 |
| Name | Pass count | Fail count |
|---|---|---|
| [HTTP] Status code is 200 | 1 | 0 |
| [SCHEMA] Response is array | 1 | 0 |
| [SCHEMA] Array is not empty | 1 | 0 |
| [SCHEMA] Each product has required fields | 1 | 0 |
| [SCHEMA] Field types are correct | 1 | 0 |
| [VALIDATION] Price is non-negative | 1 | 0 |
| [BUG] Stock should not be negative | 1 | 0 |
| Name | Pass count | Fail count |
|---|---|---|
| [HTTP] Status code is 200 | 1 | 0 |
| [SCHEMA] Response is object | 1 | 0 |
| [SCHEMA] Has base product fields | 1 | 0 |
| [SCHEMA] Field types correct | 1 | 0 |
| [SCHEMA] Detailed product has description | 0 | 1 |
| [DATA] Product ID matches request | 1 | 0 |
| Name | Pass count | Fail count |
|---|---|---|
| [HTTP] Status code is 200 | 1 | 0 |
| [SCHEMA] Response is array | 1 | 0 |
| [SEARCH] Returns matching products | 1 | 0 |
| [CASE-SENSITIVE] Search is case-sensitive | 0 | 1 |
| [SCHEMA] Results have required fields | 1 | 0 |
| Name | Pass count | Fail count |
|---|---|---|
| [CASE-SENSITIVE] Lowercase search returns empty | 0 | 1 |
| Name | Pass count | Fail count |
|---|---|---|
| [HTTP] Returns 404 for non-existent ID | 1 | 0 |
| Name | Pass count | Fail count |
|---|---|---|
| [HTTP] Status code is 200 | 0 | 1 |
| [SCHEMA] Response has required fields | 0 | 1 |
| [SCHEMA] Field types are correct | 0 | 1 |
| [VALIDATION] Total is positive | 0 | 1 |
| [VALIDATION] Order ID is non-empty | 0 | 1 |
| [BUSINESS] User matches authenticated user | 0 | 1 |
| [STATE] Store order ID for later use | 1 | 0 |
| Name | Pass count | Fail count |
|---|---|---|
| [AUTH] Requires authentication with 401 | 1 | 0 |
| Name | Pass count | Fail count |
|---|---|---|
| [AUTH] Rejects invalid token with 403 | 1 | 0 |
| Name | Pass count | Fail count |
|---|---|---|
| [HTTP] Status code is 200 | 0 | 1 |
| [SCHEMA] Response is array | 0 | 1 |
| [SCHEMA] Array contains orders | 0 | 1 |
| [SCHEMA] Each order has required fields | 0 | 1 |
| [BUSINESS] All orders belong to current user | 0 | 1 |
| Name | Pass count | Fail count |
|---|---|---|
| [AUTH] Requires authentication with 401 | 0 | 1 |
| Name | Pass count | Fail count |
|---|---|---|
| [HTTP] Status code is 200 | 0 | 1 |
| [SCHEMA] Response is object | 1 | 0 |
| [SCHEMA] Has required fields | 0 | 1 |
| [BUSINESS] Order ID matches request | 0 | 1 |
| [BUSINESS] User can only access own orders | 0 | 1 |
| Name | Pass count | Fail count |
|---|---|---|
| [HTTP] Returns 404 for non-existent order | 1 | 0 |