# Тестовая спецификация API ## Содержание 1. [GET /account/get](#1-get-accountget) 2. [POST /account/create](#2-post-accountcreate) 3. [DELETE /account/delete](#3-delete-accountdelete) 4. [GET /accounts](#4-get-accounts) 5. [GET /privilege/{userId}](#5-get-privilegeuserid) 6. [DELETE /account/{userId}](#6-delete-accountuserid) 7. [POST /account/manualdone](#7-post-accountmanualdone) 8. [POST /account/leadtarget](#8-post-accountleadtarget) 9. [PUT /account/leadtarget](#9-put-accountleadtarget) 10. [DELETE /account/leadtarget/{id}](#10-delete-accountleadtargetid) 11. [GET /account/leadtarget/{quizID}](#11-get-accountleadtargetquizid) 13. [POST /question/create](#13-post-questioncreate) ## 1. GET /account/get ### 1.1 Описание Получение информации о текущем аккаунте пользователя. ### 1.2 Базовые требования - Требуется JWT токен авторизации (bearerAuth) - Возвращает детальную информацию об аккаунте в формате JSON - Поддерживает стандартные HTTP коды ответа: 200, 401, 404, 500 ### 1.3 Тестовые сценарии #### 1.3.1 Успешное получение информации об аккаунте **Предусловия:** - Пользователь авторизован - Аккаунт существует и активен - JWT токен валиден **Входные данные:** - Метод: GET - URL: /account/get - Headers: - Authorization: Bearer {valid_jwt_token} **Ожидаемый результат:** - HTTP Status: 200 OK - Content-Type: application/json - Тело ответа содержит объект Account со следующими полями: - id (string) - user_id (string) - created_at (date-time) - privileges (object) **Проверки:** 1. Все обязательные поля присутствуют в ответе 2. Формат даты created_at соответствует ISO 8601 3. Структура privileges соответствует схеме ShortPrivilege 4. Значения полей соответствуют данным в базе #### 1.3.2 Проверка авторизации **Сценарий 2.1: Отсутствие токена** - Headers: без Authorization - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.2: Невалидный токен** - Headers: Authorization: Bearer invalid_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.3: Истекший токен** - Headers: Authorization: Bearer expired_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке #### 1.3.3 Проверка существования аккаунта **Сценарий 3.1: Аккаунт не найден** - Предусловие: Аккаунт удален или не существует - Ожидаемый результат: 404 Not Found - Проверка сообщения об ошибке **Сценарий 3.2: Аккаунт деактивирован** - Предусловие: Аккаунт помечен как deleted=true - Ожидаемый результат: 404 Not Found - Проверка сообщения об ошибке #### 1.3.4 Проверка привилегий **Сценарий 4.1: Аккаунт без привилегий** - Предусловие: Аккаунт существует, но не имеет привилегий - Ожидаемый результат: 200 OK - Проверка: privileges = {} **Сценарий 4.2: Аккаунт с множеством привилегий** - Предусловие: Аккаунт имеет несколько активных привилегий - Ожидаемый результат: 200 OK - Проверка структуры и содержимого privileges #### 1.3.5 Проверка производительности **Сценарий 5.1: Время ответа** - Проверка: время ответа < 500ms - Проверка: стабильность времени ответа при повторных запросах **Сценарий 5.2: Нагрузочное тестирование** - Проверка: система выдерживает 100 последовательных запросов - Проверка: отсутствие утечек памяти #### 1.3.6 Проверка безопасности **Сценарий 6.1: XSS уязвимости** - Проверка: экранирование специальных символов в ответе - Проверка: корректные заголовки безопасности **Сценарий 6.2: CSRF защита** - Проверка: наличие и валидность CSRF токена - Проверка: корректная обработка невалидного CSRF токена #### 1.3.7 Граничные случаи **Сценарий 7.1: Очень длинные значения полей** - Проверка: обработка полей с максимально допустимой длиной - Проверка: корректное обрезание/валидация длинных значений **Сценарий 7.2: Специальные символы в данных** - Проверка: корректная обработка Unicode символов - Проверка: обработка специальных символов в именах полей #### 1.3.8 Обработка ошибок **Сценарий 8.1: Внутренняя ошибка сервера** - Предусловие: Имитация сбоя базы данных - Ожидаемый результат: 500 Internal Server Error - Проверка: информативное сообщение об ошибке **Сценарий 8.2: Таймаут соединения** - Предусловие: Имитация таймаута - Ожидаемый результат: 500 Internal Server Error - Проверка: корректная обработка таймаута ### 1.4 Особые моменты для тестирования 1. **Валидация JWT токена:** - Проверка подписи токена - Проверка срока действия - Проверка структуры claims 2. **Кэширование:** - Проверка правильности кэширования ответов - Проверка инвалидации кэша при изменении данных 3. **Логирование:** - Проверка записи всех важных событий - Проверка корректности логов 4. **Мониторинг:** - Проверка метрик производительности - Проверка алертов при ошибках ### 1.5 Критерии приемки 1. Все тестовые сценарии пройдены успешно 2. Время ответа соответствует требованиям 3. Обработка ошибок соответствует спецификации 4. Безопасность соответствует стандартам 5. Логирование и мониторинг работают корректно ## 2. POST /account/create ### 2.1 Описание Создание нового аккаунта пользователя. ### 2.2 Базовые требования - Требуется JWT токен авторизации (bearerAuth) - Создает новый аккаунт в системе - Поддерживает HTTP коды ответа: 200, 401, 409, 500 ### 2.3 Тестовые сценарии #### 2.3.1 Успешное создание аккаунта **Предусловия:** - Пользователь авторизован - JWT токен валиден - Аккаунт с таким user_id еще не существует **Входные данные:** - Метод: POST - URL: /account/create - Headers: - Authorization: Bearer {valid_jwt_token} - Content-Type: application/json **Ожидаемый результат:** - HTTP Status: 200 OK - Content-Type: application/json - Тело ответа содержит объект Account со следующими полями: - id (string) - user_id (string) - created_at (date-time) - privileges (object) **Проверки:** 1. Аккаунт успешно создан в базе данных 2. Все обязательные поля присутствуют в ответе 3. Формат даты created_at соответствует ISO 8601 4. Значения полей соответствуют переданным данным #### 2.3.2 Проверка авторизации **Сценарий 2.1: Отсутствие токена** - Headers: без Authorization - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.2: Невалидный токен** - Headers: Authorization: Bearer invalid_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.3: Истекший токен** - Headers: Authorization: Bearer expired_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке #### 2.3.3 Проверка конфликтов **Сценарий 3.1: Создание дублирующегося аккаунта** - Предусловие: Аккаунт с таким user_id уже существует - Ожидаемый результат: 409 Conflict - Проверка сообщения об ошибке **Сценарий 3.2: Попытка создания аккаунта с существующим ID** - Предусловие: Передан ID существующего аккаунта - Ожидаемый результат: 409 Conflict - Проверка сообщения об ошибке #### 2.3.4 Проверка валидации данных **Сценарий 4.1: Отсутствие обязательных полей** - Входные данные: пустой JSON объект - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке **Сценарий 4.2: Некорректный формат данных** - Входные данные: неверный формат полей - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке #### 2.3.5 Проверка безопасности **Сценарий 5.1: SQL-инъекции** - Входные данные: SQL-инъекция в полях - Ожидаемый результат: 400 Bad Request - Проверка: инъекция не выполнена **Сценарий 5.2: XSS-атаки** - Входные данные: XSS-код в полях - Ожидаемый результат: 400 Bad Request - Проверка: XSS-код не выполнен #### 2.3.6 Проверка производительности **Сценарий 6.1: Время создания** - Проверка: время создания аккаунта < 1s - Проверка: стабильность времени при повторных запросах **Сценарий 6.2: Нагрузочное тестирование** - Проверка: система выдерживает создание 100 аккаунтов подряд - Проверка: отсутствие утечек памяти #### 2.3.7 Граничные случаи **Сценарий 7.1: Очень длинные значения полей** - Входные данные: поля с максимально допустимой длиной - Ожидаемый результат: 200 OK - Проверка: данные сохранены корректно **Сценарий 7.2: Специальные символы** - Входные данные: Unicode символы в полях - Ожидаемый результат: 200 OK - Проверка: данные сохранены корректно #### 2.3.8 Обработка ошибок **Сценарий 8.1: Внутренняя ошибка сервера** - Предусловие: Имитация сбоя базы данных - Ожидаемый результат: 500 Internal Server Error - Проверка: информативное сообщение об ошибке **Сценарий 8.2: Таймаут соединения** - Предусловие: Имитация таймаута - Ожидаемый результат: 500 Internal Server Error - Проверка: корректная обработка таймаута ### 2.4 Особые моменты для тестирования 1. **Валидация данных:** - Проверка всех обязательных полей - Проверка форматов данных - Проверка уникальности user_id 2. **Транзакционность:** - Проверка атомарности операции создания - Проверка отката при ошибках 3. **Логирование:** - Проверка записи создания аккаунта - Проверка аудит-логов 4. **Мониторинг:** - Проверка метрик создания аккаунтов - Проверка алертов при ошибках ### 2.5 Критерии приемки 1. Все тестовые сценарии пройдены успешно 2. Время создания аккаунта соответствует требованиям 3. Обработка ошибок соответствует спецификации 4. Безопасность соответствует стандартам 5. Логирование и мониторинг работают корректно ## 3. DELETE /account/delete ### 3.1 Описание Удаление текущего аккаунта пользователя. ### 3.2 Базовые требования - Требуется JWT токен авторизации (bearerAuth) - Удаляет текущий аккаунт пользователя - Поддерживает HTTP коды ответа: 200, 401, 500 ### 3.3 Тестовые сценарии #### 3.3.1 Успешное удаление аккаунта **Предусловия:** - Пользователь авторизован - JWT токен валиден - Аккаунт существует и активен **Входные данные:** - Метод: DELETE - URL: /account/delete - Headers: - Authorization: Bearer {valid_jwt_token} **Ожидаемый результат:** - HTTP Status: 200 OK - Content-Type: application/json - Тело ответа содержит объект с полем accountId (string) **Проверки:** 1. Аккаунт успешно удален из базы данных 2. Все связанные данные аккаунта удалены или помечены как удаленные 3. Поле accountId в ответе соответствует ID удаленного аккаунта 4. Последующие запросы к аккаунту возвращают 404 #### 3.3.2 Проверка авторизации **Сценарий 2.1: Отсутствие токена** - Headers: без Authorization - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.2: Невалидный токен** - Headers: Authorization: Bearer invalid_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.3: Истекший токен** - Headers: Authorization: Bearer expired_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке #### 3.3.3 Проверка состояния аккаунта **Сценарий 3.1: Удаление уже удаленного аккаунта** - Предусловие: Аккаунт уже помечен как удаленный - Ожидаемый результат: 200 OK - Проверка: повторное удаление не вызывает ошибок **Сценарий 3.2: Удаление несуществующего аккаунта** - Предусловие: Аккаунт не существует - Ожидаемый результат: 200 OK - Проверка: операция завершается успешно #### 3.3.4 Проверка каскадного удаления **Сценарий 4.1: Удаление связанных данных** - Проверка: все связанные квизы удалены или помечены как удаленные - Проверка: все связанные вопросы удалены или помечены как удаленные - Проверка: все связанные результаты удалены или помечены как удаленные **Сценарий 4.2: Сохранение статистики** - Проверка: статистические данные сохранены для аналитики - Проверка: исторические данные доступны для отчетов #### 3.3.5 Проверка безопасности **Сценарий 5.1: Попытка удаления чужого аккаунта** - Предусловие: Попытка удаления аккаунта другого пользователя - Ожидаемый результат: 401 Unauthorized - Проверка: операция отклонена **Сценарий 5.2: Проверка CSRF защиты** - Проверка: наличие и валидность CSRF токена - Проверка: отклонение запросов без валидного CSRF токена #### 3.3.6 Проверка производительности **Сценарий 6.1: Время удаления** - Проверка: время удаления аккаунта < 2s - Проверка: стабильность времени при повторных запросах **Сценарий 6.2: Нагрузочное тестирование** - Проверка: система корректно обрабатывает множественные запросы на удаление - Проверка: отсутствие утечек памяти при массовом удалении #### 3.3.7 Граничные случаи **Сценарий 7.1: Удаление аккаунта с большим количеством данных** - Предусловие: Аккаунт имеет множество связанных данных - Ожидаемый результат: 200 OK - Проверка: все данные успешно удалены **Сценарий 7.2: Удаление во время активных операций** - Предусловие: Активные операции с аккаунтом - Ожидаемый результат: 200 OK - Проверка: корректная обработка конкурентных запросов #### 3.3.8 Обработка ошибок **Сценарий 8.1: Внутренняя ошибка сервера** - Предусловие: Имитация сбоя базы данных - Ожидаемый результат: 500 Internal Server Error - Проверка: информативное сообщение об ошибке **Сценарий 8.2: Таймаут соединения** - Предусловие: Имитация таймаута - Ожидаемый результат: 500 Internal Server Error - Проверка: корректная обработка таймаута ### 3.4 Особые моменты для тестирования 1. **Транзакционность:** - Проверка атомарности операции удаления - Проверка отката при частичном удалении - Проверка целостности данных после удаления 2. **Логирование:** - Проверка записи операции удаления - Проверка аудит-логов - Проверка логов связанных операций 3. **Мониторинг:** - Проверка метрик удаления аккаунтов - Проверка алертов при ошибках - Проверка мониторинга связанных операций 4. **Восстановление:** - Проверка возможности восстановления данных - Проверка периода хранения удаленных данных ### 3.5 Критерии приемки 1. Все тестовые сценарии пройдены успешно 2. Время удаления аккаунта соответствует требованиям 3. Обработка ошибок соответствует спецификации 4. Безопасность соответствует стандартам 5. Логирование и мониторинг работают корректно 6. Каскадное удаление работает корректно 7. Данные успешно удаляются или помечаются как удаленные ## 4. GET /accounts ### 4.1 Описание Получение списка аккаунтов с поддержкой пагинации. ### 4.2 Базовые требования - Требуется JWT токен авторизации (bearerAuth) - Поддерживает пагинацию через параметры limit и page - Поддерживает HTTP коды ответа: 200, 400, 401, 500 ### 4.3 Тестовые сценарии #### 4.3.1 Успешное получение списка аккаунтов **Предусловия:** - Пользователь авторизован - JWT токен валиден - В системе есть несколько аккаунтов **Входные данные:** - Метод: GET - URL: /accounts - Headers: - Authorization: Bearer {valid_jwt_token} - Content-Type: application/json - Body: ```json { "limit": 10, "page": 1 } ``` **Ожидаемый результат:** - HTTP Status: 200 OK - Content-Type: application/json - Тело ответа содержит объект со следующими полями: - count (integer) - общее количество аккаунтов - items (array) - массив объектов Account **Проверки:** 1. Количество возвращаемых элементов не превышает limit 2. Все обязательные поля присутствуют в каждом объекте Account 3. Значение count соответствует общему количеству аккаунтов 4. Элементы отсортированы по дате создания (новые первые) #### 4.3.2 Проверка авторизации **Сценарий 2.1: Отсутствие токена** - Headers: без Authorization - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.2: Невалидный токен** - Headers: Authorization: Bearer invalid_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.3: Истекший токен** - Headers: Authorization: Bearer expired_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке #### 4.3.3 Проверка пагинации **Сценарий 3.1: Корректные параметры пагинации** - Входные данные: limit=10, page=1 - Ожидаемый результат: 200 OK - Проверка: возвращается корректное количество элементов **Сценарий 3.2: Некорректные параметры пагинации** - Входные данные: limit=0, page=0 - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке **Сценарий 3.3: Превышение максимального лимита** - Входные данные: limit=1000 - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке #### 4.3.4 Проверка фильтрации **Сценарий 4.1: Пустой результат** - Предусловие: Нет аккаунтов в системе - Ожидаемый результат: 200 OK - Проверка: count=0, items=[] **Сценарий 4.2: Последняя страница** - Входные данные: page с большим номером - Ожидаемый результат: 200 OK - Проверка: items=[] #### 4.3.5 Проверка безопасности **Сценарий 5.1: Проверка прав доступа** - Проверка: пользователь видит только разрешенные аккаунты - Проверка: конфиденциальные данные скрыты **Сценарий 5.2: CSRF защита** - Проверка: наличие и валидность CSRF токена - Проверка: отклонение запросов без валидного CSRF токена #### 4.3.6 Проверка производительности **Сценарий 6.1: Время ответа** - Проверка: время ответа < 500ms - Проверка: стабильность времени при повторных запросах **Сценарий 6.2: Нагрузочное тестирование** - Проверка: система выдерживает 100 последовательных запросов - Проверка: отсутствие утечек памяти #### 4.3.7 Граничные случаи **Сценарий 7.1: Большое количество аккаунтов** - Предусловие: В системе 1000+ аккаунтов - Ожидаемый результат: 200 OK - Проверка: корректная работа пагинации **Сценарий 7.2: Специальные символы в данных** - Проверка: корректная обработка Unicode символов - Проверка: корректное отображение специальных символов #### 4.3.8 Обработка ошибок **Сценарий 8.1: Внутренняя ошибка сервера** - Предусловие: Имитация сбоя базы данных - Ожидаемый результат: 500 Internal Server Error - Проверка: информативное сообщение об ошибке **Сценарий 8.2: Таймаут соединения** - Предусловие: Имитация таймаута - Ожидаемый результат: 500 Internal Server Error - Проверка: корректная обработка таймаута ### 4.4 Особые моменты для тестирования 1. **Кэширование:** - Проверка правильности кэширования результатов - Проверка инвалидации кэша при изменении данных 2. **Логирование:** - Проверка записи запросов к списку аккаунтов - Проверка аудит-логов 3. **Мониторинг:** - Проверка метрик производительности - Проверка алертов при ошибках 4. **Оптимизация:** - Проверка эффективности запросов к БД - Проверка использования индексов ### 4.5 Критерии приемки 1. Все тестовые сценарии пройдены успешно 2. Время ответа соответствует требованиям 3. Пагинация работает корректно 4. Обработка ошибок соответствует спецификации 5. Безопасность соответствует стандартам 6. Логирование и мониторинг работают корректно 7. Кэширование работает эффективно ## 5. GET /privilege/{userId} ### 5.1 Описание Получение списка привилегий для указанного пользователя по его ID. ### 5.2 Базовые требования - Требуется JWT токен авторизации (bearerAuth) - Требуется передача userId в теле запроса - Поддерживает HTTP коды ответа: 200, 400, 401, 500 ### 5.3 Тестовые сценарии #### 5.3.1 Успешное получение привилегий **Предусловия:** - Пользователь авторизован - JWT токен валиден - Указанный пользователь существует - У пользователя есть привилегии **Входные данные:** - Метод: GET - URL: /privilege/{userId} - Headers: - Authorization: Bearer {valid_jwt_token} - Content-Type: application/json - Body: ```json { "userId": "valid_user_id" } ``` **Ожидаемый результат:** - HTTP Status: 200 OK - Content-Type: application/json - Тело ответа содержит массив объектов ShortPrivilege со следующими полями: - id (string) - privilege_id (string) - privilege_name (string) - amount (integer) - created_at (date-time) **Проверки:** 1. Все привилегии пользователя возвращены 2. Все обязательные поля присутствуют в каждом объекте 3. Формат даты created_at соответствует ISO 8601 4. Значения полей соответствуют данным в базе #### 5.3.2 Проверка авторизации **Сценарий 2.1: Отсутствие токена** - Headers: без Authorization - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.2: Невалидный токен** - Headers: Authorization: Bearer invalid_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.3: Истекший токен** - Headers: Authorization: Bearer expired_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке #### 5.3.3 Проверка входных данных **Сценарий 3.1: Отсутствие userId** - Body: пустой JSON объект - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке **Сценарий 3.2: Невалидный userId** - Body: { "userId": "invalid_id" } - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке **Сценарий 3.3: Несуществующий userId** - Body: { "userId": "non_existent_id" } - Ожидаемый результат: 200 OK - Проверка: возвращается пустой массив #### 5.3.4 Проверка прав доступа **Сценарий 4.1: Запрос привилегий другого пользователя** - Предусловие: Запрос привилегий пользователя с другим ID - Ожидаемый результат: 401 Unauthorized - Проверка: доступ запрещен **Сценарий 4.2: Запрос привилегий с недостаточными правами** - Предусловие: У запрашивающего пользователя нет прав на просмотр привилегий - Ожидаемый результат: 401 Unauthorized - Проверка: доступ запрещен #### 5.3.5 Проверка безопасности **Сценарий 5.1: SQL-инъекции** - Body: { "userId": "1' OR '1'='1" } - Ожидаемый результат: 400 Bad Request - Проверка: инъекция не выполнена **Сценарий 5.2: XSS-атаки** - Body: { "userId": "" } - Ожидаемый результат: 400 Bad Request - Проверка: XSS-код не выполнен #### 5.3.6 Проверка производительности **Сценарий 6.1: Время ответа** - Проверка: время ответа < 300ms - Проверка: стабильность времени при повторных запросах **Сценарий 6.2: Нагрузочное тестирование** - Проверка: система выдерживает 100 последовательных запросов - Проверка: отсутствие утечек памяти #### 5.3.7 Граничные случаи **Сценарий 7.1: Пользователь с большим количеством привилегий** - Предусловие: У пользователя 100+ привилегий - Ожидаемый результат: 200 OK - Проверка: все привилегии возвращены корректно **Сценарий 7.2: Пользователь без привилегий** - Предусловие: У пользователя нет привилегий - Ожидаемый результат: 200 OK - Проверка: возвращается пустой массив #### 5.3.8 Обработка ошибок **Сценарий 8.1: Внутренняя ошибка сервера** - Предусловие: Имитация сбоя базы данных - Ожидаемый результат: 500 Internal Server Error - Проверка: информативное сообщение об ошибке **Сценарий 8.2: Таймаут соединения** - Предусловие: Имитация таймаута - Ожидаемый результат: 500 Internal Server Error - Проверка: корректная обработка таймаута ### 5.4 Особые моменты для тестирования 1. **Кэширование:** - Проверка кэширования результатов запроса - Проверка инвалидации кэша при изменении привилегий 2. **Логирование:** - Проверка записи запросов к привилегиям - Проверка аудит-логов доступа 3. **Мониторинг:** - Проверка метрик производительности - Проверка алертов при ошибках 4. **Безопасность:** - Проверка контроля доступа - Проверка валидации входных данных ### 5.5 Критерии приемки 1. Все тестовые сценарии пройдены успешно 2. Время ответа соответствует требованиям 3. Обработка ошибок соответствует спецификации 4. Безопасность соответствует стандартам 5. Логирование и мониторинг работают корректно 6. Кэширование работает эффективно 7. Контроль доступа работает корректно ## 6. DELETE /account/{userId} ### 6.1 Описание Удаление аккаунта пользователя по его ID. ### 6.2 Базовые требования - Требуется JWT токен авторизации (bearerAuth) - Требуется передача userId в теле запроса - Поддерживает HTTP коды ответа: 200, 400, 401, 500 ### 6.3 Тестовые сценарии #### 6.3.1 Успешное удаление аккаунта **Предусловия:** - Пользователь авторизован - JWT токен валиден - У запрашивающего пользователя есть права на удаление аккаунтов - Удаляемый аккаунт существует и активен **Входные данные:** - Метод: DELETE - URL: /account/{userId} - Headers: - Authorization: Bearer {valid_jwt_token} - Content-Type: application/json - Body: ```json { "userId": "valid_user_id" } ``` **Ожидаемый результат:** - HTTP Status: 200 OK - Content-Type: application/json - Тело ответа содержит объект с полем userId (string) **Проверки:** 1. Аккаунт успешно удален из базы данных 2. Все связанные данные аккаунта удалены или помечены как удаленные 3. Поле userId в ответе соответствует ID удаленного аккаунта 4. Последующие запросы к аккаунту возвращают 404 #### 6.3.2 Проверка авторизации **Сценарий 2.1: Отсутствие токена** - Headers: без Authorization - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.2: Невалидный токен** - Headers: Authorization: Bearer invalid_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.3: Истекший токен** - Headers: Authorization: Bearer expired_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке #### 6.3.3 Проверка входных данных **Сценарий 3.1: Отсутствие userId** - Body: пустой JSON объект - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке **Сценарий 3.2: Невалидный userId** - Body: { "userId": "invalid_id" } - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке **Сценарий 3.3: Несуществующий userId** - Body: { "userId": "non_existent_id" } - Ожидаемый результат: 200 OK - Проверка: операция завершается успешно #### 6.3.4 Проверка прав доступа **Сценарий 4.1: Удаление без необходимых прав** - Предусловие: У пользователя нет прав на удаление аккаунтов - Ожидаемый результат: 401 Unauthorized - Проверка: доступ запрещен **Сценарий 4.2: Попытка удаления системного аккаунта** - Предусловие: Попытка удаления системного аккаунта - Ожидаемый результат: 401 Unauthorized - Проверка: доступ запрещен #### 6.3.5 Проверка каскадного удаления **Сценарий 5.1: Удаление связанных данных** - Проверка: все связанные квизы удалены или помечены как удаленные - Проверка: все связанные вопросы удалены или помечены как удаленные - Проверка: все связанные результаты удалены или помечены как удаленные **Сценарий 5.2: Сохранение статистики** - Проверка: статистические данные сохранены для аналитики - Проверка: исторические данные доступны для отчетов #### 6.3.6 Проверка безопасности **Сценарий 6.1: SQL-инъекции** - Body: { "userId": "1' OR '1'='1" } - Ожидаемый результат: 400 Bad Request - Проверка: инъекция не выполнена **Сценарий 6.2: XSS-атаки** - Body: { "userId": "" } - Ожидаемый результат: 400 Bad Request - Проверка: XSS-код не выполнен #### 6.3.7 Проверка производительности **Сценарий 7.1: Время удаления** - Проверка: время удаления аккаунта < 2s - Проверка: стабильность времени при повторных запросах **Сценарий 7.2: Нагрузочное тестирование** - Проверка: система корректно обрабатывает множественные запросы на удаление - Проверка: отсутствие утечек памяти при массовом удалении #### 6.3.8 Граничные случаи **Сценарий 8.1: Удаление аккаунта с большим количеством данных** - Предусловие: Аккаунт имеет множество связанных данных - Ожидаемый результат: 200 OK - Проверка: все данные успешно удалены **Сценарий 8.2: Удаление во время активных операций** - Предусловие: Активные операции с аккаунтом - Ожидаемый результат: 200 OK - Проверка: корректная обработка конкурентных запросов #### 6.3.9 Обработка ошибок **Сценарий 9.1: Внутренняя ошибка сервера** - Предусловие: Имитация сбоя базы данных - Ожидаемый результат: 500 Internal Server Error - Проверка: информативное сообщение об ошибке **Сценарий 9.2: Таймаут соединения** - Предусловие: Имитация таймаута - Ожидаемый результат: 500 Internal Server Error - Проверка: корректная обработка таймаута ### 6.4 Особые моменты для тестирования 1. **Транзакционность:** - Проверка атомарности операции удаления - Проверка отката при частичном удалении - Проверка целостности данных после удаления 2. **Логирование:** - Проверка записи операции удаления - Проверка аудит-логов - Проверка логов связанных операций 3. **Мониторинг:** - Проверка метрик удаления аккаунтов - Проверка алертов при ошибках - Проверка мониторинга связанных операций 4. **Восстановление:** - Проверка возможности восстановления данных - Проверка периода хранения удаленных данных ### 6.5 Критерии приемки 1. Все тестовые сценарии пройдены успешно 2. Время удаления аккаунта соответствует требованиям 3. Обработка ошибок соответствует спецификации 4. Безопасность соответствует стандартам 5. Логирование и мониторинг работают корректно 6. Каскадное удаление работает корректно 7. Данные успешно удаляются или помечаются как удаленные 8. Контроль доступа работает корректно ## 7. POST /account/manualdone ### 7.1 Описание Ручная пометка аккаунта как завершенного. ### 7.2 Базовые требования - Требуется JWT токен авторизации (bearerAuth) - Требуется передача id пользователя в теле запроса - Поддерживает HTTP коды ответа: 200, 400, 401, 404, 500 ### 7.3 Тестовые сценарии #### 7.3.1 Успешная пометка аккаунта как завершенного **Предусловия:** - Пользователь авторизован - JWT токен валиден - У запрашивающего пользователя есть права на пометку аккаунтов - Аккаунт существует и активен **Входные данные:** - Метод: POST - URL: /account/manualdone - Headers: - Authorization: Bearer {valid_jwt_token} - Content-Type: application/json - Body: ```json { "id": "valid_user_id" } ``` **Ожидаемый результат:** - HTTP Status: 200 OK - Content-Type: application/json **Проверки:** 1. Аккаунт успешно помечен как завершенный 2. Статус аккаунта обновлен в базе данных 3. Все связанные операции завершены 4. Последующие запросы к аккаунту показывают обновленный статус #### 7.3.2 Проверка авторизации **Сценарий 2.1: Отсутствие токена** - Headers: без Authorization - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.2: Невалидный токен** - Headers: Authorization: Bearer invalid_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.3: Истекший токен** - Headers: Authorization: Bearer expired_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке #### 7.3.3 Проверка входных данных **Сценарий 3.1: Отсутствие id** - Body: пустой JSON объект - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке **Сценарий 3.2: Невалидный id** - Body: { "id": "invalid_id" } - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке **Сценарий 3.3: Несуществующий id** - Body: { "id": "non_existent_id" } - Ожидаемый результат: 404 Not Found - Проверка сообщения об ошибке #### 7.3.4 Проверка прав доступа **Сценарий 4.1: Отметка без необходимых прав** - Предусловие: У пользователя нет прав на пометку аккаунтов - Ожидаемый результат: 401 Unauthorized - Проверка: доступ запрещен **Сценарий 4.2: Попытка пометки системного аккаунта** - Предусловие: Попытка пометки системного аккаунта - Ожидаемый результат: 401 Unauthorized - Проверка: доступ запрещен #### 7.3.5 Проверка состояния аккаунта **Сценарий 5.1: Пометка уже завершенного аккаунта** - Предусловие: Аккаунт уже помечен как завершенный - Ожидаемый результат: 200 OK - Проверка: повторная пометка не вызывает ошибок **Сценарий 5.2: Пометка удаленного аккаунта** - Предусловие: Аккаунт помечен как удаленный - Ожидаемый результат: 404 Not Found - Проверка: операция отклонена #### 7.3.6 Проверка безопасности **Сценарий 6.1: SQL-инъекции** - Body: { "id": "1' OR '1'='1" } - Ожидаемый результат: 400 Bad Request - Проверка: инъекция не выполнена **Сценарий 6.2: XSS-атаки** - Body: { "id": "" } - Ожидаемый результат: 400 Bad Request - Проверка: XSS-код не выполнен #### 7.3.7 Проверка производительности **Сценарий 7.1: Время выполнения** - Проверка: время выполнения операции < 1s - Проверка: стабильность времени при повторных запросах **Сценарий 7.2: Нагрузочное тестирование** - Проверка: система корректно обрабатывает множественные запросы - Проверка: отсутствие утечек памяти #### 7.3.8 Граничные случаи **Сценарий 8.1: Пометка аккаунта с большим количеством данных** - Предусловие: Аккаунт имеет множество связанных данных - Ожидаемый результат: 200 OK - Проверка: все данные успешно обработаны **Сценарий 8.2: Пометка во время активных операций** - Предусловие: Активные операции с аккаунтом - Ожидаемый результат: 200 OK - Проверка: корректная обработка конкурентных запросов #### 7.3.9 Обработка ошибок **Сценарий 9.1: Внутренняя ошибка сервера** - Предусловие: Имитация сбоя базы данных - Ожидаемый результат: 500 Internal Server Error - Проверка: информативное сообщение об ошибке **Сценарий 9.2: Таймаут соединения** - Предусловие: Имитация таймаута - Ожидаемый результат: 500 Internal Server Error - Проверка: корректная обработка таймаута ### 7.4 Особые моменты для тестирования 1. **Транзакционность:** - Проверка атомарности операции пометки - Проверка отката при частичном выполнении - Проверка целостности данных после пометки 2. **Логирование:** - Проверка записи операции пометки - Проверка аудит-логов - Проверка логов связанных операций 3. **Мониторинг:** - Проверка метрик выполнения операций - Проверка алертов при ошибках - Проверка мониторинга связанных операций 4. **Восстановление:** - Проверка возможности отмены пометки - Проверка истории изменений статуса ### 7.5 Критерии приемки 1. Все тестовые сценарии пройдены успешно 2. Время выполнения операции соответствует требованиям 3. Обработка ошибок соответствует спецификации 4. Безопасность соответствует стандартам 5. Логирование и мониторинг работают корректно 6. Транзакционность работает корректно 7. Статус аккаунта успешно обновляется 8. Контроль доступа работает корректно ## 8. POST /account/leadtarget ### 8.1 Описание Добавление целевого адреса для отправки клиентских запросов. ### 8.2 Базовые требования - Требуется JWT токен авторизации (bearerAuth) - Обязательные поля в теле запроса: type, quizID, target - Поддерживает HTTP коды ответа: 200, 208, 400, 401, 404, 500 ### 8.3 Тестовые сценарии #### 8.3.1 Успешное добавление целевого адреса **Предусловия:** - Пользователь авторизован - JWT токен валиден - У пользователя есть права на добавление целевых адресов **Входные данные:** - Метод: POST - URL: /account/leadtarget - Headers: - Authorization: Bearer {valid_jwt_token} - Content-Type: application/json - Body: ```json { "type": "mail", "quizID": 123, "target": "example@mail.com", "name": "Example Channel" } ``` **Ожидаемый результат:** - HTTP Status: 200 OK - Content-Type: application/json **Проверки:** 1. Целевой адрес успешно добавлен 2. Данные корректно сохранены в базе 3. Все обязательные поля присутствуют 4. Значения полей соответствуют переданным данным #### 8.3.2 Проверка авторизации **Сценарий 2.1: Отсутствие токена** - Headers: без Authorization - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.2: Невалидный токен** - Headers: Authorization: Bearer invalid_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.3: Истекший токен** - Headers: Authorization: Bearer expired_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке #### 8.3.3 Проверка входных данных **Сценарий 3.1: Отсутствие обязательных полей** - Body: { "type": "mail" } - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке **Сценарий 3.2: Невалидный тип** - Body: { "type": "invalid", "quizID": 123, "target": "example@mail.com" } - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке **Сценарий 3.3: Невалидный формат target** - Body: { "type": "mail", "quizID": 123, "target": "invalid_email" } - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке #### 8.3.4 Проверка дублирования **Сценарий 4.1: Добавление существующего target** - Предусловие: Target уже существует - Ожидаемый результат: 208 Already Reported - Проверка сообщения об ошибке **Сценарий 4.2: Добавление с разным регистром** - Предусловие: Target существует с другим регистром - Ожидаемый результат: 208 Already Reported - Проверка сообщения об ошибке #### 8.3.5 Проверка безопасности **Сценарий 5.1: SQL-инъекции** - Body: { "type": "mail", "quizID": "1' OR '1'='1", "target": "example@mail.com" } - Ожидаемый результат: 400 Bad Request - Проверка: инъекция не выполнена **Сценарий 5.2: XSS-атаки** - Body: { "type": "mail", "quizID": 123, "target": "" } - Ожидаемый результат: 400 Bad Request - Проверка: XSS-код не выполнен #### 8.3.6 Проверка производительности **Сценарий 6.1: Время выполнения** - Проверка: время выполнения операции < 1s - Проверка: стабильность времени при повторных запросах **Сценарий 6.2: Нагрузочное тестирование** - Проверка: система корректно обрабатывает множественные запросы - Проверка: отсутствие утечек памяти #### 8.3.7 Граничные случаи **Сценарий 7.1: Максимальная длина полей** - Body: { "type": "mail", "quizID": 123, "target": "very_long_email@domain.com", "name": "very_long_name" } - Ожидаемый результат: 200 OK - Проверка: данные сохранены корректно **Сценарий 7.2: Специальные символы** - Body: { "type": "mail", "quizID": 123, "target": "special!@#$%^&*()@domain.com", "name": "Special Name!" } - Ожидаемый результат: 200 OK - Проверка: данные сохранены корректно #### 8.3.8 Обработка ошибок **Сценарий 8.1: Внутренняя ошибка сервера** - Предусловие: Имитация сбоя базы данных - Ожидаемый результат: 500 Internal Server Error - Проверка: информативное сообщение об ошибке **Сценарий 8.2: Таймаут соединения** - Предусловие: Имитация таймаута - Ожидаемый результат: 500 Internal Server Error - Проверка: корректная обработка таймаута ### 8.4 Особые моменты для тестирования 1. **Валидация данных:** - Проверка форматов email, телефона, ID канала - Проверка уникальности target - Проверка допустимых значений type 2. **Транзакционность:** - Проверка атомарности операции добавления - Проверка отката при ошибках 3. **Логирование:** - Проверка записи операции добавления - Проверка аудит-логов 4. **Мониторинг:** - Проверка метрик добавления target - Проверка алертов при ошибках ### 8.5 Критерии приемки 1. Все тестовые сценарии пройдены успешно 2. Время выполнения операции соответствует требованиям 3. Обработка ошибок соответствует спецификации 4. Безопасность соответствует стандартам 5. Логирование и мониторинг работают корректно 6. Валидация данных работает корректно 7. Дублирование target обрабатывается корректно ## 9. PUT /account/leadtarget ### 9.1 Описание Обновление существующего целевого адреса. ### 9.2 Базовые требования - Требуется JWT токен авторизации (bearerAuth) - Обязательные поля в теле запроса: id, target - Поддерживает HTTP коды ответа: 200, 400, 401, 404, 500 ### 9.3 Тестовые сценарии #### 9.3.1 Успешное обновление целевого адреса **Предусловия:** - Пользователь авторизован - JWT токен валиден - У пользователя есть права на обновление целевых адресов - Целевой адрес существует **Входные данные:** - Метод: PUT - URL: /account/leadtarget - Headers: - Authorization: Bearer {valid_jwt_token} - Content-Type: application/json - Body: ```json { "id": 123, "target": "new_target@mail.com" } ``` **Ожидаемый результат:** - HTTP Status: 200 OK - Content-Type: application/json **Проверки:** 1. Целевой адрес успешно обновлен 2. Данные корректно сохранены в базе 3. Старое значение target заменено на новое 4. Остальные поля остались без изменений #### 9.3.2 Проверка авторизации **Сценарий 2.1: Отсутствие токена** - Headers: без Authorization - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.2: Невалидный токен** - Headers: Authorization: Bearer invalid_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.3: Истекший токен** - Headers: Authorization: Bearer expired_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке #### 9.3.3 Проверка входных данных **Сценарий 3.1: Отсутствие обязательных полей** - Body: { "id": 123 } - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке **Сценарий 3.2: Невалидный id** - Body: { "id": "invalid", "target": "example@mail.com" } - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке **Сценарий 3.3: Невалидный формат target** - Body: { "id": 123, "target": "invalid_email" } - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке #### 9.3.4 Проверка существования **Сценарий 4.1: Обновление несуществующего target** - Body: { "id": 999999, "target": "example@mail.com" } - Ожидаемый результат: 404 Not Found - Проверка сообщения об ошибке **Сценарий 4.2: Обновление удаленного target** - Предусловие: Target помечен как удаленный - Ожидаемый результат: 404 Not Found - Проверка сообщения об ошибке #### 9.3.5 Проверка безопасности **Сценарий 5.1: SQL-инъекции** - Body: { "id": "1' OR '1'='1", "target": "example@mail.com" } - Ожидаемый результат: 400 Bad Request - Проверка: инъекция не выполнена **Сценарий 5.2: XSS-атаки** - Body: { "id": 123, "target": "" } - Ожидаемый результат: 400 Bad Request - Проверка: XSS-код не выполнен #### 9.3.6 Проверка производительности **Сценарий 6.1: Время выполнения** - Проверка: время выполнения операции < 1s - Проверка: стабильность времени при повторных запросах **Сценарий 6.2: Нагрузочное тестирование** - Проверка: система корректно обрабатывает множественные запросы - Проверка: отсутствие утечек памяти #### 9.3.7 Граничные случаи **Сценарий 7.1: Максимальная длина target** - Body: { "id": 123, "target": "very_long_email@very_long_domain.com" } - Ожидаемый результат: 200 OK - Проверка: данные сохранены корректно **Сценарий 7.2: Специальные символы** - Body: { "id": 123, "target": "special!@#$%^&*()@domain.com" } - Ожидаемый результат: 200 OK - Проверка: данные сохранены корректно #### 9.3.8 Обработка ошибок **Сценарий 8.1: Внутренняя ошибка сервера** - Предусловие: Имитация сбоя базы данных - Ожидаемый результат: 500 Internal Server Error - Проверка: информативное сообщение об ошибке **Сценарий 8.2: Таймаут соединения** - Предусловие: Имитация таймаута - Ожидаемый результат: 500 Internal Server Error - Проверка: корректная обработка таймаута ### 9.4 Особые моменты для тестирования 1. **Валидация данных:** - Проверка форматов email, телефона, ID канала - Проверка уникальности нового target - Проверка существования id 2. **Транзакционность:** - Проверка атомарности операции обновления - Проверка отката при ошибках 3. **Логирование:** - Проверка записи операции обновления - Проверка аудит-логов - Проверка истории изменений 4. **Мониторинг:** - Проверка метрик обновления target - Проверка алертов при ошибках ### 9.5 Критерии приемки 1. Все тестовые сценарии пройдены успешно 2. Время выполнения операции соответствует требованиям 3. Обработка ошибок соответствует спецификации 4. Безопасность соответствует стандартам 5. Логирование и мониторинг работают корректно 6. Валидация данных работает корректно 7. Обновление target выполняется корректно 8. История изменений сохраняется ## 10. DELETE /account/leadtarget/{id} ### 10.1 Описание Удаление целевого адреса по его ID. ### 10.2 Базовые требования - Требуется JWT токен авторизации (bearerAuth) - ID целевого адреса передается в пути URL - Поддерживает HTTP коды ответа: 200, 400, 401, 500 ### 10.3 Тестовые сценарии #### 10.3.1 Успешное удаление целевого адреса **Предусловия:** - Пользователь авторизован - JWT токен валиден - У пользователя есть права на удаление целевых адресов - Целевой адрес существует и активен **Входные данные:** - Метод: DELETE - URL: /account/leadtarget/{valid_id} - Headers: - Authorization: Bearer {valid_jwt_token} **Ожидаемый результат:** - HTTP Status: 200 OK - Content-Type: application/json **Проверки:** 1. Целевой адрес успешно удален 2. Данные корректно удалены из базы 3. Последующие запросы к этому ID возвращают 404 4. Все связанные данные обработаны корректно #### 10.3.2 Проверка авторизации **Сценарий 2.1: Отсутствие токена** - Headers: без Authorization - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.2: Невалидный токен** - Headers: Authorization: Bearer invalid_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.3: Истекший токен** - Headers: Authorization: Bearer expired_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке #### 10.3.3 Проверка входных данных **Сценарий 3.1: Невалидный ID** - URL: /account/leadtarget/invalid_id - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке **Сценарий 3.2: Отсутствующий ID** - URL: /account/leadtarget/ - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке **Сценарий 3.3: Несуществующий ID** - URL: /account/leadtarget/999999 - Ожидаемый результат: 200 OK - Проверка: операция завершается успешно #### 10.3.4 Проверка прав доступа **Сценарий 4.1: Удаление без необходимых прав** - Предусловие: У пользователя нет прав на удаление целевых адресов - Ожидаемый результат: 401 Unauthorized - Проверка: доступ запрещен **Сценарий 4.2: Попытка удаления чужого целевого адреса** - Предусловие: Целевой адрес принадлежит другому пользователю - Ожидаемый результат: 401 Unauthorized - Проверка: доступ запрещен #### 10.3.5 Проверка состояния целевого адреса **Сценарий 5.1: Удаление уже удаленного целевого адреса** - Предусловие: Целевой адрес уже помечен как удаленный - Ожидаемый результат: 200 OK - Проверка: повторное удаление не вызывает ошибок **Сценарий 5.2: Удаление активного целевого адреса** - Предусловие: Целевой адрес активен и используется - Ожидаемый результат: 200 OK - Проверка: все связанные операции обработаны корректно #### 10.3.6 Проверка безопасности **Сценарий 6.1: SQL-инъекции** - URL: /account/leadtarget/1' OR '1'='1 - Ожидаемый результат: 400 Bad Request - Проверка: инъекция не выполнена **Сценарий 6.2: XSS-атаки** - URL: /account/leadtarget/ - Ожидаемый результат: 400 Bad Request - Проверка: XSS-код не выполнен #### 10.3.7 Проверка производительности **Сценарий 7.1: Время выполнения** - Проверка: время выполнения операции < 1s - Проверка: стабильность времени при повторных запросах **Сценарий 7.2: Нагрузочное тестирование** - Проверка: система корректно обрабатывает множественные запросы на удаление - Проверка: отсутствие утечек памяти #### 10.3.8 Граничные случаи **Сценарий 8.1: Удаление целевого адреса с большим количеством связанных данных** - Предусловие: Целевой адрес имеет множество связанных данных - Ожидаемый результат: 200 OK - Проверка: все данные успешно удалены **Сценарий 8.2: Удаление во время активных операций** - Предусловие: Активные операции с целевым адресом - Ожидаемый результат: 200 OK - Проверка: корректная обработка конкурентных запросов #### 10.3.9 Обработка ошибок **Сценарий 9.1: Внутренняя ошибка сервера** - Предусловие: Имитация сбоя базы данных - Ожидаемый результат: 500 Internal Server Error - Проверка: информативное сообщение об ошибке **Сценарий 9.2: Таймаут соединения** - Предусловие: Имитация таймаута - Ожидаемый результат: 500 Internal Server Error - Проверка: корректная обработка таймаута ### 10.4 Особые моменты для тестирования 1. **Транзакционность:** - Проверка атомарности операции удаления - Проверка отката при частичном удалении - Проверка целостности данных после удаления 2. **Логирование:** - Проверка записи операции удаления - Проверка аудит-логов - Проверка логов связанных операций 3. **Мониторинг:** - Проверка метрик удаления целевых адресов - Проверка алертов при ошибках - Проверка мониторинга связанных операций 4. **Восстановление:** - Проверка возможности восстановления данных - Проверка периода хранения удаленных данных ### 10.5 Критерии приемки 1. Все тестовые сценарии пройдены успешно 2. Время выполнения операции соответствует требованиям 3. Обработка ошибок соответствует спецификации 4. Безопасность соответствует стандартам 5. Логирование и мониторинг работают корректно 6. Транзакционность работает корректно 7. Целевой адрес успешно удаляется 8. Контроль доступа работает корректно ## 11. GET /account/leadtarget/{quizID} ### 11.1 Описание Получение целевого адреса по ID квиза. ### 11.2 Базовые требования - Требуется JWT токен авторизации (bearerAuth) - ID квиза передается в пути URL - Поддерживает HTTP коды ответа: 200, 400, 401, 404, 500 ### 11.3 Тестовые сценарии #### 11.3.1 Успешное получение целевого адреса **Предусловия:** - Пользователь авторизован - JWT токен валиден - У пользователя есть права на просмотр целевых адресов - Квиз существует и имеет связанный целевой адрес **Входные данные:** - Метод: GET - URL: /account/leadtarget/{valid_quiz_id} - Headers: - Authorization: Bearer {valid_jwt_token} **Ожидаемый результат:** - HTTP Status: 200 OK - Content-Type: application/json - Тело ответа содержит объект LeadTarget со следующими полями: - id (integer) - accountID (string) - type (string) - target (string) - quizID (integer) - inviteLink (string, опционально) - deleted (boolean) - createdAt (date-time) **Проверки:** 1. Все обязательные поля присутствуют в ответе 2. Формат даты createdAt соответствует ISO 8601 3. Значения полей соответствуют данным в базе 4. Тип целевого адреса соответствует ожидаемому #### 11.3.2 Проверка авторизации **Сценарий 2.1: Отсутствие токена** - Headers: без Authorization - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.2: Невалидный токен** - Headers: Authorization: Bearer invalid_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке **Сценарий 2.3: Истекший токен** - Headers: Authorization: Bearer expired_token - Ожидаемый результат: 401 Unauthorized - Проверка сообщения об ошибке #### 11.3.3 Проверка входных данных **Сценарий 3.1: Невалидный quizID** - URL: /account/leadtarget/invalid_id - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке **Сценарий 3.2: Отсутствующий quizID** - URL: /account/leadtarget/ - Ожидаемый результат: 400 Bad Request - Проверка сообщения об ошибке **Сценарий 3.3: Несуществующий quizID** - URL: /account/leadtarget/999999 - Ожидаемый результат: 404 Not Found - Проверка сообщения об ошибке #### 11.3.4 Проверка прав доступа **Сценарий 4.1: Просмотр без необходимых прав** - Предусловие: У пользователя нет прав на просмотр целевых адресов - Ожидаемый результат: 401 Unauthorized - Проверка: доступ запрещен **Сценарий 4.2: Попытка просмотра чужого целевого адреса** - Предусловие: Целевой адрес принадлежит другому пользователю - Ожидаемый результат: 401 Unauthorized - Проверка: доступ запрещен #### 11.3.5 Проверка состояния целевого адреса **Сценарий 5.1: Получение удаленного целевого адреса** - Предусловие: Целевой адрес помечен как удаленный - Ожидаемый результат: 404 Not Found - Проверка сообщения об ошибке **Сценарий 5.2: Получение активного целевого адреса** - Предусловие: Целевой адрес активен - Ожидаемый результат: 200 OK - Проверка: все данные возвращены корректно #### 11.3.6 Проверка безопасности **Сценарий 6.1: SQL-инъекции** - URL: /account/leadtarget/1' OR '1'='1 - Ожидаемый результат: 400 Bad Request - Проверка: инъекция не выполнена **Сценарий 6.2: XSS-атаки** - URL: /account/leadtarget/ - Ожидаемый результат: 400 Bad Request - Проверка: XSS-код не выполнен #### 11.3.7 Проверка производительности **Сценарий 7.1: Время выполнения** - Проверка: время выполнения операции < 300ms - Проверка: стабильность времени при повторных запросах **Сценарий 7.2: Нагрузочное тестирование** - Проверка: система выдерживает 100 последовательных запросов - Проверка: отсутствие утечек памяти #### 11.3.8 Граничные случаи **Сценарий 8.1: Получение целевого адреса с большим количеством данных** - Предусловие: Целевой адрес имеет множество связанных данных - Ожидаемый результат: 200 OK - Проверка: все данные возвращены корректно **Сценарий 8.2: Получение во время активных операций** - Предусловие: Активные операции с целевым адресом - Ожидаемый результат: 200 OK - Проверка: корректная обработка конкурентных запросов #### 11.3.9 Обработка ошибок **Сценарий 9.1: Внутренняя ошибка сервера** - Предусловие: Имитация сбоя базы данных - Ожидаемый результат: 500 Internal Server Error - Проверка: информативное сообщение об ошибке **Сценарий 9.2: Таймаут соединения** - Предусловие: Имитация таймаута - Ожидаемый результат: 500 Internal Server Error - Проверка: корректная обработка таймаута ### 11.4 Особые моменты для тестирования 1. **Кэширование:** - Проверка правильности кэширования результатов - Проверка инвалидации кэша при изменении данных - Проверка TTL кэша 2. **Логирование:** - Проверка записи запросов к целевым адресам - Проверка аудит-логов - Проверка логов доступа 3. **Мониторинг:** - Проверка метрик производительности - Проверка алертов при ошибках - Проверка мониторинга доступа 4. **Безопасность:** - Проверка контроля доступа - Проверка валидации входных данных - Проверка защиты от атак ### 11.5 Критерии приемки 1. Все тестовые сценарии пройдены успешно 2. Время ответа соответствует требованиям 3. Обработка ошибок соответствует спецификации 4. Безопасность соответствует стандартам 5. Логирование и мониторинг работают корректно 6. Кэширование работает эффективно 7. Контроль доступа работает корректно 8. Данные возвращаются в корректном формате ## 13. POST /question/create ### Description Creates a new question in the system. The endpoint requires authentication and accepts a JSON payload with question details. ### Request - Method: POST - Path: /question/create - Authentication: Required (Bearer Token) - Content-Type: application/json #### Request Body Schema ```json { "quiz_id": "integer (required)", "title": "string (required, max 512 chars)", "description": "string (optional)", "type": "string (required, enum)", "required": "boolean (optional)", "page": "integer (optional)", "content": "string (optional, JSON)" } ``` ### Response - Content-Type: application/json #### Success Response (200) ```json { "id": "integer", "quiz_id": "integer", "title": "string", "description": "string", "type": "string", "required": "boolean", "deleted": "boolean", "page": "integer", "content": "string", "version": "integer", "parent_ids": ["integer"], "created_at": "string (date-time)", "updated_at": "string (date-time)" } ``` #### Error Responses - 400 Bad Request - 401 Unauthorized - 406 Not Acceptable - 422 Validation Error - 424 Failed Dependency - 500 Internal Server Error ### Test Cases #### TC1: Create Basic Question **Objective**: Verify that a question can be created with minimal required fields **Preconditions**: - Valid authentication token - Quiz exists in the system **Test Steps**: 1. Send POST request with minimal required fields: ```json { "quiz_id": 1, "title": "Test Question", "type": "text" } ``` **Expected Results**: - Status Code: 200 - Response contains created question with all fields - Question ID is generated - Created_at and updated_at timestamps are set #### TC2: Create Question with All Fields **Objective**: Verify that a question can be created with all possible fields **Preconditions**: - Valid authentication token - Quiz exists in the system **Test Steps**: 1. Send POST request with all fields: ```json { "quiz_id": 1, "title": "Comprehensive Test Question", "description": "This is a detailed question description", "type": "variant", "required": true, "page": 1, "content": "{\"options\": [\"Option 1\", \"Option 2\"]}" } ``` **Expected Results**: - Status Code: 200 - Response contains all provided fields - Question is properly created with all attributes #### TC3: Create Question with Different Types **Objective**: Verify that questions can be created with all supported types **Preconditions**: - Valid authentication token - Quiz exists in the system **Test Steps**: 1. Create questions with each type: - text - variant - images - select - varimg - emoji - date - number - page - rating - result - file **Expected Results**: - Status Code: 200 for each type - Questions are created successfully - Type-specific content is properly stored #### TC4: Invalid Quiz ID **Objective**: Verify error handling for non-existent quiz ID **Preconditions**: - Valid authentication token **Test Steps**: 1. Send POST request with invalid quiz_id: ```json { "quiz_id": 999999, "title": "Test Question", "type": "text" } ``` **Expected Results**: - Status Code: 400 or 424 - Error message indicates invalid quiz ID #### TC5: Missing Required Fields **Objective**: Verify validation of required fields **Preconditions**: - Valid authentication token **Test Steps**: 1. Send POST request without quiz_id 2. Send POST request without title 3. Send POST request without type **Expected Results**: - Status Code: 400 - Error message indicates missing required fields #### TC6: Invalid Question Type **Objective**: Verify validation of question type **Preconditions**: - Valid authentication token - Quiz exists in the system **Test Steps**: 1. Send POST request with invalid type: ```json { "quiz_id": 1, "title": "Test Question", "type": "invalid_type" } ``` **Expected Results**: - Status Code: 400 or 422 - Error message indicates invalid question type #### TC7: Title Length Validation **Objective**: Verify title length constraints **Preconditions**: - Valid authentication token - Quiz exists in the system **Test Steps**: 1. Send POST request with title exceeding 512 characters 2. Send POST request with empty title **Expected Results**: - Status Code: 400 or 422 - Error message indicates title length violation #### TC8: Invalid Content Format **Objective**: Verify content JSON format validation **Preconditions**: - Valid authentication token - Quiz exists in the system **Test Steps**: 1. Send POST request with invalid JSON in content field 2. Send POST request with content not matching type requirements **Expected Results**: - Status Code: 400 or 422 - Error message indicates invalid content format #### TC9: Unauthorized Access **Objective**: Verify authentication requirement **Preconditions**: None **Test Steps**: 1. Send POST request without authentication token **Expected Results**: - Status Code: 401 - Error message indicates authentication required #### TC10: Rate Limiting **Objective**: Verify rate limiting behavior **Preconditions**: - Valid authentication token - Quiz exists in the system **Test Steps**: 1. Send multiple POST requests in quick succession **Expected Results**: - Status Code: 429 (if rate limited) - Error message indicates rate limit exceeded ### Special Testing Considerations #### Content Validation - Verify that content JSON matches the expected format for each question type - Test with various content structures for each type - Validate that content is properly stored and can be retrieved #### Type-Specific Requirements - Each question type may have specific content requirements - Test creation with valid and invalid content for each type - Verify that type-specific validation rules are enforced #### Quiz Relationship - Verify that questions are properly associated with the quiz - Test creation of questions for different quizzes - Verify that quiz_id references are properly validated #### Version Control - Check if version tracking is implemented - Verify that new questions start with appropriate version numbers - Test version incrementing if applicable #### Performance - Test creation of multiple questions in sequence - Monitor response times for different question types - Verify system behavior under load #### Security - Verify that questions can only be created by authorized users - Test access control for different user roles - Verify that sensitive data is properly handled #### Data Integrity - Verify that all fields are properly stored - Test creation with special characters in text fields - Verify that timestamps are properly set - Check that required fields are properly enforced