package com.baiyue.audit.service; import com.baiyue.audit.dto.AuditIngestRequest; import com.baiyue.audit.repository.AuditEventRepository; import jakarta.annotation.Resource; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; import java.time.Instant; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @SpringJUnitConfig(AuditIngestService.class) class AuditIngestIdempotencyTest { @MockBean private AuditEventRepository repository; @Resource private AuditIngestService service; @Test void keepsStableEventIdForMqRedelivery() { AuditIngestRequest request = request("audit-1"); when(repository.save(request, "audit-1")).thenReturn(false); assertThat(service.ingest(request)).isFalse(); verify(repository).save(request, "audit-1"); } private static AuditIngestRequest request(String eventId) { return new AuditIngestRequest(eventId, "ROLE_UPDATE", "ROLE", "1", "修改角色", "request-1", "trace-1", 1L, 1L, 1L, "admin", "PLATFORM", "WEB", "PUT", "/roles/1", "127.0.0.1", 10, true, null, null, null, null, Instant.parse("2026-08-05T00:00:00Z"), "iam-service"); } }