Appearance
Список возможных ошибок ( не для публикации)
Сценарии появления ошибок на основе тестирования запросов с разными параметрами.
cart
| Сценарий | Пример запроса | Код ошибки |
|---|---|---|
| HTTP Method Validation | ||
| Использование не-POST метода | GET /push?event=cart&items[][id]=123 | 405 Method Not Allowed |
| Authentication & Shop Validation | ||
Запрос без shop_id | POST /push (без параметров) | 401 Unauthorized |
Пустой shop_id | POST /push?shop_id=&event=cart&items[][id]=123 | 422 Unprocessable |
Некорректный формат shop_id (не 30 hex) | POST /push?shop_id=INVALID_ID&event=cart&items[][id]=123 | 422 Unprocessable |
Несуществующий shop_id | POST /push?shop_id=000000000000000000000000000000&event=cart&items[][id]=123 | 404 Not Found |
| Device Validation | ||
Корректный shop_id, но без did | POST /push?shop_id={valid}&event=cart&items[][id]=123 | 401 Unauthorized |
Пустой did (трактуется как отсутствие) | POST /push?shop_id={valid}&did=&event=cart&items[][id]=123 | 401 Unauthorized |
Некорректный формат did | POST /push?shop_id={valid}&did=INVALID_ID&event=cart&items[][id]=123 | 422 Unprocessable |
Несуществующий did | POST /push?shop_id={valid}&did=0000000000&event=cart&items[][id]=123 | 404 Not Found |
| Shop Status Validation | ||
Магазин неактивен (non-active) | POST /push?shop_id={non_active}&did={valid}&event=cart&items[][id]=123 | 403 Access Denied |
Магазин ограничен (restricted) | POST /push?shop_id={restricted}&did={valid}&event=cart&items[][id]=123 | 403 Access Denied |
| У магазина истекла оплата | POST /push?shop_id={unpaid}&did={valid}&event=cart&items[][id]=123 | 403 Access Denied |
| Required Parameters Validation | ||
Отсутствует параметр event | POST /push?items[][id]=123&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой параметр event | POST /push?event=&items[][id]=123&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректное значение event (не 'cart') | POST /push?event=INVALID&items[][id]=123&shop_id={valid}&did={valid} | 422 Unprocessable |
| Items Validation | ||
Отсутствует параметр items | POST /push?event=cart&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой items (не массив) | POST /push?event=cart&items=&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой массив items (добавление) | POST /push (JSON: {"event": "cart", "items": [], ...}) | 422 Unprocessable |
Пустой массив items c full_cart: true | POST /push (JSON: {"event": "cart", "full_cart": true, "items": [], ...}) | 200 OK |
Все items отфильтрованы из-за некорректного ID | POST /push (JSON: {"event": "cart", "items": [{"id": "Hello\\World"}], ...}) | 422 Unprocessable |
| Optional Parameters Validation | ||
Пустой stream | POST /push?event=cart&items[][id]=123&stream=&shop_id={valid}&did={valid} | 422 Unprocessable |
stream не строка (массив) | POST /push?event=cart&items[][id]=123&stream[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой sid | POST /push?event=cart&items[][id]=123&sid=&shop_id={valid}&did={valid} | 422 Unprocessable |
sid не строка | POST /push?event=cart&items[][id]=123&sid[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой referer | POST /push?event=cart&items[][id]=123&referer=&shop_id={valid}&did={valid} | 422 Unprocessable |
referer не строка | POST /push?event=cart&items[][id]=123&referer[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой segment | POST /push?event=cart&items[][id]=123&segment=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный segment (не 'A' или 'B') | POST /push?event=cart&items[][id]=123&segment=C&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой recommended_by | POST /push?event=cart&items[][id]=123&recommended_by=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный recommended_by | POST /push?event=cart&items[][id]=123&recommended_by=INVALID&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой recommended_code | POST /push?event=cart&items[][id]=123&recommended_code=&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой source (строка) | POST /push?event=cart&items[][id]=123&source=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный source (не JSON) | POST /push?event=cart&items[][id]=123&source=not-json&shop_id={valid}&did={valid} | 422 Unprocessable |
| Item Amount/Quantity Logic | ||
items.amount: -1 (ниже минимума) | POST /push (JSON: {"items": [{"id": "x", "amount": -1}], ...}) | 200 OK (amount становится 1) |
items.amount: 1001 (выше максимума) | POST /push (JSON: {"items": [{"id": "x", "amount": 1001}], ...}) | 200 OK (amount становится 1000) |
items.quantity: -1 (синоним amount) | POST /push (JSON: {"items": [{"id": "x", "quantity": -1}], ...}) | 200 OK (amount становится 1) |
| Item Price Logic | ||
items.price: -1 (отрицательное число) | POST /push (JSON: {"items": [{"id": "x", "price": -1}], ...}) | 200 OK (поле price отсутствует) |
items.price: -0.1 (отрицательный float) | POST /push (JSON: {"items": [{"id": "x", "price": -0.1}], ...}) | 200 OK (поле price отсутствует) |
items.price: '-666' (отрицательная строка) | POST /push (JSON: {"items": [{"id": "x", "price": "-666"}], ...}) | 200 OK (поле price отсутствует) |
items.price: 'asdasd' (не число) | POST /push (JSON: {"items": [{"id": "x", "price": "asdasd"}], ...}) | 200 OK (поле price отсутствует) |
| Item Other Fields Logic | ||
items.line_id: '' (пустая строка) | POST /push (JSON: {"items": [{"id": "x", "line_id": ""}], ...}) | 200 OK (поле line_id отсутствует) |
items.fashion_size: '' (пустая строка) | POST /push (JSON: {"items": [{"id": "x", "fashion_size": ""}], ...}) | 200 OK (поле fashion_size отсутствует) |
Пустой items.id | POST /push (JSON: {"items": [{"id": ""}, {"id": "valid"}], ...}) | 200 OK (пустой ID фильтруется) |
Слишком длинный items.id | POST /push (JSON: {"items": [{"id": "aaaa...(>255 chars)"}, ...]}) | 200 OK (длинный ID фильтруется) |
wish
| Сценарий | Пример запроса | Код ошибки |
|---|---|---|
| HTTP Method Validation | ||
| Использование не-POST метода | GET /push?event=wish&items[][id]=123 | 405 Method Not Allowed |
| Authentication & Shop Validation | ||
Запрос без shop_id | POST /push (без параметров) | 401 Unauthorized |
Пустой shop_id | POST /push?shop_id=&event=wish&items[][id]=123 | 422 Unprocessable |
Некорректный формат shop_id (не 30 hex) | POST /push?shop_id=INVALID_ID&event=wish&items[][id]=123 | 422 Unprocessable |
Несуществующий shop_id | POST /push?shop_id=000000000000000000000000000000&event=wish&items[][id]=123 | 404 Not Found |
| Device Validation | ||
Корректный shop_id, но без did | POST /push?shop_id={valid}&event=wish&items[][id]=123 | 401 Unauthorized |
Пустой did (трактуется как отсутствие) | POST /push?shop_id={valid}&did=&event=wish&items[][id]=123 | 401 Unauthorized |
Некорректный формат did | POST /push?shop_id={valid}&did=INVALID_ID&event=wish&items[][id]=123 | 422 Unprocessable |
Несуществующий did | POST /push?shop_id={valid}&did=0000000000&event=wish&items[][id]=123 | 404 Not Found |
| Shop Status Validation | ||
Магазин неактивен (non-active) | POST /push?shop_id={non_active}&did={valid}&event=wish&items[][id]=123 | 403 Access Denied |
Магазин ограничен (restricted) | POST /push?shop_id={restricted}&did={valid}&event=wish&items[][id]=123 | 403 Access Denied |
| У магазина истекла оплата | POST /push?shop_id={unpaid}&did={valid}&event=wish&items[][id]=123 | 403 Access Denied |
| Required Parameters Validation | ||
Отсутствует параметр event | POST /push?items[][id]=123&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой параметр event | POST /push?event=&items[][id]=123&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректное значение event (не 'wish') | POST /push?event=INVALID&items[][id]=123&shop_id={valid}&did={valid} | 422 Unprocessable |
| Items Validation | ||
Отсутствует параметр items | POST /push?event=wish&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой items (не массив) | POST /push?event=wish&items=&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой массив items (добавление) | POST /push (JSON: {"event": "wish", "items": [], ...}) | 422 Unprocessable |
Пустой массив items c full_wish: true | POST /push (JSON: {"event": "wish", "full_wish": true, "items": [], ...}) | 200 OK |
Все items отфильтрованы из-за некорректного ID | POST /push (JSON: {"event": "wish", "items": [{"id": "Hello\\World"}], ...}) | 422 Unprocessable |
| Optional Parameters Validation | ||
Пустой stream | POST /push?event=wish&items[][id]=123&stream=&shop_id={valid}&did={valid} | 422 Unprocessable |
stream не строка (массив) | POST /push?event=wish&items[][id]=123&stream[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой sid | POST /push?event=wish&items[][id]=123&sid=&shop_id={valid}&did={valid} | 422 Unprocessable |
sid не строка | POST /push?event=wish&items[][id]=123&sid[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой referer | POST /push?event=wish&items[][id]=123&referer=&shop_id={valid}&did={valid} | 422 Unprocessable |
referer не строка | POST /push?event=wish&items[][id]=123&referer[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой segment | POST /push?event=wish&items[][id]=123&segment=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный segment (не 'A' или 'B') | POST /push?event=wish&items[][id]=123&segment=C&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой recommended_by | POST /push?event=wish&items[][id]=123&recommended_by=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный recommended_by | POST /push?event=wish&items[][id]=123&recommended_by=INVALID&shop_id={valid}&did={valid} | 422 Unprocessable |
recommended_by не строка (массив) | POST /push?event=wish&items[][id]=123&recommended_by[]=dynamic&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой recommended_code | POST /push?event=wish&items[][id]=123&recommended_code=&shop_id={valid}&did={valid} | 422 Unprocessable |
recommended_code не строка | POST /push?event=wish&items[][id]=123&recommended_code[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой source (строка) | POST /push?event=wish&items[][id]=123&source=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный source (не JSON) | POST /push?event=wish&items[][id]=123&source=not-json&shop_id={valid}&did={valid} | 422 Unprocessable |
| Source Logic | ||
Корректный JSON в source (строка) | POST /push (JSON: {"event": "wish", "source": "{\"code\": \"abc\", \"from\": \"dynamic\"}", ...}) | 200 OK (recommended_by=dynamic, recommended_code=abc) |
Корректный объект в source | POST /push (JSON: {"event": "wish", "source": {"code": "abc", "from": "dynamic"}, ...}) | 200 OK (recommended_by=dynamic, recommended_code=abc) |
Некорректный source.from | POST /push (JSON: {"source": "{\"code\": \"abc\", \"from\": \"example\"}"}) | 200 OK (source игнорируется, поля null) |
Отсутствует source.from в JSON | POST /push (JSON: {"source": "{\"code\": \"abc\"}"}) | 200 OK (source игнорируется, поля null) |
Отсутствует source.code в JSON | POST /push (JSON: {"source": "{\"from\": \"dynamic\"}"}) | 200 OK (source игнорируется, поля null) |
| Item Amount/Quantity Logic | ||
items.amount: -1 (ниже минимума) | POST /push (JSON: {"items": [{"id": "x", "amount": -1}], ...}) | 200 OK (amount становится 1) |
items.amount: 1001 (выше максимума) | POST /push (JSON: {"items": [{"id": "x", "amount": 1001}], ...}) | 200 OK (amount становится 1000) |
items.quantity: -1 (синоним amount) | POST /push (JSON: {"items": [{"id": "x", "quantity": -1}], ...}) | 200 OK (amount становится 1) |
| Item Price Logic | ||
items.price: -1 (отрицательное число) | POST /push (JSON: {"items": [{"id": "x", "price": -1}], ...}) | 200 OK (поле price отсутствует) |
items.price: -0.1 (отрицательный float) | POST /push (JSON: {"items": [{"id": "x", "price": -0.1}], ...}) | 200 OK (поле price отсутствует) |
items.price: '-666' (отрицательная строка) | POST /push (JSON: {"items": [{"id": "x", "price": "-666"}], ...}) | 200 OK (поле price отсутствует) |
items.price: 'asdasd' (не число) | POST /push (JSON: {"items": [{"id": "x", "price": "asdasd"}], ...}) | 200 OK (поле price отсутствует) |
| Item Other Fields Logic | ||
items.line_id: '' (пустая строка) | POST /push (JSON: {"items": [{"id": "x", "line_id": ""}], ...}) | 200 OK (поле line_id отсутствует) |
items.fashion_size: '' (пустая строка) | POST /push (JSON: {"items": [{"id": "x", "fashion_size": ""}], ...}) | 200 OK (поле fashion_size отсутствует) |
Пустой items.id | POST /push (JSON: {"items": [{"id": ""}, {"id": "valid"}], ...}) | 200 OK (пустой ID фильтруется) |
Слишком длинный items.id | POST /push (JSON: {"items": [{"id": "aaaa...(>255 chars)"}, ...]}) | 200 OK (длинный ID фильтруется) |
| Successful Tracking | ||
| Трекинг добавления одного товара в избранное | POST /push?event=wish&stream=test&items[][id]=123&shop_id={valid}&did={valid} | 200 OK |
| Трекинг добавления нескольких товаров в избранное | POST /push (JSON: {"event": "wish", "items": [{"id": "first"}, {"id": "second"}], ...}) | 200 OK |
Трекинг с full_wish=true (замена всего списка) | POST /push (JSON: {"event": "wish", "full_wish": true, "items": [{"id": "item_1"}, {"id": "item_2"}], ...}) | 200 OK |
Трекинг с некорректным типом full_wish (строка "yes") | POST /push (JSON: {"event": "wish", "full_wish": "yes", ...}) | 200 OK (кастуется в true) |
| Трекинг со всеми опциональными параметрами | POST /push (JSON: {"event": "wish", "stream": "test", "sid": "test-session-id", "segment": "A", "referer": "https://example.com", "recommended_by": "dynamic", "recommended_code": "abc123", ...}) | 200 OK |
purchase
| Сценарий | Пример запроса | Код ошибки |
|---|---|---|
| HTTP Method Validation | ||
| Использование не-POST метода | GET /push?event=purchase&items[][id]=123 | 405 Method Not Allowed |
| Authentication & Shop Validation | ||
Запрос без shop_id | POST /push (без параметров) | 401 Unauthorized |
Пустой shop_id | POST /push?shop_id=&event=purchase&items[][id]=123 | 422 Unprocessable |
Некорректный формат shop_id (не 30 hex) | POST /push?shop_id=INVALID_ID&event=purchase&items[][id]=123 | 422 Unprocessable |
Несуществующий shop_id | POST /push?shop_id=000000000000000000000000000000&event=purchase&items[][id]=123 | 404 Not Found |
| Device Validation | ||
Корректный shop_id, но без did | POST /push?shop_id={valid}&event=purchase&items[][id]=123 | 401 Unauthorized |
Пустой did (трактуется как отсутствие) | POST /push?shop_id={valid}&did=&event=purchase&items[][id]=123 | 401 Unauthorized |
Некорректный формат did | POST /push?shop_id={valid}&did=INVALID_ID&event=purchase&items[][id]=123 | 422 Unprocessable |
Несуществующий did | POST /push?shop_id={valid}&did=0000000000&event=purchase&items[][id]=123 | 404 Not Found |
| Shop Status Validation | ||
Магазин неактивен (non-active) | POST /push?shop_id={non_active}&did={valid}&event=purchase&items[][id]=123 | 403 Access Denied |
Магазин ограничен (restricted) | POST /push?shop_id={restricted}&did={valid}&event=purchase&items[][id]=123 | 403 Access Denied |
| У магазина истекла оплата | POST /push?shop_id={unpaid}&did={valid}&event=purchase&items[][id]=123 | 403 Access Denied |
| Required Parameters Validation | ||
Отсутствует параметр event | POST /push?items[][id]=123&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой параметр event | POST /push?event=&items[][id]=123&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректное значение event (не 'purchase') | POST /push?event=INVALID&items[][id]=123&shop_id={valid}&did={valid} | 422 Unprocessable |
| Items Validation | ||
Отсутствует параметр items | POST /push?event=purchase&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой items (не массив) | POST /push?event=purchase&items=&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой массив items | POST /push (JSON: {"event": "purchase", "items": [], ...}) | 422 Unprocessable |
Все items отфильтрованы из-за некорректного ID | POST /push (JSON: {"event": "purchase", "items": [{"id": "Hello\\World"}], ...}) | 422 Unprocessable |
| Optional Parameters Validation | ||
Пустой stream | POST /push?event=purchase&items[][id]=123&stream=&shop_id={valid}&did={valid} | 422 Unprocessable |
stream не строка (массив) | POST /push?event=purchase&items[][id]=123&stream[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой sid | POST /push?event=purchase&items[][id]=123&sid=&shop_id={valid}&did={valid} | 422 Unprocessable |
sid не строка | POST /push?event=purchase&items[][id]=123&sid[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой referer | POST /push?event=purchase&items[][id]=123&referer=&shop_id={valid}&did={valid} | 422 Unprocessable |
referer не строка | POST /push?event=purchase&items[][id]=123&referer[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой segment | POST /push?event=purchase&items[][id]=123&segment=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный segment (не 'A' или 'B') | POST /push?event=purchase&items[][id]=123&segment=C&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой recommended_by | POST /push?event=purchase&items[][id]=123&recommended_by=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный recommended_by | POST /push?event=purchase&items[][id]=123&recommended_by=INVALID&shop_id={valid}&did={valid} | 422 Unprocessable |
recommended_by не строка (массив) | POST /push?event=purchase&items[][id]=123&recommended_by[]=dynamic&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой recommended_code | POST /push?event=purchase&items[][id]=123&recommended_code=&shop_id={valid}&did={valid} | 422 Unprocessable |
recommended_code не строка | POST /push?event=purchase&items[][id]=123&recommended_code[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой source (строка) | POST /push?event=purchase&items[][id]=123&source=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный source (не JSON) | POST /push?event=purchase&items[][id]=123&source=not-json&shop_id={valid}&did={valid} | 422 Unprocessable |
| Order Details Validation | ||
Пустой order_id | POST /push (JSON: {"event": "purchase", "order_id": "", ...}) | 200 OK |
Пустой delivery_type | POST /push (JSON: {"event": "purchase", "delivery_type": "", ...}) | 200 OK |
Пустой payment_type | POST /push (JSON: {"event": "purchase", "payment_type": "", ...}) | 200 OK |
Некорректный order_id (256 символов) | POST /push (JSON: {"event": "purchase", "order_id": "256_chars_string...", ...}) | 422 Unprocessable |
| Source Logic | ||
Корректный JSON в source (строка) | POST /push (JSON: {"event": "purchase", "source": "{\"code\": \"abc\", \"from\": \"dynamic\"}", ...}) | 200 OK (recommended_by=dynamic, recommended_code=abc) |
Корректный объект в source | POST /push (JSON: {"event": "purchase", "source": {"code": "abc", "from": "dynamic"}, ...}) | 200 OK (recommended_by=dynamic, recommended_code=abc) |
Некорректный source.from | POST /push (JSON: {"source": "{\"code\": \"abc\", \"from\": \"example\"}"}) | 200 OK (source игнорируется, поля null) |
Отсутствует source.from в JSON | POST /push (JSON: {"source": "{\"code\": \"abc\"}"}) | 200 OK (source игнорируется, поля null) |
Отсутствует source.code в JSON | POST /push (JSON: {"source": "{\"from\": \"dynamic\"}"}) | 200 OK (source игнорируется, поля null) |
| Item Amount/Quantity Logic | ||
items.amount: -1 (ниже минимума) | POST /push (JSON: {"items": [{"id": "x", "amount": -1}], ...}) | 200 OK (amount становится 1) |
items.amount: 1001 (выше максимума) | POST /push (JSON: {"items": [{"id": "x", "amount": 1001}], ...}) | 200 OK (amount становится 1000) |
items.quantity: -1 (синоним amount) | POST /push (JSON: {"items": [{"id": "x", "quantity": -1}], ...}) | 200 OK (amount становится 1) |
| Item Price Logic | ||
items.price: -1 (отрицательное число) | POST /push (JSON: {"items": [{"id": "x", "price": -1}], ...}) | 200 OK (поле price отсутствует) |
items.price: -0.1 (отрицательный float) | POST /push (JSON: {"items": [{"id": "x", "price": -0.1}], ...}) | 200 OK (поле price отсутствует) |
items.price: '-666' (отрицательная строка) | POST /push (JSON: {"items": [{"id": "x", "price": "-666"}], ...}) | 200 OK (поле price отсутствует) |
items.price: 'asdasd' (не число) | POST /push (JSON: {"items": [{"id": "x", "price": "asdasd"}], ...}) | 200 OK (поле price отсутствует) |
| Item Other Fields Logic | ||
items.line_id: '' (пустая строка) | POST /push (JSON: {"items": [{"id": "x", "line_id": ""}], ...}) | 200 OK (поле line_id отсутствует) |
items.fashion_size: '' (пустая строка) | POST /push (JSON: {"items": [{"id": "x", "fashion_size": ""}], ...}) | 200 OK (поле fashion_size отсутствует) |
Пустой items.id | POST /push (JSON: {"items": [{"id": ""}, {"id": "valid"}], ...}) | 200 OK (пустой ID фильтруется) |
Слишком длинный items.id | POST /push (JSON: {"items": [{"id": "aaaa...(>255 chars)"}, ...]}) | 200 OK (длинный ID фильтруется) |
| Successful Tracking | ||
| Трекинг покупки с одним товаром | POST /push?event=purchase&stream=test&items[][id]=123&shop_id={valid}&did={valid} | 200 OK |
| Трекинг покупки с несколькими товарами | POST /push (JSON: {"event": "purchase", "items": [{"id": "first", "amount": 42}, {"id": "second", "quantity": 23, "price": 42}], ...}) | 200 OK |
| Трекинг покупки с деталями заказа | POST /push (JSON: {"event": "purchase", "order_id": "order-123", "delivery_type": "courier", "delivery_address": "123 Main St", "payment_type": "Card", "tax_free": true, ...}) | 200 OK |
| Трекинг со всеми опциональными параметрами | POST /push (JSON: {"event": "purchase", "stream": "test", "sid": "test-session-id", "segment": "A", "referer": "https://example.com", "recommended_by": "dynamic", "recommended_code": "abc123", "order_id": "order-456", "delivery_type": "pickup", "payment_type": "Cash", ...}) | 200 OK |
search
| Сценарий | Пример запроса | Код ошибки |
|---|---|---|
| HTTP Method Validation | ||
| Использование не-POST метода | GET /push?event=search&search_query=test | 405 Method Not Allowed |
| Authentication & Shop Validation | ||
Запрос без shop_id | POST /push (без параметров) | 401 Unauthorized |
Пустой shop_id | POST /push?shop_id=&event=search&search_query=test | 422 Unprocessable |
Некорректный формат shop_id (не 30 hex) | POST /push?shop_id=INVALID_ID&event=search&search_query=test | 422 Unprocessable |
Несуществующий shop_id | POST /push?shop_id=000000000000000000000000000000&event=search&search_query=test | 404 Not Found |
| Device Validation | ||
Корректный shop_id, но без did | POST /push?shop_id={valid}&event=search&search_query=test | 401 Unauthorized |
Пустой did (трактуется как отсутствие) | POST /push?shop_id={valid}&did=&event=search&search_query=test | 401 Unauthorized |
Некорректный формат did | POST /push?shop_id={valid}&did=INVALID_ID&event=search&search_query=test | 422 Unprocessable |
Несуществующий did | POST /push?shop_id={valid}&did=0000000000&event=search&search_query=test | 404 Not Found |
| Shop Status Validation | ||
Магазин неактивен (non-active) | POST /push?shop_id={non_active}&did={valid}&event=search&search_query=test | 403 Access Denied |
Магазин ограничен (restricted) | POST /push?shop_id={restricted}&did={valid}&event=search&search_query=test | 403 Access Denied |
| У магазина истекла оплата | POST /push?shop_id={unpaid}&did={valid}&event=search&search_query=test | 403 Access Denied |
| Required Parameters Validation | ||
Отсутствует параметр event | POST /push?search_query=test&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой параметр event | POST /push?event=&search_query=test&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректное значение event (не 'search') | POST /push?event=INVALID&search_query=test&shop_id={valid}&did={valid} | 422 Unprocessable |
Отсутствует параметр search_query | POST /push?event=search&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой search_query | POST /push?event=search&search_query=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный тип search_query (массив) | POST /push?event=search&search_query[]=test&shop_id={valid}&did={valid} | 422 Unprocessable |
| Optional Parameters Validation | ||
Пустой stream | POST /push?event=search&search_query=test&stream=&shop_id={valid}&did={valid} | 422 Unprocessable |
stream не строка (массив) | POST /push?event=search&search_query=test&stream[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой sid | POST /push?event=search&search_query=test&sid=&shop_id={valid}&did={valid} | 422 Unprocessable |
sid не строка | POST /push?event=search&search_query=test&sid[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой referer | POST /push?event=search&search_query=test&referer=&shop_id={valid}&did={valid} | 422 Unprocessable |
referer не строка | POST /push?event=search&search_query=test&referer[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой segment | POST /push?event=search&search_query=test&segment=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный segment (не 'A' или 'B') | POST /push?event=search&search_query=test&segment=C&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой recommended_by | POST /push?event=search&search_query=test&recommended_by=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный recommended_by | POST /push?event=search&search_query=test&recommended_by=INVALID&shop_id={valid}&did={valid} | 422 Unprocessable |
recommended_by не строка (массив) | POST /push?event=search&search_query=test&recommended_by[]=dynamic&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой recommended_code | POST /push?event=search&search_query=test&recommended_code=&shop_id={valid}&did={valid} | 422 Unprocessable |
recommended_code не строка | POST /push?event=search&search_query=test&recommended_code[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой source (строка) | POST /push?event=search&search_query=test&source=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный source (не JSON) | POST /push?event=search&search_query=test&source=not-json&shop_id={valid}&did={valid} | 422 Unprocessable |
| Source Logic | ||
Корректный JSON в source (строка) | POST /push (JSON: {"event": "search", "source": "{\"code\": \"abc\", \"from\": \"dynamic\"}", "search_query": "test", ...}) | 200 OK (recommended_by=dynamic, recommended_code=abc) |
Корректный объект в source | POST /push (JSON: {"event": "search", "source": {"code": "abc", "from": "dynamic"}, "search_query": "test", ...}) | 200 OK (recommended_by=dynamic, recommended_code=abc) |
Некорректный source.from | POST /push (JSON: {"source": "{\"code\": \"abc\", \"from\": \"example\"}"}) | 200 OK (source игнорируется, поля null) |
Отсутствует source.from в JSON | POST /push (JSON: {"source": "{\"code\": \"abc\"}"}) | 200 OK (source игнорируется, поля null) |
Отсутствует source.code в JSON | POST /push (JSON: {"source": "{\"from\": \"dynamic\"}"}) | 200 OK (source игнорируется, поля null) |
| Successful Tracking | ||
| Трекинг поискового запроса (ASCII) | POST /push?event=search&stream=test&search_query=red+shoes&shop_id={valid}&did={valid} | 200 OK |
| Трекинг поискового запроса (Unicode/спецсимволы) | POST /push (JSON: {"event": "search", "search_query": "кроссовки Nike Air Max 42", ...}) | 200 OK |
| Трекинг со всеми опциональными параметрами | POST /push (JSON: {"event": "search", "stream": "test", "sid": "test-session-id", "segment": "A", "referer": "https://example.com", "recommended_by": "dynamic", "recommended_code": "abc123", "search_query": "test query", ...}) | 200 OK |
view
| Сценарий | Пример запроса | Код ошибки |
|---|---|---|
| HTTP Method Validation | ||
| Использование не-POST метода | GET /push?event=view&items[][id]=123 | 405 Method Not Allowed |
| Authentication & Shop Validation | ||
Запрос без shop_id | POST /push (без параметров) | 401 Unauthorized |
Пустой shop_id | POST /push?shop_id=&event=view&items[][id]=123 | 422 Unprocessable |
Некорректный формат shop_id (не 30 hex) | POST /push?shop_id=INVALID_ID&event=view&items[][id]=123 | 422 Unprocessable |
Несуществующий shop_id | POST /push?shop_id=000000000000000000000000000000&event=view&items[][id]=123 | 404 Not Found |
| Device Validation | ||
Корректный shop_id, но без did | POST /push?shop_id={valid}&event=view&items[][id]=123 | 401 Unauthorized |
Пустой did (трактуется как отсутствие) | POST /push?shop_id={valid}&did=&event=view&items[][id]=123 | 401 Unauthorized |
Некорректный формат did | POST /push?shop_id={valid}&did=INVALID_ID&event=view&items[][id]=123 | 422 Unprocessable |
Несуществующий did | POST /push?shop_id={valid}&did=0000000000&event=view&items[][id]=123 | 404 Not Found |
| Shop Status Validation | ||
Магазин неактивен (non-active) | POST /push?shop_id={non_active}&did={valid}&event=view&items[][id]=123 | 403 Access Denied |
Магазин ограничен (restricted) | POST /push?shop_id={restricted}&did={valid}&event=view&items[][id]=123 | 403 Access Denied |
| У магазина истекла оплата | POST /push?shop_id={unpaid}&did={valid}&event=view&items[][id]=123 | 403 Access Denied |
| Required Parameters Validation | ||
Отсутствует параметр event | POST /push?items[][id]=123&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой параметр event | POST /push?event=&items[][id]=123&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректное значение event (не 'view') | POST /push?event=INVALID&items[][id]=123&shop_id={valid}&did={valid} | 422 Unprocessable |
| Items Validation | ||
Отсутствует параметр items | POST /push?event=view&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой items (не массив) | POST /push?event=view&items=&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой массив items | POST /push (JSON: {"event": "view", "items": [], ...}) | 422 Unprocessable |
Все items отфильтрованы из-за некорректного ID | POST /push (JSON: {"event": "view", "items": [{"id": "Hello\\World"}], ...}) | 422 Unprocessable |
| Optional Parameters Validation | ||
Пустой stream | POST /push?event=view&items[][id]=123&stream=&shop_id={valid}&did={valid} | 422 Unprocessable |
stream не строка (массив) | POST /push?event=view&items[][id]=123&stream[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой sid | POST /push?event=view&items[][id]=123&sid=&shop_id={valid}&did={valid} | 422 Unprocessable |
sid не строка | POST /push?event=view&items[][id]=123&sid[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой referer | POST /push?event=view&items[][id]=123&referer=&shop_id={valid}&did={valid} | 422 Unprocessable |
referer не строка | POST /push?event=view&items[][id]=123&referer[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой segment | POST /push?event=view&items[][id]=123&segment=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный segment (не 'A' или 'B') | POST /push?event=view&items[][id]=123&segment=C&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой recommended_by | POST /push?event=view&items[][id]=123&recommended_by=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный recommended_by | POST /push?event=view&items[][id]=123&recommended_by=INVALID&shop_id={valid}&did={valid} | 422 Unprocessable |
recommended_by не строка (массив) | POST /push?event=view&items[][id]=123&recommended_by[]=dynamic&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой recommended_code | POST /push?event=view&items[][id]=123&recommended_code=&shop_id={valid}&did={valid} | 422 Unprocessable |
recommended_code не строка | POST /push?event=view&items[][id]=123&recommended_code[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой source (строка) | POST /push?event=view&items[][id]=123&source=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный source (не JSON) | POST /push?event=view&items[][id]=123&source=not-json&shop_id={valid}&did={valid} | 422 Unprocessable |
| Source Logic | ||
Корректный JSON в source (строка) | POST /push (JSON: {"event": "view", "source": "{\"code\": \"abc\", \"from\": \"dynamic\"}", ...}) | 200 OK (recommended_by=dynamic, recommended_code=abc) |
Корректный объект в source | POST /push (JSON: {"event": "view", "source": {"code": "abc", "from": "dynamic"}, ...}) | 200 OK (recommended_by=dynamic, recommended_code=abc) |
Некорректный source.from | POST /push (JSON: {"source": "{\"code\": \"abc\", \"from\": \"example\"}"}) | 200 OK (source игнорируется, поля null) |
Отсутствует source.from в JSON | POST /push (JSON: {"source": "{\"code\": \"abc\"}"}) | 200 OK (source игнорируется, поля null) |
Отсутствует source.code в JSON | POST /push (JSON: {"source": "{\"from\": \"dynamic\"}"}) | 200 OK (source игнорируется, поля null) |
| Item Amount/Quantity Logic | ||
items.amount: -1 (ниже минимума) | POST /push (JSON: {"items": [{"id": "x", "amount": -1}], ...}) | 200 OK (amount становится 1) |
items.amount: 1001 (выше максимума) | POST /push (JSON: {"items": [{"id": "x", "amount": 1001}], ...}) | 200 OK (amount становится 1000) |
items.quantity: -1 (синоним amount) | POST /push (JSON: {"items": [{"id": "x", "quantity": -1}], ...}) | 200 OK (amount становится 1) |
| Item Price Logic | ||
items.price: -1 (отрицательное число) | POST /push (JSON: {"items": [{"id": "x", "price": -1}], ...}) | 200 OK (поле price отсутствует) |
items.price: -0.1 (отрицательный float) | POST /push (JSON: {"items": [{"id": "x", "price": -0.1}], ...}) | 200 OK (поле price отсутствует) |
items.price: '-666' (отрицательная строка) | POST /push (JSON: {"items": [{"id": "x", "price": "-666"}], ...}) | 200 OK (поле price отсутствует) |
items.price: 'asdasd' (не число) | POST /push (JSON: {"items": [{"id": "x", "price": "asdasd"}], ...}) | 200 OK (поле price отсутствует) |
| Item Other Fields Logic | ||
items.line_id: '' (пустая строка) | POST /push (JSON: {"items": [{"id": "x", "line_id": ""}], ...}) | 200 OK (поле line_id отсутствует) |
items.fashion_size: '' (пустая строка) | POST /push (JSON: {"items": [{"id": "x", "fashion_size": ""}], ...}) | 200 OK (поле fashion_size отсутствует) |
Пустой items.id | POST /push (JSON: {"items": [{"id": ""}, {"id": "valid"}], ...}) | 200 OK (пустой ID фильтруется) |
Слишком длинный items.id | POST /push (JSON: {"items": [{"id": "aaaa...(>255 chars)"}, ...]}) | 200 OK (длинный ID фильтруется) |
| Successful Tracking | ||
| Трекинг просмотра одного товара | POST /push?event=view&stream=test&items[][id]=123&shop_id={valid}&did={valid} | 200 OK |
| Трекинг просмотра нескольких товаров | POST /push (JSON: {"event": "view", "items": [{"id": "first", "amount": 42}, {"id": "second", "amount": 23}], ...}) | 200 OK |
Трекинг с segment="B" | POST /push (JSON: {"event": "view", "segment": "B", ...}) | 200 OK |
| Трекинг со всеми опциональными параметрами | POST /push (JSON: {"event": "view", "stream": "test", "sid": "test-session-id", "segment": "A", "referer": "https://example.com", "recommended_by": "dynamic", "recommended_code": "abc123", ...}) | 200 OK |
remove from favorites
| Сценарий | Пример запроса | Код ошибки |
|---|---|---|
| HTTP Method Validation | ||
| Использование не-POST метода | GET /push?event=remove_wish&items[][id]=123 | 405 Method Not Allowed |
| Authentication & Shop Validation | ||
Запрос без shop_id | POST /push (без параметров) | 401 Unauthorized |
Пустой shop_id | POST /push?shop_id=&event=remove_wish&items[][id]=123 | 422 Unprocessable |
Некорректный формат shop_id (не 30 hex) | POST /push?shop_id=INVALID_ID&event=remove_wish&items[][id]=123 | 422 Unprocessable |
Несуществующий shop_id | POST /push?shop_id=000000000000000000000000000000&event=remove_wish&items[][id]=123 | 404 Not Found |
| Device Validation | ||
Корректный shop_id, но без did | POST /push?shop_id={valid}&event=remove_wish&items[][id]=123 | 401 Unauthorized |
Пустой did (трактуется как отсутствие) | POST /push?shop_id={valid}&did=&event=remove_wish&items[][id]=123 | 401 Unauthorized |
Некорректный формат did | POST /push?shop_id={valid}&did=INVALID_ID&event=remove_wish&items[][id]=123 | 422 Unprocessable |
Несуществующий did | POST /push?shop_id={valid}&did=0000000000&event=remove_wish&items[][id]=123 | 404 Not Found |
| Shop Status Validation | ||
Магазин неактивен (non-active) | POST /push?shop_id={non_active}&did={valid}&event=remove_wish&items[][id]=123 | 403 Access Denied |
Магазин ограничен (restricted) | POST /push?shop_id={restricted}&did={valid}&event=remove_wish&items[][id]=123 | 403 Access Denied |
| У магазина истекла оплата | POST /push?shop_id={unpaid}&did={valid}&event=remove_wish&items[][id]=123 | 403 Access Denied |
| Required Parameters Validation | ||
Отсутствует параметр event | POST /push?items[][id]=123&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой параметр event | POST /push?event=&items[][id]=123&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректное значение event (не 'remove_wish') | POST /push?event=INVALID&items[][id]=123&shop_id={valid}&did={valid} | 422 Unprocessable |
| Items Validation | ||
Отсутствует параметр items | POST /push?event=remove_wish&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой items (не массив) | POST /push?event=remove_wish&items=&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой массив items | POST /push (JSON: {"event": "remove_wish", "items": [], ...}) | 422 Unprocessable |
Все items отфильтрованы из-за некорректного ID | POST /push (JSON: {"event": "remove_wish", "items": [{"id": "Hello\\World"}], ...}) | 422 Unprocessable |
| Optional Parameters Validation | ||
Пустой stream | POST /push?event=remove_wish&items[][id]=123&stream=&shop_id={valid}&did={valid} | 422 Unprocessable |
stream не строка (массив) | POST /push?event=remove_wish&items[][id]=123&stream[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой sid | POST /push?event=remove_wish&items[][id]=123&sid=&shop_id={valid}&did={valid} | 422 Unprocessable |
sid не строка | POST /push?event=remove_wish&items[][id]=123&sid[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой referer | POST /push?event=remove_wish&items[][id]=123&referer=&shop_id={valid}&did={valid} | 422 Unprocessable |
referer не строка | POST /push?event=remove_wish&items[][id]=123&referer[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой segment | POST /push?event=remove_wish&items[][id]=123&segment=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный segment (не 'A' или 'B') | POST /push?event=remove_wish&items[][id]=123&segment=C&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой recommended_by | POST /push?event=remove_wish&items[][id]=123&recommended_by=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный recommended_by | POST /push?event=remove_wish&items[][id]=123&recommended_by=INVALID&shop_id={valid}&did={valid} | 422 Unprocessable |
recommended_by не строка (массив) | POST /push?event=remove_wish&items[][id]=123&recommended_by[]=dynamic&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой recommended_code | POST /push?event=remove_wish&items[][id]=123&recommended_code=&shop_id={valid}&did={valid} | 422 Unprocessable |
recommended_code не строка | POST /push?event=remove_wish&items[][id]=123&recommended_code[]=42&shop_id={valid}&did={valid} | 422 Unprocessable |
Пустой source (строка) | POST /push?event=remove_wish&items[][id]=123&source=&shop_id={valid}&did={valid} | 422 Unprocessable |
Некорректный source (не JSON) | POST /push?event=remove_wish&items[][id]=123&source=not-json&shop_id={valid}&did={valid} | 422 Unprocessable |
| Source Logic | ||
Корректный JSON в source (строка) | POST /push (JSON: {"event": "remove_wish", "source": "{\"code\": \"abc\", \"from\": \"dynamic\"}", ...}) | 200 OK (recommended_by=dynamic, recommended_code=abc) |
Корректный объект в source | POST /push (JSON: {"event": "remove_wish", "source": {"code": "abc", "from": "dynamic"}, ...}) | 200 OK (recommended_by=dynamic, recommended_code=abc) |
Некорректный source.from | POST /push (JSON: {"source": "{\"code\": \"abc\", \"from\": \"example\"}"}) | 200 OK (source игнорируется, поля null) |
Отсутствует source.from в JSON | POST /push (JSON: {"source": "{\"code\": \"abc\"}"}) | 200 OK (source игнорируется, поля null) |
Отсутствует source.code в JSON | POST /push (JSON: {"source": "{\"from\": \"dynamic\"}"}) | 200 OK (source игнорируется, поля null) |
| Item Amount/Quantity Logic | ||
items.amount: -1 (ниже минимума) | POST /push (JSON: {"items": [{"id": "x", "amount": -1}], ...}) | 200 OK (amount становится 1) |
items.amount: 1001 (выше максимума) | POST /push (JSON: {"items": [{"id": "x", "amount": 1001}], ...}) | 200 OK (amount становится 1000) |
items.quantity: -1 (синоним amount) | POST /push (JSON: {"items": [{"id": "x", "quantity": -1}], ...}) | 200 OK (amount становится 1) |
| Item Price Logic | ||
items.price: -1 (отрицательное число) | POST /push (JSON: {"items": [{"id": "x", "price": -1}], ...}) | 200 OK (поле price отсутствует) |
items.price: -0.1 (отрицательный float) | POST /push (JSON: {"items": [{"id": "x", "price": -0.1}], ...}) | 200 OK (поле price отсутствует) |
items.price: '-666' (отрицательная строка) | POST /push (JSON: {"items": [{"id": "x", "price": "-666"}], ...}) | 200 OK (поле price отсутствует) |
items.price: 'asdasd' (не число) | POST /push (JSON: {"items": [{"id": "x", "price": "asdasd"}], ...}) | 200 OK (поле price отсутствует) |
| Item Other Fields Logic | ||
items.line_id: '' (пустая строка) | POST /push (JSON: {"items": [{"id": "x", "line_id": ""}], ...}) | 200 OK (поле line_id отсутствует) |
items.fashion_size: '' (пустая строка) | POST /push (JSON: {"items": [{"id": "x", "fashion_size": ""}], ...}) | 200 OK (поле fashion_size отсутствует) |
Пустой items.id | POST /push (JSON: {"items": [{"id": ""}, {"id": "valid"}], ...}) | 200 OK (пустой ID фильтруется) |
Слишком длинный items.id | POST /push (JSON: {"items": [{"id": "aaaa...(>255 chars)"}, ...]}) | 200 OK (длинный ID фильтруется) |
| Successful Tracking | ||
| Трекинг удаления одного товара из избранного | POST /push?event=remove_wish&stream=test&items[][id]=123&shop_id={valid}&did={valid} | 200 OK |
| Трекинг удаления нескольких товаров из избранного | POST /push (JSON: {"event": "remove_wish", "items": [{"id": "first", "amount": 42}, {"id": "second", "amount": 23}], ...}) | 200 OK |
| Трекинг со всеми опциональными параметрами | POST /push (JSON: {"event": "remove_wish", "stream": "test", "sid": "test-session-id", "segment": "A", "referer": "https://example.com", "recommended_by": "dynamic", "recommended_code": "abc123", ...}) | 200 OK |