From d4e9dd1f2dd99ee3fbc2b6a65b8b8d85521e10aa Mon Sep 17 00:00:00 2001 From: Adam Warski Date: Fri, 29 May 2026 17:30:17 +0000 Subject: [PATCH] Add failing test: Fix AdaptiveRetry stopping on Left when shouldPayFailureCost returns false --- .../ox/resilience/ImmediateRetryTest.scala | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/core/src/test/scala/ox/resilience/ImmediateRetryTest.scala b/core/src/test/scala/ox/resilience/ImmediateRetryTest.scala index cec1b425..fe7f28dc 100644 --- a/core/src/test/scala/ox/resilience/ImmediateRetryTest.scala +++ b/core/src/test/scala/ox/resilience/ImmediateRetryTest.scala @@ -210,4 +210,21 @@ class ImmediateRetryTest extends AnyFlatSpec with EitherValues with TryValues wi result.value shouldBe message counter shouldBe 6 + it should "not pay exceptionCost if Left error is going to be retried and shouldPayPenaltyCost returns false" in: + // given + var counter = 0 + val errorMessage = "boom" + + def f: Either[String, Int] = + counter += 1 + Left(errorMessage) + + val adaptive = AdaptiveRetry(TokenBucket(2), 1, 1) + // when + val result = adaptive.retryEither(Schedule.immediate.maxRetries(5), (_: Either[String, Int]) => false)(f) + + // then + result.left.value shouldBe errorMessage + counter shouldBe 6 + end ImmediateRetryTest