mirror of
https://github.com/zhom/donutbrowser.git
synced 2026-09-10 11:48:56 +02:00
84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
"""Where the token and the port come from, and in what order."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
from fake_donut import FakeDonut
|
|
|
|
from donutbrowser import DEFAULT_HOST, DEFAULT_PORT, DonutClient, DonutError
|
|
|
|
|
|
def test_arguments_are_used_as_given() -> None:
|
|
client = DonutClient(token="from-argument", port=12345, env={})
|
|
assert client.token == "from-argument"
|
|
assert client.port == 12345
|
|
assert client.host == DEFAULT_HOST
|
|
assert client.base_url == "http://127.0.0.1:12345"
|
|
|
|
|
|
def test_the_environment_fills_in_what_was_not_passed() -> None:
|
|
client = DonutClient(env={"DONUT_API_TOKEN": "from-env", "DONUT_API_PORT": "13579"})
|
|
assert client.token == "from-env"
|
|
assert client.port == 13579
|
|
|
|
|
|
def test_arguments_win_over_the_environment() -> None:
|
|
client = DonutClient(
|
|
token="from-argument",
|
|
port=111,
|
|
env={"DONUT_API_TOKEN": "from-env", "DONUT_API_PORT": "222"},
|
|
)
|
|
assert client.token == "from-argument"
|
|
assert client.port == 111
|
|
|
|
|
|
def test_the_port_falls_back_to_the_app_default() -> None:
|
|
client = DonutClient(env={"DONUT_API_TOKEN": "t"})
|
|
assert client.port == DEFAULT_PORT == 10108
|
|
|
|
|
|
def test_a_base_url_overrides_host_and_port() -> None:
|
|
client = DonutClient(
|
|
base_url="http://127.0.0.1:9999/donut",
|
|
token="t",
|
|
env={"DONUT_API_PORT": "222"},
|
|
)
|
|
assert client.port == 9999
|
|
assert client.base_url == "http://127.0.0.1:9999/donut"
|
|
|
|
|
|
def test_a_base_url_prefix_is_kept_on_every_path(fake: FakeDonut) -> None:
|
|
with DonutClient(
|
|
base_url=f"http://127.0.0.1:{fake.port}/donut", token="t", timeout=5.0, env={}
|
|
) as client:
|
|
client.list_profiles()
|
|
assert fake.last.path == "/donut/v1/profiles"
|
|
|
|
|
|
def test_an_unusable_port_in_the_environment_is_reported() -> None:
|
|
with pytest.raises(DonutError) as raised:
|
|
DonutClient(env={"DONUT_API_TOKEN": "t", "DONUT_API_PORT": "not-a-number"})
|
|
assert "DONUT_API_PORT" in str(raised.value)
|
|
|
|
|
|
def test_an_unsupported_scheme_is_refused() -> None:
|
|
with pytest.raises(DonutError):
|
|
DonutClient(base_url="ftp://127.0.0.1:9999", token="t", env={})
|
|
|
|
|
|
def test_the_websocket_address_is_built_from_the_same_base() -> None:
|
|
client = DonutClient(token="t", port=10108, env={})
|
|
assert (
|
|
client.remote_session_cdp_url("s 1")
|
|
== "ws://127.0.0.1:10108/v1/remote-sessions/s%201/cdp"
|
|
)
|
|
|
|
|
|
def test_a_reopened_client_still_works(fake: FakeDonut) -> None:
|
|
"""`close()` drops the socket; the next call has to open a new one."""
|
|
with DonutClient(token="t", port=fake.port, timeout=5.0, env={}) as client:
|
|
client.list_profiles()
|
|
client.close()
|
|
client.list_profiles()
|
|
assert len(fake.requests) == 2
|