-
Notifications
You must be signed in to change notification settings - Fork 11
Description
План по рефакторингу основных интеграционных тестов
1. Инвентаризация
Просмотреть основные IT тесты:
core/src/test/java/io/aiven/klaw/UsersTeamsControllerIT.javacore/src/test/java/io/aiven/klaw/EnvsClustersTenantsControllerIT.javacore/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.getUserInfoModel → UserTestData.user -
mockMethods.getTeamModel → TeamTestData.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-кода