test(webhook): re-enable WebhookE2ETest через no-op scheduler + manual ticks

Fix CI flakiness: тест больше не полагается на @Scheduled тики каждые
200ms. NoSchedulingConfig подменяет TaskScheduler на no-op stub —
@Scheduled методы регистрируются, но никогда не запускаются. Тест
вручную дёргает dispatcher.matchTick() / sendTick() — synchronous,
deterministic, нет race с background threads.

Что изменилось:
- @Disabled убран
- Inject WebhookDispatcher, manual matchTick + sendTick после setup
- Await timeouts: 60s → 5s (manual ticks → нет 200ms scheduler delay)
- Pool=4 / send-interval-ms / match-interval-ms убраны (не нужны)
- Send-timeout-ms 1000 → 2000 (с запасом, но scheduler не работает)
- @AutoConfigureMockMvc сохранён, port=RANDOM_PORT, allowed-hosts тот же

Side-fix: @Autowired на Spring constructor WebhookTestPingService
(добавлен ранее package-private constructor для unit-тестов сделал
выбор конструктора неоднозначным; Spring 6 strict — требует
explicit @Autowired когда есть >1 candidate).

Локально: 2/2 PASSED 1.85s (было 9.9s — 5× быстрее).
CI: 14 e2e всех тестов passed (Smoke, OutboxKafka, Auth, Bitemporal,
Webhook).
This commit is contained in:
Zimin A.N.
2026-05-07 10:57:43 +03:00
parent c7a917ddad
commit ac93151fe6
2 changed files with 108 additions and 64 deletions
@@ -7,6 +7,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@@ -57,7 +58,11 @@ public class WebhookTestPingService {
* Spring constructor — собирает HttpClient с дефолтным connect timeout, читает
* allowed-hosts CSV из config. Тестовый код использует package-private
* конструктор {@link #WebhookTestPingService(ObjectMapper, List, HttpClient)}.
*
* <p>{@code @Autowired} обязателен — без него Spring не знает что выбрать
* между этим и package-private constructor для тестов.
*/
@Autowired
public WebhookTestPingService(
ObjectMapper objectMapper,
@Value("${ordinis.webhook.allowed-hosts:}") String allowedHostsCsv) {