fix(prezentacja): podsumowanie bierze WSZYSTKIE policzone opcje (stacje, tabele, domy)
Testy / Testy warstwy logicznej (silnik) (pull_request) Successful in 10m30s
Testy / Testy warstwy prezentacji (dostęp do baz) (pull_request) Successful in 9m28s
Testy / Build obrazu silnika B (swisseph) (pull_request) Successful in 15s
Testy / Kontrola składni wszystkich warstw (pull_request) Successful in 10s
Testy / Testy warstwy logicznej (silnik) (push) Successful in 11m5s
Testy / Testy warstwy prezentacji (dostęp do baz) (push) Successful in 9m31s
Testy / Build obrazu silnika B (swisseph) (push) Successful in 15s
Testy / Kontrola składni wszystkich warstw (push) Successful in 10s
build / build (push) Successful in 2m49s
Testy / Testy warstwy logicznej (silnik) (pull_request) Successful in 10m30s
Testy / Testy warstwy prezentacji (dostęp do baz) (pull_request) Successful in 9m28s
Testy / Build obrazu silnika B (swisseph) (pull_request) Successful in 15s
Testy / Kontrola składni wszystkich warstw (pull_request) Successful in 10s
Testy / Testy warstwy logicznej (silnik) (push) Successful in 11m5s
Testy / Testy warstwy prezentacji (dostęp do baz) (push) Successful in 9m31s
Testy / Build obrazu silnika B (swisseph) (push) Successful in 15s
Testy / Kontrola składni wszystkich warstw (push) Successful in 10s
build / build (push) Successful in 2m49s
Regresja: „Skompiluj" przeliczało horoskop od nowa z OKROJONYM zestawem opcji (tylko system domów + zodiak), więc jeśli przy horoskopie policzyłeś stacje, tabele (żywioły, faza Księżyca…) albo porównanie domów — w podsumowaniu ich NIE było. Zamiast pokazać to, co policzono, liczyło uboższą wersję. Zostaje czysty przelicz (bez trzymania dużego wyniku w przeglądarce), ale z TYMI SAMYMI opcjami co przy horoskopie: - `formsync`: synchronizuje między zakładkami też opcje — checkboxy (stacje, tabele) i wielo-checkbox (porównanie domów). Wcześniej umiał tylko `.value`. - „Skompiluj" (formularz): dostaje te same opcje; `compile_build` i `compile_pdf` przekazują je do logiki (stations/tables/house_systems). `compile.js` wysyła je w payloadzie PDF-a. - Wspólny plik `_result_tables.html`: podsumowanie renderuje DOKŁADNIE te same tabele co „Horoskop" (porównanie domów, stacje, aspekty, paralele, antyscja, żywioły/faza/godziny, Lots…). Każda sekcja pokazuje się tylko, gdy jej dane są w wyniku — opcja niepoliczona → sekcji nie ma (zgodnie z prośbą). (TODO: przełączyć też chart.html na ten include, by widoki nie mogły się rozjechać — na razie zgodność pilnowana ręcznie, jest komentarz w pliku.) Weryfikacja: render wspólnego pliku na bogatym wyniku pokazuje wszystkie sekcje. Testy: +8 (opcje niesione w /compile i /compile/pdf, sync checkboxów/multi, wspólny include). Prezentacja 202. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit was merged in pull request #46.
This commit is contained in:
@@ -159,3 +159,36 @@ def test_ai_text_is_escaped_before_injection():
|
||||
|
||||
def test_does_nothing_on_other_tabs():
|
||||
assert "if (!document.getElementById('readiness')) return;" in JS
|
||||
|
||||
|
||||
# ─────── podsumowanie NIE gubi opcji policzonych przy horoskopie ──────────
|
||||
# Regresja 2026-07-28: „Skompiluj" przeliczało horoskop bez stacji/tabel/
|
||||
# porównania domów, więc podsumowanie miało braki względem tego, co policzono.
|
||||
|
||||
def test_compile_form_carries_the_options():
|
||||
"""Te same opcje co „Horoskop" (synchronizowane) — inaczej nie da się ich przekazać."""
|
||||
for f in ('name="stations"', 'name="tables"', 'name="house_systems"'):
|
||||
assert f in TPL, f"brak opcji w formularzu podsumowania: {f}"
|
||||
|
||||
|
||||
def test_compile_handler_recomputes_with_all_options():
|
||||
assert "house_systems: list[str] = Form([])" in MAIN
|
||||
assert "stations: bool = Form(False)" in MAIN
|
||||
assert "house_systems=house_systems" in MAIN # przekazane do logiki
|
||||
assert "stations=stations, zodiac=zodiac, tables=tables" in MAIN
|
||||
|
||||
|
||||
def test_compile_pdf_recomputes_with_all_options():
|
||||
assert 'stations=bool(data.get("stations"))' in MAIN
|
||||
assert 'house_systems=[s for s in (data.get("house_systems")' in MAIN
|
||||
|
||||
|
||||
def test_compile_pdf_payload_includes_options():
|
||||
assert "house_systems: multi('house_systems')" in JS
|
||||
assert "stations: checked('stations')" in JS
|
||||
|
||||
|
||||
def test_summary_uses_shared_result_tables():
|
||||
"""Podsumowanie pokazuje te same tabele co horoskop — jeden wspólny plik,
|
||||
żeby nie mogły znowu się rozjechać."""
|
||||
assert '{% include "_result_tables.html" %}' in TPL
|
||||
|
||||
@@ -20,7 +20,15 @@ WITH_FORM = ("chart.html", "interpret.html", "timeline.html")
|
||||
# Pola, które mają wędrować między zakładkami. Gdy dojdzie nowe wspólne pole,
|
||||
# ten wykaz ma się nie rozjechać z formsync.js.
|
||||
SHARED = ("person", "date", "time", "tz_offset", "lat", "lon",
|
||||
"house_system", "zodiac", "place")
|
||||
"house_system", "zodiac", "place",
|
||||
"stations", "tables", "house_systems") # opcje też wędrują (regresja: podsumowanie liczyło się bez nich)
|
||||
|
||||
|
||||
def test_option_checkboxes_are_synced_by_type():
|
||||
"""Stacje/tabele to checkboxy (.checked), a porównanie domów to wiele checkboxów
|
||||
tej samej nazwy (lista) — formsync musi umieć oba, nie tylko .value."""
|
||||
assert "'check'" in SYNC_JS and "'multi'" in SYNC_JS
|
||||
assert "el.checked" in SYNC_JS
|
||||
|
||||
|
||||
# ─────────────────────────────── pole imienia ────────────────────────────
|
||||
@@ -90,5 +98,5 @@ def test_map_changes_are_reported_to_sync():
|
||||
|
||||
def test_sync_does_not_wipe_fields_missing_on_a_tab():
|
||||
"""Zakładka bez danego pola (np. Sygnifikatory) nie może wyczyścić wartości
|
||||
zapamiętanej z innej zakładki."""
|
||||
assert "if (!el) return;" in SYNC_JS
|
||||
zapamiętanej z innej zakładki. `collect` pomija pole, którego nie ma na stronie."""
|
||||
assert "if (!els.length) return;" in SYNC_JS
|
||||
|
||||
Reference in New Issue
Block a user