Skip to content

test(cerif): dwa testy mapowań żądają słowników jawnie, zamiast liczyć na baseline - #762

Merged
mpasternak merged 1 commit into
devfrom
fix-flake-cerif-tryby-openaccess
Aug 16, 2026
Merged

test(cerif): dwa testy mapowań żądają słowników jawnie, zamiast liczyć na baseline#762
mpasternak merged 1 commit into
devfrom
fix-flake-cerif-tryby-openaccess

Conversation

@mpasternak

Copy link
Copy Markdown
Member

Objaw

test_tryby_otwarte_maja_prawo_dostepu padał na CI z DoesNotExist
trzy razy — zawsze w shardzie 0, zawsze przy zieleni lokalnie:

gdzie run
dev 31638171364
PR #757 31680859893
PR #759 31688032975

Za każdym razem trzeba było ręcznie ponawiać shard.

Przyczyna źródłowa

Test czytał Tryb_OpenAccess_Wydawnictwo_Ciagle wprost z bazy, bez żądania
jakiejkolwiek fixtury
. Wiersze pochodzą z migracji 0028, a
coar_access_right dokłada 0480 — czyli są w baseline i zwykle są w bazie.

Transakcyjny flush (TransactionTestCase._fixture_teardownTRUNCATE)
je zmiata, a bpp.seed_slowniki odtwarza po post_migrate wyłącznie
RodzajJednostki
. Czy test zdąży przed takim flushem, decyduje dynamiczny
przydział testów do workerów (pytest -n auto --dist load) — stąd
sporadyczność 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_zmapowane miał identyczną wadę i był uśpionym
flakiem — 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.

_uzupelnij w 0480 aktualizuje tylko wiersze z pustym polem, więc wywołanie
jest idempotentne (na wypełnionej bazie no-op).

Wyjątkiem są prawa patentowe: migracja 0119 używa gołego create(), a nazwa
jest unique — powtórne wywołanie oryginału wywaliłoby się na bazie
wypełnionej. Stąd get_or_create po tej samej liście z bpp.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 to
klasę globalnie, ale zmienia zachowanie post_migrate dla całej suity i
wymagał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.py padały dokładnie te dwa testy, a pozostałe 16
przechodziło — różnica to obecność fixtury i nic innego.

Weryfikacja

środowisko przed po
baza pusta (reprodukująca) — test_mapowania.py 2 failed, 16 passed 18 passed
baza pusta — cały cerif_export 390 passed
baza z baseline (normalna, testcontainers) 390 passed

Drugi 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

…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
@mpasternak
mpasternak merged commit 17c6e16 into dev Aug 16, 2026
22 checks passed
@mpasternak
mpasternak deleted the fix-flake-cerif-tryby-openaccess branch August 16, 2026 18:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant