Модуль 8 · Урок 30
Schemas, positive/negative tests і Problem Details
Schema validation перевіряє форму instance, але не всю domain truth. Сильний suite поєднує schema, business invariants, HTTP semantics і state/effect oracles.
JSON Schema створює test partitions
Визначте type, required, enum/const, numeric/string/array limits, patterns, object properties і composition (`allOf`/`anyOf`/`oneOf`/`not`). Відрізняйте absent property, explicit `null`, empty string/array/object і value wrong type. `format` може бути annotation або assertion залежно від dialect/tool configuration — зафіксуйте mode.
| Case family | Приклади |
|---|---|
| Presence/type | Missing required, null, boolean vs string, integer vs fractional. |
| Boundary | min−1/min/min+1, max−1/max/max+1, empty/one/many. |
| Vocabulary | enum case, Unicode, pattern anchors, uniqueItems. |
| Object shape | Unknown/read-only/write-only fields, nested omissions, duplicate keys policy. |
Request і response validation мають різні ризики
Request validation запобігає invalid state; response validation ловить missing/extra/wrong-type data й unintended exposure. Не обмежуйтеся 2xx: кожний documented error status/media type теж має schema. Schema-pass response може порушувати invariant: total не дорівнює сумі, чужий object видимий або state transition неможливий.
Parser behavior — частина test environment
Duplicate JSON member names, huge depth/arrays, number precision і invalid encoding можуть трактуватися tools/server неоднаково. Не запускайте resource-exhaustion cases без дозволу й limits.
Problem Details як error contract
RFC 9457 визначає `application/problem+json` з `type`, `title`, `status`, `detail`, `instance` та extensions. `type` стабільно ідентифікує class problem, `detail` описує occurrence, але client не повинен parse human text замість typed members. Error body не має розкривати stack traces, queries або secrets.
Exact invalid input → no forbidden state change → appropriate status → correct media type → stable problem type → useful safe details/pointers → correlation evidence → repeatability.
Практика
У `negative-boundary-cases.csv` побудуйте cases зі schema constraints. Перевірте `bookflow-booking.schema.json`, documented 400/409/422 Problem Details і один response, який schema-valid, але порушує business invariant.
Офіційні джерела
Закріпіть матеріал уроку
Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.