← Назад

QA Report: External Request

PR #857 · 12 марта 2026 · Наталья Казакова

Preview: deploy-preview-857--chatplace-front.netlify.app API: dev-api.chatplace.io Backend: GuzzleHttp/7
17
Passed
4
Failed
2
Critical Bugs

Как войти и открыть тест

  1. Открыть https://deploy-preview-857--chatplace-front.netlify.app/auth/sign-in/?preview-api-core=https://dev-api.chatplace.io/
  2. Нажать Email
  3. Логин: 664@mail.com — Пароль: 664@mail.com
  4. Перейти в Automations → открыть флоу (например «HTTP Dev Test»)
  5. На canvas кликнуть на блок Action → выбрать External request
  6. Откроется панель с вкладками: Headers · Body · Response · Response mapping · Error message

GET Requests — все PASS

EndpointRequest typeHeadersBodyExpectedActualResult
httpbin.org/getGET200 OK200 · OKPASS
httpbin.org/status/200GET200200 · OKPASS
httpbin.org/status/201GET201201 · CreatedPASS
httpbin.org/status/204GET204204 · No ContentPASS
httpbin.org/status/301GET200 (redirect)200 · OKPASS
httpbin.org/status/302GET200 (redirect)200 · OKPASS
httpbin.org/status/400GET400400 · Bad RequestPASS
httpbin.org/status/401GET401401 · UnauthorizedPASS
httpbin.org/status/403GET403403 · ForbiddenPASS
httpbin.org/status/404GET404404 · Not FoundPASS
httpbin.org/status/500GET500500 · Internal Server ErrorPASS
httpbin.org/status/502GET502502 · Bad GatewayPASS
httpbin.org/status/503GET503503 · Service UnavailablePASS
httpbin.org/get?foo=barGET200 + args.foo=bar200 · OK, args: {"foo":"bar"}PASS
jsonplaceholder.typicode.com/posts/1GET200 + JSON200 · OK, userId/id/title/bodyPASS
httpbin.org/delay/2GET200 (после 2с)200 · OKPASS
301/302: GuzzleHttp/7 автоматически следует за редиректами → итоговый статус 200 OK. Это ожидаемое поведение HTTP-клиента.

Скриншоты GET

GET 200

GET httpbin.org/get → 200 OK

GET 201

GET httpbin.org/status/201 → 201 Created

GET 400

GET httpbin.org/status/400 → 400 Bad Request

GET 500

GET httpbin.org/status/500 → 500 Internal Server Error

POST Requests — FAIL

EndpointRequest typeHeadersBody (что отправлялось)ExpectedActualResult
httpbin.org/postPOSTBody tab → JSON:
{"a":1}
200, data: '{"a":1}', json: {a:1}200 · OK, но Content-Length: 0, data: "", json: nullFAIL
httpbin.org/postPOSTBody tab → URL encoded:
key=value
200, form: {key:"value"}200 · OK, Content-Length: 0, form: {}FAIL

Скриншоты POST

POST body before

POST httpbin.org/post — JSON body {"a":1} введён (перед отправкой)

POST body result

❌ POST результат: Content-Length: 0, data: "", json: null — body НЕ отправлен

PUT / DELETE / PATCH Requests

MethodEndpointHeadersBodyExpectedActualResult
PUThttpbin.org/put— (пустое)200, data: ""200 · OK, Content-Length: 0, data: ""FAIL
DELETEhttpbin.org/delete— (body не нужен)200200 · OKPASS
PATCHhttpbin.org/patchBody tab → JSON:
{"a":1}
200, data: '{"a":1}'200 · OK, Content-Length отсутствует, data: "", json: nullFAIL

Скриншоты PUT / DELETE / PATCH

PUT 200

❌ PUT httpbin.org/put → Content-Length: 0, data: ""

DELETE 200

✅ DELETE httpbin.org/delete → 200 OK

PATCH 200

❌ PATCH httpbin.org/patch → data: "", json: null

Headers Test — FAIL

EndpointMethodHeader (имя)Value (значение)ExpectedActualResult
httpbin.org/headersGETX-Testmyvalue123200 OK, headers содержат X-Test: myvalue123422 Unprocessable Entity
headers.X-Test.key: "Required information is missing"
headers.X-Test.value: "Required information is missing"
FAIL
Поля Header (имя) и Value (значение) присутствуют в UI. Но фронтенд отправляет headers на backend в неверном формате — backend ожидает объекты с полями key и value, но не получает их → 422.

Скриншоты Headers

Headers UI

Headers UI — поля Header и Value (contenteditable)

Headers test result

❌ Headers X-Test: myvalue123 → 422 Unprocessable Entity (backend не получает key/value)

Bug #1 — Request body не отправляется (POST / PUT / PATCH)

Severity: CRITICAL BLOCKER

Шаги воспроизведения

  1. Открыть Builder → кликнуть блок Action → выбрать External request
  2. В dropdown Request type выбрать POST
  3. В поле URL ввести: https://httpbin.org/post
  4. Перейти на вкладку Body
  5. Выбрать sub-tab JSON
  6. В textarea ввести: {"name":"test","value":123}
  7. Нажать кнопку Test request

Ожидаемый результат

{
  "data": "{\"name\":\"test\",\"value\":123}",
  "json": {"name": "test", "value": 123},
  "headers": {
    "Content-Length": "27",
    "Content-Type": "application/json"
  }
}

Фактический результат

{
  "data": "",
  "json": null,
  "headers": {
    "Content-Length": "0",     ← тело не отправлено
    "User-Agent": "GuzzleHttp/7"
  }
}

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

Вывод

Backend (GuzzleHttp/7) не получает тело запроса, введённое в UI. Все HTTP-методы с body (POST, PUT, PATCH) неработоспособны.

Bug #2 — Headers отправляются в неверном формате → 422

Severity: CRITICAL BLOCKER

Шаги воспроизведения

  1. Открыть Builder → кликнуть блок Action → выбрать External request
  2. Перейти на вкладку Headers
  3. Нажать кнопку Add Header
  4. В поле Header ввести: X-Test
  5. В поле Value (под полем Header) ввести: myvalue123
  6. Request type: GET, URL: https://httpbin.org/headers
  7. Нажать Test request

Ожидаемый результат

200 OK
{
  "headers": {
    "Host": "httpbin.org",
    "User-Agent": "GuzzleHttp/7",
    "X-Test": "myvalue123"    ← кастомный заголовок передан
  }
}

Фактический результат

422 Unprocessable Entity
[
  {"field": "headers.X-Test.key",   "message": "Required information is missing."},
  {"field": "headers.X-Test.value", "message": "Required information is missing."}
]

Анализ

Backend ожидает headers в формате объектов с полями key и value, но фронтенд отправляет данные в неправильной структуре. Backend не может распарсить заголовки и возвращает 422 с ошибкой валидации.

Вывод

Невозможно отправить ни один пользовательский заголовок (Authorization, Content-Type, X-API-Key и т.д.). Функционал Headers полностью неработоспособен.

Окружение

PR#857
Preview URLhttps://deploy-preview-857--chatplace-front.netlify.app/
APIhttps://dev-api.chatplace.io/
Аккаунт664@mail.com / 664@mail.com
HTTP Client (backend)GuzzleHttp/7
Origin IP (ChatPlace)34.175.164.2 / 34.175.73.57 / 34.175.146.247
БраузерChrome 137, Windows 10, VPN (Shadowsocks)
Тестировалось черезUI браузера (Chrome на MI node, CDP automation)

Вывод

❌ PR #857 НЕ ГОТОВ к мержу.

GET-запросы работают корректно (16/16 pass). DELETE работает (1/1 pass).

Обнаружены 2 критических бага:

Оба бага делают External Request неработоспособным для любых реальных сценариев, требующих отправки данных или аутентификации.