banatie-service/tests/api/test-README.md

4.5 KiB
Raw Blame History

Banatie API Tests

Набор интеграционных тестов для проверки REST API endpoints.

📋 Структура

tests/api/
├── config.ts           # Конфигурация (API key, baseURL)
├── utils.ts            # Утилиты (fetch, logger, file operations)
├── fixtures/
│   └── test-image.png  # Тестовое изображение
├── 01-basic.ts         # Базовые операции (upload, generate, list)
├── 02-flows.ts         # Flow management (CRUD, generations)
├── 03-aliases.ts       # Alias system (dual, technical, resolution)
├── 04-live.ts          # Live endpoint (caching, streaming)
├── 05-edge-cases.ts    # Validation и error handling
└── run-all.ts          # Запуск всех тестов

🚀 Быстрый старт

1. Настройка

Создайте .env файл в корне проекта:

API_KEY=bnt_your_actual_api_key_here
API_BASE_URL=http://localhost:3000

2. Установка зависимостей

pnpm install

3. Добавьте тестовое изображение

Поместите любое изображение в tests/api/fixtures/test-image.png

4. Запустите API сервер

pnpm dev

5. Запустите тесты

Все тесты:

pnpm test:api

Отдельный тест:

tsx tests/api/01-basic.ts

📊 Результаты

Сгенерированные изображения сохраняются в results/ с timestamp.

Пример вывода:

━━━ BASIC TESTS ━━━
✓ Upload image (234ms)
  Image ID: abc-123-def
  Storage Key: org/project/uploads/2025-01/image.png
  Alias: @test-logo
✓ Generate image (simple) (5432ms)
  ...

🧪 Что тестируется

01-basic.ts

  • Upload изображений
  • Список изображений
  • Генерация без references
  • Генерация с references
  • Список и детали generations

02-flows.ts

  • CRUD операции flows
  • Генерации в flow контексте
  • Technical aliases (@last, @first, @upload)
  • Flow-scoped aliases

03-aliases.ts

  • Project-scoped aliases
  • Flow-scoped aliases
  • Dual alias assignment
  • Alias resolution precedence
  • Technical aliases computation

04-live.ts

  • Cache MISS (первый запрос)
  • Cache HIT (повторный запрос)
  • Различные параметры
  • References в live endpoint
  • Performance кэширования

05-edge-cases.ts

  • Валидация входных данных
  • Дублирование aliases
  • Несуществующие resources
  • Некорректные форматы
  • Authentication errors
  • Pagination limits

🔧 Конфигурация

Настройка в tests/api/config.ts:

export const config = {
  baseURL: 'http://localhost:3000',
  apiKey: 'bnt_test_key',
  resultsDir: '../../results',
  requestTimeout: 30000,
  generationTimeout: 60000,
  verbose: true,
  saveImages: true,
};

📝 Логирование

Цветной console output:

  • ✓ Зеленый - успешные тесты
  • ✗ Красный - failed тесты
  • → Синий - информация
  • ⚠ Желтый - предупреждения

🐛 Troubleshooting

API не отвечает:

# Проверьте что сервер запущен
curl http://localhost:3000/health

401 Unauthorized:

# Проверьте API key в .env
echo $API_KEY

Генерация timeout:

# Увеличьте timeout в config.ts
generationTimeout: 120000 // 2 минуты

📚 Дополнительно

  • Тесты запускаются последовательно (используют testContext)
  • Данные НЕ удаляются после тестов (для инспекции)
  • Все сгенерированные изображения сохраняются в results/
  • Rate limiting учитывается (есть задержки между запросами)

🎯 Success Criteria

Все тесты должны пройти успешно:

  • >95% success rate
  • Все validation errors обрабатываются корректно
  • Cache работает (HIT < 500ms)
  • Alias resolution правильный
  • Нет memory leaks