Supabase Tours API - Руководство по тестированию
Практическое руководство для тестирования реального Supabase API
Описание
Реальное REST API на базе Supabase для системы бронирования туров. API предоставляет полный CRUD функционал через HTTP запросы.
Базовый URL и доступ
URL: https://shghgpfzwtobeudrmuzs.supabase.co/rest/v1
Заголовки:
- apikey: найти через триггер запросов
- Authorization: Bearer [тот же ключ]
- Content-Type: application/json
Структура данных
Туры (tours)
{
"id": 1,
"title": "Золотое кольцо России",
"destination": "Россия",
"start_date": "2024-06-15",
"end_date": "2024-06-22",
"duration": 7,
"price": 25000,
"max_participants": 30,
"available_spots": 12,
"category": "cultural",
"description": "Описание тура",
"created_at": "2024-12-19T12:00:00+00:00"
}
Клиенты (customers)
{
"id": 1,
"first_name": "Анна",
"last_name": "Петрова",
"email": "anna@example.com",
"phone": "+7 999 123-45-67",
"created_at": "2024-12-19T12:00:00+00:00"
}
Бронирования (bookings)
{
"id": 1,
"tour_id": 1,
"customer_id": 1,
"participants_count": 2,
"total_cost": 50000,
"special_requests": "Трансфер нужен",
"booking_date": "2024-06-15",
"status": "confirmed",
"created_at": "2024-12-19T12:00:00+00:00"
}
Основные операции
Туры
Получить все туры:
GET /tours
Поиск с фильтрами:
GET /tours?category=eq.cultural
GET /tours?price=gte.20000&price=lte.50000
GET /tours?available_spots=gt.0&order=price.asc
GET /tours?or=(title.ilike.*Сочи*,destination.ilike.*Сочи*)
Создать тур:
POST /tours
{
"title": "Новый тур",
"destination": "Казань",
"start_date": "2024-10-01",
"end_date": "2024-10-05",
"duration": 4,
"price": 28000,
"max_participants": 20,
"available_spots": 20,
"category": "cultural",
"description": "Тур по Казани"
}
Обновить тур:
PATCH /tours?id=eq.1
{
"available_spots": 10,
"price": 26000
}
Удалить тур:
DELETE /tours?id=eq.1
Клиенты
Найти клиента:
GET /customers?email=eq.test@example.com
Создать клиента:
POST /customers
{
"first_name": "Иван",
"last_name": "Петров",
"email": "ivan@example.com",
"phone": "+7 999 123-45-67"
}
Бронирования
Получить с деталями:
GET /bookings?select=*,tours(title,destination,price),customers(first_name,last_name,email)
Создать бронирование:
POST /bookings
{
"tour_id": 1,
"customer_id": 2,
"participants_count": 2,
"total_cost": 50000,
"special_requests": "Трансфер",
"booking_date": "2024-06-15",
"status": "confirmed"
}
Тестовые сценарии
1. Позитивные тесты
Полный цикл бронирования:
GET /tours?available_spots=gt.0
- найти доступные турыGET /customers?email=eq.new@example.com
- проверить клиентаPOST /customers
- создать клиента (если не найден)POST /bookings
- создать бронированиеPATCH /tours?id=eq.1
- обновить количество мест
Поиск и фильтрация:
- Поиск по категории:
?category=eq.cultural
- По цене:
?price=gte.20000&price=lte.50000
- По направлению:
?or=(title.ilike.*Сочи*,destination.ilike.*Сочи*)
- Комбинированный:
?category=eq.beach&available_spots=gt.0&order=price.asc
2. Негативные тесты
Валидация данных:
- Создание тура без обязательных полей
- Некорректные даты (end_date < start_date)
- Отрицательные цены и количества
- Некорректный email формат
Ограничения бизнес-логики:
- Бронирование несуществующего тура
- Превышение доступных мест
- Дублирование email клиента
Операции с несуществующими ресурсами:
GET /tours?id=eq.999
PATCH /customers?id=eq.999
DELETE /bookings?id=eq.999
3. Пограничные случаи
Лимиты и экстремальные значения:
- Очень длинные строки в названиях
- Максимальные числовые значения
- Специальные символы в полях
Конкурентный доступ:
- Одновременное бронирование последних мест
- Параллельное создание клиентов с одинаковым email
Операторы фильтрации
Оператор | Описание | Пример |
---|---|---|
eq |
Равно | ?category=eq.cultural |
neq |
Не равно | ?status=neq.cancelled |
gt |
Больше | ?price=gt.30000 |
gte |
Больше или равно | ?available_spots=gte.5 |
lt |
Меньше | ?duration=lt.10 |
lte |
Меньше или равно | ?price=lte.50000 |
ilike |
Поиск (нечувствительно к регистру) | ?destination=ilike.*сочи* |
in |
В списке | ?category=in.(cultural,nature) |
is |
IS NULL | ?special_requests=is.null |
or |
ИЛИ | ?or=(title.ilike.*Сочи*,destination.ilike.*Сочи*) |
Веб-интерфейс
Приложение имеет две вкладки:
Поиск туров
- Форма с фильтрами (направление, даты, категория, цена)
- Список найденных туров
- Модальное окно бронирования
Бронирования
- Просмотр всех бронирований
- Детали клиента и тура
- Статус бронирования
- Кнопка обновления данных