test(cache): pozorne testy cache na realnym backendzie zamiast DummyCache (3.2) - #648
Merged
Conversation
…dzie `test_robots_txt_sitemap_zalezna_od_hosta` biegł na DummyCache (cache wyłączony w testach), więc `cache_page` niczego nie zapisywał — test host-separacji przechodził trywialnie i nie dowodził, że cache NIE przecieka między domenami multi-hosted. Podmiana backendu na LocMemCache (wzorzec z test_cache_publiczny.py i admin_dashboard/test_cache_vary_host.py) + warunek kontrolny (powtórzone żądanie na ten sam host MUSI trafić w cache). Zweryfikowano sabotażem: z DummyCache asercja kontrolna pada (3 != 2 renderowania), z LocMem przechodzi. Realny cache nie ujawnił buga — cache_page poprawnie kluczuje po hoście (build_absolute_uri). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019GmViAsaif9MXeuDMA5NHX
…wanie) `test_zapis_uczelni_inwaliduje_cache_strony_glownej` mockował `cache.delete` i `get_uczelnia_context_data.invalidate` — tautologia: dowodził, że sygnał WOŁA delete(klucz), a nie że context-procesor `uczelnia` czyta ten sam klucz ani że po zapisie serwuje świeżą wartość. Przełączony na realny LocMemCache (wzorzec test_cache_publiczny.py) z pełną ścieżką zapis→odczyt→inwalidacja context-procesora (klucz bpp_uczelnia_<pk>). Dodany warunek kontrolny (rule #8): zmiana przez .update() (pomija post_save) zostawia STARĄ wartość w cache — dowód, że cache realnie trzyma migawkę. Zakres: cacheops jest w testach globalnie wyłączony (INSTALLED_APPS bez cacheops + CACHEOPS_ENABLED=False, monkey-patch/xdist landmine), więc warstwa `@cached` pilnowana osobno przez spy; realnie testowana warstwa Django-cache. Zweryfikowano sabotażem: z wyłączonym cache.delete w sygnale test pada w p.3 (stary wpis przeżywa). Inwalidacja DZIAŁA naprawdę — bug NIE ujawniony. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019GmViAsaif9MXeuDMA5NHX
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Cała warstwa cache jest w testach wyłączona (
CACHEOPS_ENABLED=False+DummyCache). Testy, które twierdziły, że sprawdzają cache, przechodziłyz niewłaściwego powodu — zielony, który niczego nie dowodził (poz. 3.2 audytu).
Zmiana (test-only)
Testy sprawdzające zachowanie cache przełączone na realny
LocMemCacheprzez jawny, lokalny fixture (wzorzec
test_cache_publiczny.py) — bez zmianyglobalnych ustawień testów:
test_robots_txt_sitemap_zalezna_od_hosta(separacja host) — na LocMemz asercją kontrolną,
test_zapis_uczelni_inwaliduje_cache_strony_glownej— odmockowany(był tautologią na
cache.delete), teraz dowodzi realnej inwalidacji.Wynik
Inwalidacja Django-cache DZIAŁA naprawdę — potwierdzone sabotażem (wyłączenie
cache.deletew sygnale → test pada). 0 realnych bugów — separacja hostówpo
build_absolute_urinie przecieka. Warstwa cacheops pozostaje testowana przezspy na
.invalidate()(globalnie wyłączona w testach; włączanie per-testniebezpieczne pod xdist — monkey-patch ORM + cross-worker leak w Redisie).
Review: PASS + APPROVED (brak wycieku fixture — 70 passed razem z sąsiednimi plikami).
Poz. 3.2 audytu.
🤖 Generated with Claude Code
https://claude.ai/code/session_019GmViAsaif9MXeuDMA5NHX