test(cerif): dwa testy mapowań żądają słowników jawnie, zamiast liczyć na baseline - #762
Merged
Merged
Conversation
…c na baseline test_tryby_otwarte_maja_prawo_dostepu padal na CI z DoesNotExist trzy razy (dev 31638171364, PR #757, PR #759) — zawsze w shardzie 0, zawsze przy zieleni lokalnie. Za kazdym razem trzeba bylo ponawiac shard. Przyczyna: test czytal Tryb_OpenAccess_Wydawnictwo_Ciagle wprost z bazy, bez zadania jakiejkolwiek fixtury. Wiersze pochodza z migracji 0028, a coar_access_right dokłada 0480 — czyli sa w baseline i ZWYKLE sa w bazie. Transakcyjny flush (TransactionTestCase._fixture_teardown -> TRUNCATE) zmiata je, a bpp.seed_slowniki odtwarza po post_migrate WYLACZNIE RodzajJednostki. Czy test zdazy przed takim flushem, decyduje dynamiczny przydzial testow do workerow (pytest -n auto --dist load) — stad sporadycznosc przy stalej zawartosci sharda (w shardzie 0 jest 22 plikow z testami transaction=True). To ta sama klasa awarii, ktora ten plik juz raz zdiagnozowal dla charakterow i jezykow — tamte testy dostaly wtedy fixtury charaktery_formalne / jezyki, a te dwa zostaly pominiete. Naprawione OBA: test_prawa_patentowe_zmapowane mial identyczna wade i padal z tego samego powodu, tyle ze dotad nie trafil na niekorzystny podzial shardow. Fixtury nie przepisuja wartosci, tylko wolaja funkcje danych z samych migracji (0028 utworz_dane_openaccess, 0480 wypelnij), wiec nie moga rozjechac sie z produkcja — to ta sama troska, ktora pilnuja istniejace test_fixtura_json_zgodna_z_migracja / test_fixtura_jezykow_zgodna_z_migracja. Wyjatkiem sa prawa patentowe: migracja 0119 uzywa golego create(), a nazwa jest unique, wiec powtorne wywolanie oryginalu wywalilo by sie na bazie wypelnionej — stad get_or_create po tej samej liscie z bpp.initial. Reprodukcja: na bazie testowej bez danych baseline (stan rownowazny temu po TRUNCATE) z test_mapowania.py padaly DOKLADNIE te dwa testy, a pozostale 16 przechodzilo — roznica to obecnosc fixtury i nic innego. Weryfikacja: * baza pusta (reprodukujaca): 2 failed -> 18 passed; caly cerif_export 390 passed * baza z baseline (normalna, testcontainers): 390 passed — fixtury sa idempotentne, na wypelnionej bazie to no-op Bez newsfragmentu: zmiana dotyczy wylacznie testow, nie ma efektu widocznego dla uzytkownika. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FPGuzMUWhUHESw6DZTtZkS
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.
Objaw
test_tryby_otwarte_maja_prawo_dostepupadał na CI zDoesNotExisttrzy razy — zawsze w shardzie 0, zawsze przy zieleni lokalnie:
devZa każdym razem trzeba było ręcznie ponawiać shard.
Przyczyna źródłowa
Test czytał
Tryb_OpenAccess_Wydawnictwo_Ciaglewprost z bazy, bez żądaniajakiejkolwiek fixtury. Wiersze pochodzą z migracji 0028, a
coar_access_rightdokłada 0480 — czyli są w baseline i zwykle są w bazie.Transakcyjny flush (
TransactionTestCase._fixture_teardown→TRUNCATE)je zmiata, a
bpp.seed_slownikiodtwarza popost_migratewyłącznieRodzajJednostki. Czy test zdąży przed takim flushem, decyduje dynamicznyprzydział testów do workerów (
pytest -n auto --dist load) — stądsporadyczność przy stałej zawartości sharda. W shardzie 0 jest 22 plików
z testami
transaction=True.To ta sama klasa awarii, którą ten plik już raz zdiagnozował dla
charakterów i języków (patrz jego docstring). Tamte testy dostały wtedy
fixtury
charaktery_formalne/jezyki— a te dwa zostały pominięte.Naprawione OBA
test_prawa_patentowe_zmapowanemiał identyczną wadę i był uśpionymflakiem — po prostu nie trafił jeszcze na niekorzystny podział shardów.
Kształt naprawy
Fixtury nie przepisują wartości, tylko wołają funkcje danych z samych
migracji (
0028.utworz_dane_openaccess,0480.wypelnij), więc nie mogąrozjechać się z produkcją — to dokładnie ta troska, którą pilnują istniejące
test_fixtura_json_zgodna_z_migracja/test_fixtura_jezykow_zgodna_z_migracja._uzupelnijw 0480 aktualizuje tylko wiersze z pustym polem, więc wywołaniejest idempotentne (na wypełnionej bazie no-op).
Wyjątkiem są prawa patentowe: migracja 0119 używa gołego
create(), anazwajest
unique— powtórne wywołanie oryginału wywaliłoby się na baziewypełnionej. Stąd
get_or_createpo tej samej liście zbpp.initial.Rozważona i odrzucona alternatywa: dopisanie tych słowników do łańcucha
bpp.seed_slowniki(jego docstring wprost do tego zachęca). Naprawiłoby toklasę globalnie, ale zmienia zachowanie
post_migratedla całej suity iwymagałoby szerokiej weryfikacji — nieproporcjonalne do dwóch testów. Zostaje
jako możliwe usprawnienie.
Reprodukcja
Na bazie testowej bez danych baseline (stan równoważny temu po
TRUNCATE)z
test_mapowania.pypadały dokładnie te dwa testy, a pozostałe 16przechodziło — różnica to obecność fixtury i nic innego.
Weryfikacja
test_mapowania.pycerif_exportDrugi wiersz dowodzi naprawy, trzeci — że fixtury są idempotentne i nie psują
normalnego przypadku.
Bez newsfragmentu: zmiana dotyczy wyłącznie testów, bez efektu widocznego dla
użytkownika.
🤖 Generated with Claude Code
https://claude.ai/code/session_01FPGuzMUWhUHESw6DZTtZkS