Files
astrololo/services/astroklient/tests/test_zlozenie.py
T
gitea 4102039447
Testy / Testy warstwy logicznej (silnik) (push) Successful in 11m1s
Testy / Testy warstwy prezentacji (dostęp do baz) (push) Successful in 9m30s
Testy / Testy warstwy bazodanowej (ochrona baz) (push) Successful in 9m25s
Testy / Testy astrodemo (push) Successful in 9m25s
Testy / Testy astroklient (push) Successful in 9m24s
Testy / Build obrazu silnika B (swisseph) (push) Successful in 21s
Testy / Kontrola składni wszystkich warstw (push) Successful in 5s
Testy / Testy warstwy logicznej (silnik) (pull_request) Successful in 10m25s
Testy / Testy warstwy prezentacji (dostęp do baz) (pull_request) Successful in 9m29s
Testy / Testy warstwy bazodanowej (ochrona baz) (pull_request) Successful in 9m25s
Testy / Testy astrodemo (pull_request) Successful in 9m25s
Testy / Testy astroklient (pull_request) Successful in 9m25s
Testy / Build obrazu silnika B (swisseph) (pull_request) Successful in 7s
Testy / Kontrola składni wszystkich warstw (pull_request) Successful in 5s
astroklient: strumień do warstwy logicznej też niesie pulę konta
_post dokłada pulę z kontekstu sesji do każdego żądania, ale strumień
(używany przez /chart/horoscope/stream) szedł obok niego i wysyłał payload
bez zmian. Generowania w tym obrazie dziś nie ma, ale most modułów zostaje
celowo — po dołożeniu modułu horoskop strumieniowany szukałby w całym
udziale, a pole tenant podsunięte w payloadzie przeszłoby dalej.

Sonda w osobnym procesie przepuszcza prawdziwe żądanie przez bramkę sesji
do trasy w miejscu modułu (prompt, horoskop, strumień konsumowany leniwie)
i podsuwa cudzy login w payloadzie. Przed poprawką strumień wysyłał
„ktos-inny", po — konto z sesji.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 13:28:05 +02:00

56 lines
2.4 KiB
Python

"""Astroklient jest produktem, a nie pełną aplikacją z wyłączonymi kawałkami.
Sprawdzamy trzy rzeczy, i wszystkie na ZŁOŻONYM drzewie, nie na kodzie w repo:
czego w nim nie ma, że to, co zostało, działa, i że nie zostało po niczym słowo.
"""
from __future__ import annotations
def test_the_build_starts_at_all(wynik):
assert wynik["dziala"]["/"] == 200
def test_every_astrological_screen_works(wynik):
assert all(k == 200 for k in wynik["dziala"].values()), wynik["dziala"]
def test_what_it_lacks_does_not_exist_rather_than_being_refused(wynik):
"""404, nie 403 i nie 500. Odmowa z powodem jest informacją, że coś tam jest."""
assert all(k == 404 for k in wynik["nie_ma"].values()), wynik["nie_ma"]
def test_the_catalogue_describes_this_product(wynik):
assert set(wynik["ekrany"]) == {"Horoskop", "Interpretacje", "Kalendarz",
"Synastria", "Sygnifikatory", "Pliki"}
def test_no_account_can_hold_a_permission_this_product_does_not_have(wynik):
"""Uprawnienia liczą się z KATALOGU, więc opisują ten obraz. Gdyby była tu
lista wpisana ręcznie, zostałaby po usuniętych funkcjach."""
assert "ai" not in wynik["uprawnienia"]
assert "export" not in wynik["uprawnienia"]
assert "admin" not in wynik["uprawnienia"]
assert "chart" in wynik["uprawnienia"] and "significators" in wynik["uprawnienia"]
def test_navigation_has_no_dead_links(wynik):
assert wynik["nawigacja"] == len(wynik["ekrany"])
def test_login_still_tells_right_password_from_wrong(wynik):
assert wynik["logowanie_dziala"] and wynik["zle_haslo_odmowa"]
def test_the_pool_comes_from_the_session_not_from_the_form(wynik):
"""Pula jedzie z zalogowanego konta. Gdyby brała się z żądania, wystarczyłoby
podstawić cudzy login, żeby czytać cudze pliki — sonda właśnie to próbuje."""
assert wynik["pula"] == "klient"
def test_module_transport_carries_the_session_pool_too(wynik_modulu):
"""Prompt i horoskop idą mostem modułów, a strumień horoskopu obok `_post` —
i właśnie tam pula ginęła, więc horoskop szukałby w całym udziale. Sonda
podsuwa cudzy login w payloadzie; ma wygrać konto z sesji."""
assert wynik_modulu["status"] == 200
assert wynik_modulu["pule"] == {"prompt": "klient", "horoscope": "klient",
"horoscope/stream": "klient"}