"""A form's Navigate action can pass extra query parameters to its target
(FormActionDef.params) — kept as saved, names required."""

import uuid


async def test_navigate_parameters_are_kept(client, auth_headers):
    page_id = str(uuid.uuid4())
    event = {
        "trigger": "on_submit",
        "action_type": "navigate",
        "target_type": "page",
        "target_id": page_id,
        "pass_record_id": True,
        "params": [{"name": "applicationNo", "value": "{{application_no}}"}, {"name": "source", "value": "portal"}],
    }
    resp = await client.post(
        "/forms",
        headers=auth_headers,
        json={"name": f"Apply {uuid.uuid4().hex[:6]}", "field_definitions": [{"name": "application_no", "type": "text", "label": "No"}], "events": [event]},
    )
    assert resp.status_code == 201, resp.text
    saved = resp.json()["events"][0]
    assert saved["params"] == event["params"]

    bad = await client.post(
        "/forms",
        headers=auth_headers,
        json={"name": f"Apply {uuid.uuid4().hex[:6]}", "field_definitions": [], "events": [{**event, "params": [{"name": "", "value": "x"}]}]},
    )
    assert bad.status_code == 422
