Files
ImpTune/tests/test_printer_form.py
T
kawa 3d2cdc4e77 feat(11-01): UIE-02 — dedicated Add Printer page at GET /printers/new
- Create imptune/templates/printers_new.html: full page extending base.html
  with plain <form action="/printers" method="post"> (no HTMX, browser follows 303)
  and inline driver upload sub-form
- Update imptune/templates/printers.html: remove inline Add Printer form,
  add <a href="/printers/new" role="button">Add Printer</a> link
- Add GET /printers/new route in imptune/api/pages.py (placed before /{printer_id})
- Change POST /printers to always return RedirectResponse(url='/printers', status_code=303)
- Update existing POST /printers tests to assert 303 + follow_redirects=False
- Update test_printer_form.py to check /printers/new instead of /printers (UIE-02 arch)
- UIE-02 tests GREEN; UIE-01/03 scaffolds remain RED (expected — not yet implemented)
2026-04-15 11:03:41 +02:00

42 lines
1.7 KiB
Python

"""Tests for printer form template wiring — inline driver upload + OOB select."""
from fastapi.testclient import TestClient
def test_printer_form_has_inline_driver_upload(client: TestClient) -> None:
"""GET /printers/new renders printer form with:
- Driver <select> with stable id="printer-form-driver-select"
- Inline upload form with caller=printer_form hidden field
- hx-post="/drivers/upload" for the driver upload sub-form
- Plain <form action="/printers" method="post"> for the printer (no HTMX on main form)
Updated in 11-01: form moved from /printers to /printers/new (UIE-02).
"""
resp = client.get("/printers/new")
assert resp.status_code == 200
html = resp.text
# Driver select has stable id for OOB swap target
assert 'id="printer-form-driver-select"' in html, (
'Printer form driver <select> must have id="printer-form-driver-select" '
"for HTMX OOB swap to work"
)
# Inline upload form posts caller=printer_form sentinel
assert 'name="caller"' in html, 'Inline upload form missing name="caller" field'
assert 'value="printer_form"' in html, (
'Inline upload form missing value="printer_form" sentinel'
)
# Inline upload form targets /drivers/upload
assert 'hx-post="/drivers/upload"' in html, (
'Inline upload form missing hx-post="/drivers/upload"'
)
# Main printer form uses plain POST (no HTMX) so browser follows 303 redirect
assert 'action="/printers"' in html, (
'Printer form must use action="/printers" (plain HTML form, not hx-post)'
)
assert 'method="post"' in html, (
'Printer form must use method="post"'
)