eb8dbf66a1
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
173 lines
4.6 KiB
Python
173 lines
4.6 KiB
Python
"""Tests para build_hoppscotch_collection."""
|
|
|
|
import json
|
|
|
|
from build_hoppscotch_collection import build_hoppscotch_collection
|
|
|
|
|
|
def test_golden_get_simple():
|
|
calls = [
|
|
{
|
|
"method": "GET",
|
|
"url": "https://api.example.com/api/search?q=foo",
|
|
"headers": {"Accept": "application/json"},
|
|
}
|
|
]
|
|
|
|
result = build_hoppscotch_collection(calls, name="MyCol")
|
|
|
|
assert result["v"] == 1
|
|
assert result["name"] == "MyCol"
|
|
assert result["folders"] == []
|
|
assert len(result["requests"]) == 1
|
|
|
|
req = result["requests"][0]
|
|
assert req["v"] == "2"
|
|
assert req["endpoint"] == "https://api.example.com/api/search?q=foo"
|
|
assert req["name"] == "GET /api/search"
|
|
assert req["method"] == "GET"
|
|
assert req["params"] == []
|
|
assert req["headers"] == [
|
|
{"key": "Accept", "value": "application/json", "active": True}
|
|
]
|
|
assert req["auth"] == {"authType": "none", "authActive": True}
|
|
assert req["preRequestScript"] == ""
|
|
assert req["testScript"] == ""
|
|
assert req["requestVariables"] == []
|
|
assert req["body"] == {"contentType": None, "body": None}
|
|
|
|
# JSON-serializable
|
|
json.dumps(result)
|
|
|
|
|
|
def test_edge_post_json_con_headers_y_cookies():
|
|
calls = [
|
|
{
|
|
"method": "post",
|
|
"url": "https://api.example.com/login",
|
|
"headers": {
|
|
"Content-Type": "application/json",
|
|
"X-Csrf": "tok",
|
|
},
|
|
"cookies": {"session": "abc", "csrf": "xyz"},
|
|
"body": '{"user":"neo"}',
|
|
"body_type": "json",
|
|
}
|
|
]
|
|
|
|
result = build_hoppscotch_collection(calls)
|
|
|
|
req = result["requests"][0]
|
|
assert req["method"] == "POST"
|
|
assert req["name"] == "POST /login"
|
|
|
|
# Header Cookie generado al final con formato "; " join
|
|
assert req["headers"] == [
|
|
{"key": "Content-Type", "value": "application/json", "active": True},
|
|
{"key": "X-Csrf", "value": "tok", "active": True},
|
|
{"key": "Cookie", "value": "session=abc; csrf=xyz", "active": True},
|
|
]
|
|
|
|
assert req["body"] == {
|
|
"contentType": "application/json",
|
|
"body": '{"user":"neo"}',
|
|
}
|
|
|
|
json.dumps(result)
|
|
|
|
|
|
def test_request_names_sobreescribe_nombre_derivado():
|
|
calls = [
|
|
{"method": "GET", "url": "https://api.example.com/a"},
|
|
{"method": "GET", "url": "https://api.example.com/b"},
|
|
]
|
|
|
|
result = build_hoppscotch_collection(
|
|
calls, request_names=["Custom A"]
|
|
)
|
|
|
|
# Indice 0 usa el nombre explicito; indice 1 cae al derivado.
|
|
assert result["requests"][0]["name"] == "Custom A"
|
|
assert result["requests"][1]["name"] == "GET /b"
|
|
|
|
|
|
def test_form_body_genera_contenttype_urlencoded():
|
|
calls = [
|
|
{
|
|
"method": "POST",
|
|
"url": "https://api.example.com/form",
|
|
"body": "a=1&b=2",
|
|
"body_type": "form",
|
|
}
|
|
]
|
|
|
|
req = build_hoppscotch_collection(calls)["requests"][0]
|
|
assert req["body"] == {
|
|
"contentType": "application/x-www-form-urlencoded",
|
|
"body": "a=1&b=2",
|
|
}
|
|
|
|
|
|
def test_raw_body_genera_contenttype_text_plain():
|
|
calls = [
|
|
{
|
|
"method": "POST",
|
|
"url": "https://api.example.com/raw",
|
|
"body": "hello",
|
|
"body_type": "raw",
|
|
}
|
|
]
|
|
|
|
req = build_hoppscotch_collection(calls)["requests"][0]
|
|
assert req["body"] == {"contentType": "text/plain", "body": "hello"}
|
|
|
|
|
|
def test_body_type_desconocido_da_body_null():
|
|
calls = [
|
|
{
|
|
"method": "POST",
|
|
"url": "https://api.example.com/x",
|
|
"body": "ignored",
|
|
"body_type": "binary",
|
|
}
|
|
]
|
|
|
|
req = build_hoppscotch_collection(calls)["requests"][0]
|
|
assert req["body"] == {"contentType": None, "body": None}
|
|
|
|
|
|
def test_lista_vacia():
|
|
result = build_hoppscotch_collection([], name="Empty")
|
|
assert result == {
|
|
"v": 1,
|
|
"name": "Empty",
|
|
"folders": [],
|
|
"requests": [],
|
|
}
|
|
json.dumps(result)
|
|
|
|
|
|
def test_call_spec_sin_url_ni_method():
|
|
calls = [{}]
|
|
|
|
req = build_hoppscotch_collection(calls)["requests"][0]
|
|
assert req["endpoint"] == ""
|
|
assert req["method"] == "GET"
|
|
assert req["name"] == "GET /"
|
|
assert req["headers"] == []
|
|
assert req["body"] == {"contentType": None, "body": None}
|
|
|
|
|
|
def test_sin_cookies_no_anade_header_cookie():
|
|
calls = [
|
|
{
|
|
"method": "GET",
|
|
"url": "https://api.example.com/x",
|
|
"headers": {"Accept": "*/*"},
|
|
"cookies": {},
|
|
}
|
|
]
|
|
|
|
req = build_hoppscotch_collection(calls)["requests"][0]
|
|
assert all(h["key"] != "Cookie" for h in req["headers"])
|