Модуль 8 · Урок 30

Schemas, positive/negative tests і Problem Details

Schema validation перевіряє форму instance, але не всю domain truth. Сильний suite поєднує schema, business invariants, HTTP semantics і state/effect oracles.

JSON SchemaBoundariesUnknown / nullProblem Details

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/typeMissing required, null, boolean vs string, integer vs fractional.
Boundarymin−1/min/min+1, max−1/max/max+1, empty/one/many.
Vocabularyenum case, Unicode, pattern anchors, uniqueItems.
Object shapeUnknown/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.

Negative oracle
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.

Офіційні джерела

Практична перевірка · урок 30 з 36

Закріпіть матеріал уроку

Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.

1. Чим absent field відрізняється від null?
2. Який boundary набір для minimum=1?
3. Що робить required у object schema?