"""UIE-01: E2E test for printer edit modal — open, pre-fill, submit, list update.""" from __future__ import annotations import pytest def test_printer_edit_modal_open_and_prefill(page, live_server: str) -> None: """Edit button opens modal with printer's current name pre-filled.""" import httpx # Create a printer via API with httpx.Client(base_url=live_server, follow_redirects=True) as api: api.post( "/printers", data={ "name": "EditTest Printer", "ip_address": "10.0.5.1", "port_name": "IP_10_0_5_1", }, ) page.goto(f"{live_server}/printers", wait_until="domcontentloaded") page.wait_for_selector("button:has-text('Edit')") page.click("button:has-text('Edit')") # Dialog should be open page.wait_for_selector("dialog[open]") # Name input should be pre-filled name_val = page.input_value("dialog[open] input[name='name']") assert name_val == "EditTest Printer" def test_printer_edit_submit_updates_list(page, live_server: str) -> None: """Submitting the edit form updates the printer name in the list (no page reload).""" import httpx with httpx.Client(base_url=live_server, follow_redirects=True) as api: resp = api.post( "/printers", data={ "name": "OriginalName", "ip_address": "10.0.5.2", "port_name": "IP_10_0_5_2", }, ) # Find the printer ID from the DB via API — target the specific Edit button by printer ID page.goto(f"{live_server}/printers", wait_until="domcontentloaded") # Find the row containing "OriginalName" and click its Edit button row = page.locator("tr", has=page.locator("a", has_text="OriginalName")) row.wait_for() row.locator("button:has-text('Edit')").click() page.wait_for_selector("dialog[open]") # Clear and update the name field page.fill("dialog[open] input[name='name']", "UpdatedName") page.click("dialog[open] button[type='submit']") # Wait for HTMX to swap the updated list — the anchor for the printer should show new name page.wait_for_selector("a:has-text('UpdatedName')") assert page.locator("a:has-text('UpdatedName')").is_visible() assert page.locator("a:has-text('OriginalName')").count() == 0