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. Позитивные тесты

Полный цикл бронирования:

  1. GET /tours?available_spots=gt.0 - найти доступные туры
  2. GET /customers?email=eq.new@example.com - проверить клиента
  3. POST /customers - создать клиента (если не найден)
  4. POST /bookings - создать бронирование
  5. 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.*Сочи*)

Веб-интерфейс

Приложение имеет две вкладки:

Поиск туров

  • Форма с фильтрами (направление, даты, категория, цена)
  • Список найденных туров
  • Модальное окно бронирования

Бронирования

  • Просмотр всех бронирований
  • Детали клиента и тура
  • Статус бронирования
  • Кнопка обновления данных