diff --git a/src/test/java/com/stripe/BaseStripeTest.java b/src/test/java/com/stripe/BaseStripeTest.java index 7a7ebb37b53..3845f2df1f4 100644 --- a/src/test/java/com/stripe/BaseStripeTest.java +++ b/src/test/java/com/stripe/BaseStripeTest.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Consumer; import lombok.Cleanup; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; @@ -192,6 +193,27 @@ public static void verifyRequest( RequestOptions options) throws StripeException { + verifyRequest( + (req) -> { + assertEquals(baseAddress, req.getBaseAddress()); + assertEquals(method, req.getMethod()); + assertEquals(path, req.getPath()); + if (params != null) { + final String msg = + String.format( + "Params did not match - expected: %s, received: %s", params, req.getParams()); + assertTrue(msg, compareParamObjects(params, req.getParams())); + } + if (options != null) { + assertEquals(options, req.getOptions()); + } + }); + } + + @SuppressWarnings("AssertionFailureIgnored") + public static void verifyRequest( + Consumer assertOnApiRequest) throws StripeException { + ArgumentCaptor requestCaptor = ArgumentCaptor.forClass(ApiRequest.class); List exceptions = new ArrayList(); try { @@ -203,19 +225,35 @@ public static void verifyRequest( for (ApiRequest req : requestCaptor.getAllValues()) { try { - assertEquals(baseAddress, req.getBaseAddress()); - assertEquals(method, req.getMethod()); - assertEquals(path, req.getPath()); - if (params != null) { - final String msg = - String.format( - "Params did not match - expected: %s, received: %s", params, req.getParams()); - assertTrue(msg, compareParamObjects(params, req.getParams())); - } - if (options != null) { - assertEquals(options, req.getOptions()); - } - // If we get here, we have found a request that triggered no assertion failures. + assertOnApiRequest.accept(req); + return; + } catch (AssertionError e) { + exceptions.add(e); + } + } + + // If we get here, each request failed an assertion. + if (exceptions.size() != 0) { + // Combine all exceptions into a single message + String msg = ""; + for (AssertionError e : exceptions) { + msg += e.getMessage() + "\n\n"; + } + throw new AssertionError(msg); + } + } + + @SuppressWarnings("AssertionFailureIgnored") + public static void verifyStripeRequest( + Consumer assertOnStripeRequest) throws StripeException { + + ArgumentCaptor requestCaptor = ArgumentCaptor.forClass(StripeRequest.class); + List exceptions = new ArrayList(); + Mockito.verify(httpClientSpy, Mockito.atLeastOnce()).request(requestCaptor.capture()); + + for (StripeRequest req : requestCaptor.getAllValues()) { + try { + assertOnStripeRequest.accept(req); return; } catch (AssertionError e) { exceptions.add(e); diff --git a/src/test/java/com/stripe/functional/StripeClientTest.java b/src/test/java/com/stripe/functional/StripeClientTest.java index 517866b0720..63253a31c3b 100644 --- a/src/test/java/com/stripe/functional/StripeClientTest.java +++ b/src/test/java/com/stripe/functional/StripeClientTest.java @@ -1,5 +1,7 @@ package com.stripe.functional; +import static org.junit.Assert.assertEquals; + import com.google.gson.Gson; import com.google.gson.JsonObject; import com.stripe.BaseStripeTest; @@ -8,7 +10,6 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mockito.Mockito; public class StripeClientTest extends BaseStripeTest { @@ -28,22 +29,20 @@ public void tearDown() { @Test public void testReportsUsageTelemetry() throws StripeException { mockClient.customers().create(); - Mockito.reset(httpClientSpy); mockClient.customers().update("cus_xyz"); - Mockito.verify(httpClientSpy) - .request( - Mockito.argThat( - stripeRequest -> { - String usage = - new Gson() - .fromJson( - stripeRequest.headers().firstValue("X-Stripe-Client-Telemetry").get(), - JsonObject.class) - .get("last_request_metrics") - .getAsJsonObject() - .get("usage") - .getAsString(); - return usage.equals("stripe_client"); - })); + verifyStripeRequest( + (stripeRequest) -> { + assert(stripeRequest.headers().firstValue("X-Stripe-Client-Telemetry").isPresent()); + String usage = + new Gson() + .fromJson( + stripeRequest.headers().firstValue("X-Stripe-Client-Telemetry").get(), + JsonObject.class) + .get("last_request_metrics") + .getAsJsonObject() + .get("usage") + .getAsString(); + assertEquals("stripe_client", usage); + }); } }