137 lines
3.5 KiB
Python
137 lines
3.5 KiB
Python
import pytest
|
|
|
|
import httpx
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"source",
|
|
[
|
|
"a=123&a=456&b=789",
|
|
{"a": ["123", "456"], "b": 789},
|
|
{"a": ("123", "456"), "b": 789},
|
|
[("a", "123"), ("a", "456"), ("b", "789")],
|
|
(("a", "123"), ("a", "456"), ("b", "789")),
|
|
],
|
|
)
|
|
def test_queryparams(source):
|
|
q = httpx.QueryParams(source)
|
|
assert "a" in q
|
|
assert "A" not in q
|
|
assert "c" not in q
|
|
assert q["a"] == "123"
|
|
assert q.get("a") == "123"
|
|
assert q.get("nope", default=None) is None
|
|
assert q.get_list("a") == ["123", "456"]
|
|
|
|
assert list(q.keys()) == ["a", "b"]
|
|
assert list(q.values()) == ["123", "789"]
|
|
assert list(q.items()) == [("a", "123"), ("b", "789")]
|
|
assert len(q) == 2
|
|
assert list(q) == ["a", "b"]
|
|
assert dict(q) == {"a": "123", "b": "789"}
|
|
assert str(q) == "a=123&a=456&b=789"
|
|
assert repr(q) == "QueryParams('a=123&a=456&b=789')"
|
|
assert httpx.QueryParams({"a": "123", "b": "456"}) == httpx.QueryParams(
|
|
[("a", "123"), ("b", "456")]
|
|
)
|
|
assert httpx.QueryParams({"a": "123", "b": "456"}) == httpx.QueryParams(
|
|
"a=123&b=456"
|
|
)
|
|
assert httpx.QueryParams({"a": "123", "b": "456"}) == httpx.QueryParams(
|
|
{"b": "456", "a": "123"}
|
|
)
|
|
assert httpx.QueryParams() == httpx.QueryParams({})
|
|
assert httpx.QueryParams([("a", "123"), ("a", "456")]) == httpx.QueryParams(
|
|
"a=123&a=456"
|
|
)
|
|
assert httpx.QueryParams({"a": "123", "b": "456"}) != "invalid"
|
|
|
|
q = httpx.QueryParams([("a", "123"), ("a", "456")])
|
|
assert httpx.QueryParams(q) == q
|
|
|
|
|
|
def test_queryparam_types():
|
|
q = httpx.QueryParams(None)
|
|
assert str(q) == ""
|
|
|
|
q = httpx.QueryParams({"a": True})
|
|
assert str(q) == "a=true"
|
|
|
|
q = httpx.QueryParams({"a": False})
|
|
assert str(q) == "a=false"
|
|
|
|
q = httpx.QueryParams({"a": ""})
|
|
assert str(q) == "a="
|
|
|
|
q = httpx.QueryParams({"a": None})
|
|
assert str(q) == "a="
|
|
|
|
q = httpx.QueryParams({"a": 1.23})
|
|
assert str(q) == "a=1.23"
|
|
|
|
q = httpx.QueryParams({"a": 123})
|
|
assert str(q) == "a=123"
|
|
|
|
q = httpx.QueryParams({"a": [1, 2]})
|
|
assert str(q) == "a=1&a=2"
|
|
|
|
|
|
def test_empty_query_params():
|
|
q = httpx.QueryParams({"a": ""})
|
|
assert str(q) == "a="
|
|
|
|
q = httpx.QueryParams("a=")
|
|
assert str(q) == "a="
|
|
|
|
q = httpx.QueryParams("a")
|
|
assert str(q) == "a="
|
|
|
|
|
|
def test_queryparam_update_is_hard_deprecated():
|
|
q = httpx.QueryParams("a=123")
|
|
with pytest.raises(RuntimeError):
|
|
q.update({"a": "456"})
|
|
|
|
|
|
def test_queryparam_setter_is_hard_deprecated():
|
|
q = httpx.QueryParams("a=123")
|
|
with pytest.raises(RuntimeError):
|
|
q["a"] = "456"
|
|
|
|
|
|
def test_queryparam_set():
|
|
q = httpx.QueryParams("a=123")
|
|
q = q.set("a", "456")
|
|
assert q == httpx.QueryParams("a=456")
|
|
|
|
|
|
def test_queryparam_add():
|
|
q = httpx.QueryParams("a=123")
|
|
q = q.add("a", "456")
|
|
assert q == httpx.QueryParams("a=123&a=456")
|
|
|
|
|
|
def test_queryparam_remove():
|
|
q = httpx.QueryParams("a=123")
|
|
q = q.remove("a")
|
|
assert q == httpx.QueryParams("")
|
|
|
|
|
|
def test_queryparam_merge():
|
|
q = httpx.QueryParams("a=123")
|
|
q = q.merge({"b": "456"})
|
|
assert q == httpx.QueryParams("a=123&b=456")
|
|
q = q.merge({"a": "000", "c": "789"})
|
|
assert q == httpx.QueryParams("a=000&b=456&c=789")
|
|
|
|
|
|
def test_queryparams_are_hashable():
|
|
params = (
|
|
httpx.QueryParams("a=123"),
|
|
httpx.QueryParams({"a": 123}),
|
|
httpx.QueryParams("b=456"),
|
|
httpx.QueryParams({"b": 456}),
|
|
)
|
|
|
|
assert len(set(params)) == 2
|