"""The host page: what sits where (#5214).""" from types import SimpleNamespace from quart import render_template, session async def test_ansible_comes_before_the_docker_list(app, monkeypatch): # The Docker list can run to dozens of containers; Ansible under it was # easy to miss, so it sits above. monkeypatch.setitem(app.config, "PLUGINS", {"docker": {"enabled": True}}) host = SimpleNamespace(id="h1", name="box", address="10.0.0.5") async with app.test_request_context("/hosts/h1"): session["user_role"] = "operator" page = await render_template( "hosts/detail.html", host=host, monitors=[], uptime=None, alerts=[], linked_target=None, linkable_targets=[], ansible_sources=[]) docker = page.index('hx-get="/plugins/docker/host/h1"') assert page.index(">Ansible") < docker assert page.index('hx-get="/plugins/host_agent/panel/h1"') < docker # Monitors are added on their own form, filed under this host (#5277); # each row's own page has the labelled Edit/Pause/Delete. assert 'href="/monitors/new?host_id=h1"' in page assert "row-actions" not in page and 'action="/monitors/add"' not in page async def test_adding_a_monitor_from_a_host_page_says_whose_it_is(app): host = SimpleNamespace(id="h1", name="box", address="10.0.0.5") async with app.test_request_context("/monitors/new?host_id=h1"): session["user_role"] = "operator" page = await render_template( "monitors/form.html", monitor=None, host=host, mtype="icmp", config={}, types=[], values={"name": "", "target": "10.0.0.5", "host_id": "h1", "check_interval_seconds": 0}) assert 'box' in page # crumb and hint name the host assert 'name="host_id" value="h1"' in page and 'value="10.0.0.5"' in page assert 'href="/hosts/h1" class="btn btn-sm btn-ghost">Cancel' in page async def test_the_agent_card_keeps_its_actions_under_manage(app): """#5278: "Remove" said nothing about what it removed.""" from datetime import datetime, timezone from tests._templates import render_plugin_template host = SimpleNamespace(id="h1", name="box", address="10.0.0.5") reg = SimpleNamespace(agent_version="1.8.0", last_seen_at=datetime.now(timezone.utc)) target = SimpleNamespace(id="t1", name="box") async with app.test_request_context("/plugins/host_agent/panel/h1"): session["user_role"] = "admin" page = await render_plugin_template( app, "host_agent", "panel.html", host=host, reg=reg, reporting=True, stale=False, target=target, ansible_available=True, managed_key_set=True) manage = page.index(">Manage agent") assert page.index("Full metrics →") < manage for action in (">Update agent", ">Rotate token", ">Unregister agent"): assert page.index(action) > manage assert ">Remove" not in page