fix(test): WebhookE2ETest — cleanup leftover state в @BeforeEach

CI fail: ConditionTimeout 60s в recordCreate_dispatchedToWebhookReceiver.
Logs показали 'Webhook sendTick: 2 due deliveries' через 1с после
boot — dispatcher грузился leftover'ами из предыдущего CI run
(Postgres testcontainer с withReuse=true сохраняет данные между
запусками). Старые subscriptions с dead URLs ели 5s timeout каждая
× N циклов до того как наш новый event дойдёт до receiver.

Локально работало потому что DB была свежая.

Фикс:
- В @BeforeEach: deliveryRepo.deleteAllInBatch() + subRepo.deleteAllInBatch()
- Order важен: deliveries first (FK на subscriptions)

Локально 2/2 passed за 10.8s. Race-warnings StaleObjectStateException
в логах — dispatcher держит entity в Hibernate session и пытается
save после нашего deleteAll'а; assertion'ы это не задевает.
This commit is contained in:
Zimin A.N.
2026-05-06 21:13:42 +03:00
parent 5bcc9586c7
commit 8fd0da957a
@@ -90,6 +90,14 @@ class WebhookE2ETest {
@BeforeEach
void startReceiver() throws IOException {
// Cleanup leftover state из предыдущего CI run.
// Postgres testcontainer withReuse(true) сохраняет данные между
// запусками — старые subscriptions с dead URLs дают `findDue()`
// нагрузку (5s timeout × N = слишком долго до нашего нового event'а).
// Очищаем deliveries сначала (FK на subscriptions), потом subscriptions.
deliveryRepo.deleteAllInBatch();
subRepo.deleteAllInBatch();
receiver = HttpServer.create(new InetSocketAddress("127.0.0.1", 0), 0);
receiver.createContext("/hook", exchange -> {
byte[] body = exchange.getRequestBody().readAllBytes();