Skip to content

План по рефакторингу основных Интеграционных тестов #21

@DaniilStepanov

Description

@DaniilStepanov

План по рефакторингу основных интеграционных тестов

1. Инвентаризация

Просмотреть основные IT тесты:

  • core/src/test/java/io/aiven/klaw/UsersTeamsControllerIT.java
  • core/src/test/java/io/aiven/klaw/EnvsClustersTenantsControllerIT.java
  • core/src/test/java/io/aiven/klaw/TopicAclControllerIT.java

Выписать повторяющиеся элементы setup (обычно это):

  • константы пользователей (superadmin, kwuser...), пароли, роли
  • создание команд (/addNewTeam) и пользователей (/addNewUser)
  • подготовка окружений / кластеров / тенантов
  • создание топиков, запросов ACL, утверждений (approvals)

Зафиксировать минимальный набор сущностей, которые чаще всего нужны
тестам:

User, Team, Role, Env, Cluster, Tenant, Topic, Acl,
Request

Результат этапа: список повторяющихся паттернов данных, которые
нужно вынести в фабрики.


2. Структура тестового пакета testdata

Предлагаемая структура:

core/src/test/java/io/aiven/klaw/testdata/
├── constants/
├── factories/
├── scenarios/
├── client/        # опционально
└── assertions/    # опционально

Назначение:

  • constants --- тестовые константы (username, password, tenantName
    и т.п.)
  • factories --- фабрики моделей/DTO (валидные дефолты + override)
  • scenarios --- высокоуровневые сценарии подготовки данных
  • client --- thin-wrapper над MockMvc для domain actions
  • assertions --- общие проверки ответов API

Принцип: - factories создают объекты - scenarios создают состояние
системы


3. Базовые фабрики (5--10 штук)

Фабрики возвращают валидные по умолчанию модели
(в основном io.aiven.klaw.model.requests.*).

UserTestData

  • Генерирует UserInfoModel
  • Параметры: username, role, teamName/teamId
  • Дефолты: валидные email, имя, статус, tenantName

TeamTestData

  • Генерирует TeamModel
  • Используется в /addNewTeam, /updateTeam
  • Дефолты: валидные teammail, teamname, tenant

RoleTestData

  • Генерирует запросы для endpoints ролей
  • Дефолты: USER / SUPERADMIN + минимально валидные permissions

EnvClusterTenantTestData

  • Генерирует DTO для env / cluster / tenant
  • Один вызов → согласованный набор значений

TopicTestData

  • Генерирует модели топиков
  • Дефолты: имя, partitions, replication, config, env/cluster/tenant

AclTestData

  • Генерирует ACL-запросы и ACL-объекты
  • Дефолты: principal, operation, permissionType, host

RequestTestData

  • Генерирует request-модели (topic / acl / schema)
  • Дефолты: reason, operationType, entityType, tenantId

(Опционально) ApiResponseTestData / JsonTestData
--- утилиты для сериализации/десериализации.

Ключевые требования к фабрикам

  • валидный объект по умолчанию
  • override через with... или builder
  • никаких MockMvc и БД

4. Сценарии (layer над фабриками)

Сценарии покрывают самые частые setup'ы.

4.1 BasicUsersAndTeams

Создает: - superadmin - INFRATEAM - пользователя kwusera в INFRATEAM -
тестовую команду (например, Octopus)

Возвращает структуру: {superAdmin, userA, infraTeam, octopusTeam}

4.2 EnvClusterTenantReady

Создает: - env (DEV / STAGING) - cluster (DEVCLUSTER) - tenant default

Возвращает: {env, cluster, tenant}

4.3 TopicCreated

  • использует EnvClusterTenantReady
  • создает команду-владельца и топик

Возвращает: {topicName, ownerTeam, env, cluster, tenant}

4.4 AclRequestedForTopic

  • использует TopicCreated
  • создает ACL request

Возвращает: {aclRequestId, resourceName, aclDetails}

Идея: один вызов сценария вместо 30--60 строк setup.


5. (Опционально) KlawMockMvcClient

Тонкая обертка над MockMvc:

Скрывает: - mvc.perform - маппинг ответов в модели

Методы доменного уровня: - addNewUser - addNewTeam -
getTeamDetails

Результат --- меньше шума в тестах.


6. Обновление IT тестов

6.1 UsersTeamsControllerIT

Заменить: - mockMethods.getUserInfoModelUserTestData.user -
mockMethods.getTeamModelTeamTestData.team - setup →
BasicUsersAndTeams

Эффект: тесты короче и читабельнее.

6.2 EnvsClustersTenantsControllerIT

Заменить: - цепочку env/cluster/tenant → EnvClusterTenantReady -
строки имён → testdata/constants

6.3 TopicAclControllerIT

Заменить: - создание топика и ACL → AclRequestedForTopic - в тестах
оставить только asserts


7. Правила качества

Фабрики не должны: - использовать MockMvc - обращаться к БД -
зависеть от порядка тестов

Сценарии: - могут делать REST setup - должны быть идемпотентны или
использовать уникальные имена - возвращать структуру результата

Все магические строки --- в testdata/constants.


8. Результат внедрения

  • единый пакет io.aiven.klaw.testdata
  • 5--10 фабрик с валидными дефолтами
  • 3--5 сценариев типовых состояний
  • IT тесты читаются как Given / When / Then
  • значительное снижение дублирования setup-кода

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions