refactor: form-core wiring, JWT sessions, slowapi, packaging, frontend rewrite, test declutter
This commit is contained in:
parent
06ab25fb47
commit
03af41e837
74 changed files with 6089 additions and 5183 deletions
|
|
@ -293,11 +293,54 @@ def test_embedded_code_matches_template_fields():
|
|||
field["name"] for field in template.values() if isinstance(field, dict)
|
||||
} - {"code"}
|
||||
code = template["code"]["value"]
|
||||
# Codegen-inlined core: self-contained for LFX, single truth in repo.
|
||||
assert "from kirche" not in code, filename
|
||||
assert "from ._" not in code, filename
|
||||
assert "collect_form_data" in code, filename
|
||||
assert "parse_envelope" in code, filename
|
||||
cls = validate_mod.create_class(code, class_name)
|
||||
code_names = {inp.name for inp in cls.inputs}
|
||||
assert code_names == template_names, filename
|
||||
|
||||
|
||||
def test_form_core_envelope_and_conditions():
|
||||
"""Unit tests for the shared core (single truth for all 3 forms)."""
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent.parent / "components"))
|
||||
from kirche._form_core import (
|
||||
_field_conditions,
|
||||
collect_form_data,
|
||||
parse_envelope,
|
||||
)
|
||||
|
||||
payload, asked = parse_envelope('{"payload": {"a": 1}, "fields": ["a", ""]}')
|
||||
assert payload == {"a": 1} and asked == ["a"]
|
||||
payload, asked = parse_envelope('{"a": 2}')
|
||||
assert payload == {"a": 2} and asked is None
|
||||
payload, asked = parse_envelope("not json")
|
||||
assert payload == {} and asked is None
|
||||
assert _field_conditions("x [visible_if a=B]", None) == [("a", "B")]
|
||||
assert _field_conditions("x", [{"field": "a", "value": 1}]) == [("a", 1)]
|
||||
assert _field_conditions("x [visible_if a=B]", {"a": 2}) == [("a", 2)]
|
||||
effective, scope = collect_form_data(["a", "b"], {"a": 1, "b": 2}, {"b": 3}, ["a"])
|
||||
assert scope == ["a"] and effective["b"] == 3
|
||||
|
||||
|
||||
def test_kirche_node_inlines_core():
|
||||
"""Generator composes thin source + core into self-contained code."""
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent.parent / "scripts"))
|
||||
from make_flow_fixtures import _compose_component_code, _inline_core
|
||||
|
||||
core = _inline_core()
|
||||
assert "def parse_envelope" in core and "def collect_form_data" in core
|
||||
thin = "from kirche._form_core import parse_envelope\n# <-- _form_core inlined -->\nX = 1\n"
|
||||
composed = _compose_component_code(thin)
|
||||
assert "from kirche" not in composed and "def parse_envelope" in composed
|
||||
|
||||
|
||||
def test_bauvorhaben_fixture_shape():
|
||||
doc = json.loads((FIXTURES / "bauvorhaben.json").read_text(encoding="utf-8"))
|
||||
assert doc["name"] == "bauvorhaben"
|
||||
|
|
@ -332,8 +375,8 @@ def test_bauvorhaben_schema_branches():
|
|||
schema = out["json_schema"]
|
||||
assert set(schema["properties"]) == {"gebaeude", "denkmalschutz"}
|
||||
assert schema["required"] == ["gebaeude"]
|
||||
assert len(schema["allOf"]) == 5
|
||||
by_field = {next(iter(rule["then"]["properties"])): rule for rule in schema["allOf"]}
|
||||
assert len(schema["allOf"]) == len(by_field) == 5
|
||||
assert set(by_field) == {
|
||||
"bestandteil",
|
||||
"glockenmassnahme",
|
||||
|
|
@ -355,7 +398,9 @@ def test_bauvorhaben_schema_branches():
|
|||
assert "visible_if" not in out["json_schema"]["allOf"][0]["then"]["properties"][
|
||||
"bestandteil"
|
||||
].get("description", "")
|
||||
assert out["ui_schema"]["ui:order"] == [
|
||||
order = out["ui_schema"]["ui:order"]
|
||||
assert order[-1] == "*"
|
||||
assert set(order[:-1]) == {
|
||||
"gebaeude",
|
||||
"bestandteil",
|
||||
"glockenmassnahme",
|
||||
|
|
@ -363,8 +408,7 @@ def test_bauvorhaben_schema_branches():
|
|||
"gebaeudeart",
|
||||
"denkmalschutz",
|
||||
"denkmalnummer",
|
||||
"*",
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
async def test_bauvorhaben_deploy_and_run_nested_values(client, lfx_server, login):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue