httpx/tests/models/test_queryparams.py
SarunasAzna 86964054d6
Allow tuple as input of query parameters. (#1426)
* Allow tuple as input of query parameters.

In the documentation it is stated that params can be dict, string or two
tuples. This allows to used two tuples. Previously it was possible to
use only tuple inside a list.

* tests for two tuples

* use isinstance to check the type of query params

* change list|tuple to in Sequence

* update documentation

* fix typing
2020-12-12 18:38:37 +01:00

95 lines
2.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"] == "456"
assert q.get("a") == "456"
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()) == ["456", "789"]
assert list(q.items()) == [("a", "456"), ("b", "789")]
assert len(q) == 2
assert list(q) == ["a", "b"]
assert dict(q) == {"a": "456", "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_queryparam_setters():
q = httpx.QueryParams({"a": 1})
q.update([])
assert str(q) == "a=1"
q = httpx.QueryParams([("a", 1), ("a", 2)])
q["a"] = "3"
assert str(q) == "a=3"
q = httpx.QueryParams([("a", 1), ("b", 1)])
u = httpx.QueryParams([("b", 2), ("b", 3)])
q.update(u)
assert str(q) == "a=1&b=2&b=3"
assert q["b"] == u["b"]