# 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` файл в корне проекта:

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

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

```bash
pnpm install
```

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

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

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

```bash
pnpm dev
```

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

**Все тесты:**
```bash
pnpm test:api
```

**Отдельный тест:**
```bash
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`:

```typescript
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 не отвечает:**
```bash
# Проверьте что сервер запущен
curl http://localhost:3000/health
```

**401 Unauthorized:**
```bash
# Проверьте API key в .env
echo $API_KEY
```

**Генерация timeout:**
```bash
# Увеличьте timeout в config.ts
generationTimeout: 120000 // 2 минуты
```

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

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

## 🎯 Success Criteria

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