package dev.caskeleton.adapter.outbound.persistence.postgresql.error; import static org.assertj.core.api.Assertions.assertThat; import dev.caskeleton.adapter.outbound.persistence.api.PersistenceOperationName; import dev.caskeleton.adapter.outbound.persistence.api.error.ConstraintCode; import dev.caskeleton.adapter.outbound.persistence.api.transaction.RetryProfile; import dev.caskeleton.adapter.outbound.persistence.api.transaction.TransactionAttempt; import dev.caskeleton.adapter.outbound.persistence.transaction.DefaultJpaRetryPolicy; import java.sql.SQLException; import java.time.Duration; import java.time.Instant; import org.junit.jupiter.api.Test; class PostgreSql40003PolicyProbeTest { @Test void currentTranslatorDemotes40003BeforeRetryPolicy() { var translator = PostgreSqlExceptionTranslator.with(name -> new ConstraintCode("unknown.constraint")); var translated = translator.translate( new SQLException("completion unknown", "40003"), new PersistenceOperationName("probe.40003"), 1, Duration.ZERO, "trace-probe"); var decision = DefaultJpaRetryPolicy.forProfile( RetryProfile.boundedContention("probe-default", 3)) .classify(translated, TransactionAttempt.first(Instant.EPOCH)); System.out.println("translated.category=" + translated.category()); System.out.println("translated.completionUnknown=" + translated.completionUnknown()); System.out.println("decision.disposition=" + decision.disposition()); System.out.println("decision.reason=" + decision.reason()); assertThat(decision.disposition().name()).isEqualTo("FAIL"); } }