# Документация по тестированию API CodeGen ## Обзор Проект использует комплексную систему тестирования с максимальным покрытием: - **Юнит тесты** - тестирование отдельных модулей - **Интеграционные тесты** - тестирование взаимодействия компонентов - **E2E тесты** - полный цикл от генерации до использования **Общее количество тестов:** ~72 кейса ## Стек технологий - **Bun test** - встроенный test runner (быстрый, совместим с Jest API) - **msw** - Mock Service Worker для HTTP мокирования - **tmp** - создание временных директорий - **execa** - запуск CLI команд ## Структура тестов ``` tests/ ├── fixtures/ # Тестовые OpenAPI спецификации │ ├── minimal.json # Минимальная валидная спецификация │ ├── valid.json # Полная валидная спецификация │ ├── complex.json # Сложная (100+ endpoints) │ ├── with-auth.json # С authentication │ ├── invalid.json # Невалидная спецификация │ ├── empty.json # Пустая спецификация │ └── edge-cases.json # Unicode, спецсимволы │ ├── helpers/ # Вспомогательные функции │ ├── setup.ts # Создание/очистка temp директорий │ ├── mock-server.ts # Mock HTTP сервер │ └── fixtures.ts # Утилиты для фикстур │ ├── unit/ # Юнит тесты │ ├── cli.test.ts # CLI команды │ ├── generator.test.ts # Генератор │ ├── config.test.ts # Валидация конфигурации │ └── utils/ │ └── file.test.ts # Файловые утилиты │ └── integration/ # Интеграционные тесты ├── e2e-generation.test.ts # E2E генерация └── generated-client.test.ts # Сгенерированный клиент ``` ## Запуск тестов ### Все тесты ```bash bun test ``` ### Только юнит тесты ```bash bun test:unit ``` ### Только интеграционные тесты ```bash bun test:integration ``` ### Watch режим ```bash bun test:watch ``` ### С coverage ```bash bun test:coverage ``` ### Конкретный файл ```bash bun test tests/unit/cli.test.ts ``` ### Конкретный тест ```bash bun test -t "should generate client with custom name" ``` ## Покрываемые сценарии ### 1. CLI тесты (15 кейсов) **Базовые сценарии:** - ✅ Запуск с локальным файлом - ✅ Запуск с URL - ✅ Генерация с кастомным именем - ✅ Автоматическое имя из OpenAPI title - ✅ Отображение версии `--version` - ✅ Отображение help `--help` **Обработка ошибок:** - ❌ Отсутствие `--input` - ❌ Отсутствие `--output` - ❌ Несуществующий файл - ❌ Невалидный OpenAPI - ❌ Недоступный URL - ❌ Ошибки записи ### 2. Генератор (20 кейсов) **Корректная генерация:** - ✅ Создание файла - ✅ Структура кода - ✅ Все HTTP методы (GET, POST, PUT, PATCH, DELETE) - ✅ Типы для request/response - ✅ Path/query параметры - ✅ Request body - ✅ Enum типы - ✅ Bearer authentication - ✅ Хук `onFormatRouteName` - ✅ BaseUrl из servers **Edge cases:** - ❌ Пустая спецификация - ❌ Минимальная спецификация - ❌ Сложная спецификация (100+ endpoints) - ❌ Unicode символы ### 3. Утилиты (10 кейсов) **file.test.ts:** - ✅ `fileExists()` - существующий файл - ✅ `fileExists()` - несуществующий файл - ✅ `readJsonFile()` - локальный файл - ✅ `readJsonFile()` - URL - ❌ `readJsonFile()` - невалидный JSON - ❌ `readJsonFile()` - недоступный URL - ✅ `ensureDir()` - создание директорий - ✅ `writeFileWithDirs()` - запись с созданием директорий **config.test.ts:** - ✅ Валидная конфигурация - ❌ Без inputPath - ❌ Без outputPath - ✅ Опциональное поле fileName ### 4. Сгенерированный клиент (7 кейсов) **Компиляция:** - ✅ TypeScript компиляция без ошибок - ✅ Отсутствие type errors - ✅ Корректные импорты/экспорты **Корректность API:** - ✅ Все endpoints присутствуют - ✅ Корректные имена методов - ✅ HttpClient инициализация - ✅ Метод `setSecurityData` ### 5. Интеграционные E2E (15 кейсов) **Полный цикл:** - ✅ CLI → создание → импорт → использование - ✅ Генерация из локального файла - ✅ Генерация из URL - ✅ Повторная генерация **HTTP с mock:** - ✅ GET без параметров - ✅ GET с query параметрами - ✅ POST с body - ✅ PUT/PATCH/DELETE - ✅ Статусы 200, 201, 400, 401, 404, 500 - ❌ Network errors - ✅ Bearer authentication - ✅ Custom headers ## Дополнительная информация - [План тестирования](../TESTING-PLAN.md) - [Contributing Guidelines](../CONTRIBUTING.md) - [Bun Test Documentation](https://bun.sh/docs/cli/test)