Skip to content

QA-1: Контрактные тесты OpenAPI #101

Description

@ii-reviewer

Цель: зафиксировать OpenAPI как контракт и ловить дрейф между спекой и реальными ответами автоматически в тестах.
Зависимость: INIT-5, INIT-6.

Что сделать

  • Сейчас OpenAPI генерится из кода (code-first). Сними снапшот в файл и положи в репо как контракт-источник: дёрни GET /v3/api-docs в тесте и сохрани src/test/resources/openapi/warehouse.json. Реши: коммитим снапшот или генерим в CI и сравниваем.
  • Валидируй реальные ответы контроллеров против схемы. Возьми com.atlassian.oas:swagger-request-validator-spring-mvc (или -restassured) и оберни вызовы MockMvc валидатором.
mockMvc.perform(get("/api/items/1").header(AUTH, token))
    .andExpect(openApi().isValid("openapi/warehouse.json"));
  • Сделай тест, который падает при дрейфе: генерируй спеку заново и assertEquals с зафиксированным снапшотом. Расхождение → красный.
  • Трудные места: spec-first vs code-first (где источник правды); нестабильные поля (timestamp, id) в снапшоте; покрыть и success, и error-ответы (404/409/422) из CROSS-1.

Acceptance criteria

  • В репо лежит зафиксированный OpenAPI-контракт
  • Тесты валидируют ответы ключевых эндпоинтов (items, movements, auth) против схемы
  • Несовместимое изменение API (убрали/переименовали поле) роняет тест
  • Проверяются и success, и error-схемы

Metadata

Metadata

Assignees

No one assigned

    Labels

    ciCI/CD, автоматизация сборкиdocumentationImprovements or additions to documentation

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions