"""Entity Field System (AP1.10b/10c).""" from __future__ import annotations from tests.factories import provision_user_in_tenant from tests.test_initiatives_actions import _auth, _create_initiative, _login def test_entity_field_registry_sync(): from sync_entity_field_registry import main assert main() == 0 def test_program_field_definitions(client): user = provision_user_in_tenant(tenant_role="member") token = _login(client, user) res = client.get( "/api/entity-archetypes/field-definitions" "?entity_type=initiative&archetype_key=initiative.program", headers=_auth(token), ) assert res.status_code == 200 keys = {item["field_key"] for item in res.json()} assert keys == {"stakeholder_map", "success_criteria"} def test_initiative_dynamic_fields_roundtrip(client): user = provision_user_in_tenant(tenant_role="member") token = _login(client, user) created = _create_initiative( client, token, title="Programm Nord", archetype_key="initiative.program", ) assert created.status_code == 201 initiative_id = created.json()["id"] defs_res = client.get( f"/api/initiatives/{initiative_id}/field-definitions", headers=_auth(token), ) assert defs_res.status_code == 200 assert len(defs_res.json()) == 2 empty = client.get( f"/api/initiatives/{initiative_id}/fields", headers=_auth(token), ) assert empty.status_code == 200 assert empty.json()["stakeholder_map"] == "" patched = client.patch( f"/api/initiatives/{initiative_id}/fields", json={ "fields": { "stakeholder_map": "PO: Anna\nTech: Bob", "success_criteria": "Go-Live Q3", } }, headers=_auth(token), ) assert patched.status_code == 200 body = patched.json() assert body["stakeholder_map"] == "PO: Anna\nTech: Bob" assert body["success_criteria"] == "Go-Live Q3" def test_unknown_dynamic_field_rejected(client): user = provision_user_in_tenant(tenant_role="member") token = _login(client, user) created = _create_initiative( client, token, title="Produkt Beta", archetype_key="initiative.product", ) initiative_id = created.json()["id"] res = client.patch( f"/api/initiatives/{initiative_id}/fields", json={"fields": {"unknown_field": "x"}}, headers=_auth(token), ) assert res.status_code == 400 def test_generic_initiative_has_no_dynamic_fields(client): user = provision_user_in_tenant(tenant_role="member") token = _login(client, user) created = _create_initiative( client, token, title="Generic", archetype_key="initiative.generic", ) initiative_id = created.json()["id"] defs_res = client.get( f"/api/initiatives/{initiative_id}/field-definitions", headers=_auth(token), ) assert defs_res.status_code == 200 assert defs_res.json() == [] fields_res = client.get( f"/api/initiatives/{initiative_id}/fields", headers=_auth(token), ) assert fields_res.status_code == 200 assert fields_res.json() == {}