Files
Reservair/tests/Forms/test_form_definition.py
T
Martin Slachta 0d829845c4 initial
2026-06-11 19:03:29 +02:00

82 lines
2.8 KiB
Python

"""
Tests for the FormDefinition creation endpoint.
Endpoint: POST /wp-json/reservations/v1/form-definition
Body: { "name": str, "definition": object }
Run:
pytest tests/Forms/test_form_definition.py -v
Override the WordPress base URL:
WP_BASE_URL=http://mysite.local pytest tests/Forms/test_form_definition.py -v
"""
import os
import requests
BASE_URL = os.environ.get("WP_BASE_URL", "http://localhost/wordpress")
ENDPOINT = f"{BASE_URL}/wp-json/reservations/v1/form-definition"
VALID_DEFINITION = {
"email_key": "email",
"elements": [
{"type": "text", "name": "name", "label": "Your name", "required": False},
{"type": "text", "name": "email", "label": "Your email", "required": True},
]
}
def post_definition(payload: dict) -> requests.Response:
return requests.post(ENDPOINT, json=payload)
class TestFormDefinitionCreation:
def test_can_create_form_definition(self):
r = post_definition({"name": "Contact form", "definition": VALID_DEFINITION})
assert r.status_code == 201
body = r.json()
assert "id" in body
assert isinstance(body["id"], int)
assert body["id"] > 0
def test_response_content_type_is_json(self):
r = post_definition({"name": "Contact form", "definition": VALID_DEFINITION})
assert r.headers["Content-Type"].startswith("application/json")
def test_each_creation_returns_a_new_id(self):
r1 = post_definition({"name": "Form A", "definition": VALID_DEFINITION})
r2 = post_definition({"name": "Form B", "definition": VALID_DEFINITION})
assert r1.status_code == 201
assert r2.status_code == 201
assert r1.json()["id"] != r2.json()["id"]
class TestFormDefinitionValidation:
def test_missing_name_returns_400(self):
r = post_definition({"definition": VALID_DEFINITION})
assert r.status_code == 400
def test_empty_name_returns_400(self):
r = post_definition({"name": "", "definition": VALID_DEFINITION})
assert r.status_code == 400
def test_missing_definition_returns_400(self):
r = post_definition({"name": "Contact form"})
assert r.status_code == 400
def test_definition_must_be_object_not_string(self):
r = post_definition({"name": "Contact form", "definition": "not-an-object"})
assert r.status_code == 400
def test_missing_both_fields_returns_400(self):
r = post_definition({})
assert r.status_code == 400
def test_definition_with_no_elements_is_accepted(self):
r = post_definition({"name": "Empty form", "definition": {}})
assert r.status_code == 201
def test_definition_with_empty_elements_list_is_accepted(self):
r = post_definition({"name": "Empty elements form", "definition": {"elements": []}})
assert r.status_code == 201