From 571c66068e8339b9cade15b362abdc627d6e7a80 Mon Sep 17 00:00:00 2001 From: Riadh <22998716+KiKoS0@users.noreply.github.com> Date: Fri, 13 Sep 2024 00:48:34 +0200 Subject: [PATCH] Implement test for deployId query parameter when calling Sync endpoint --- inngest-spring-boot-demo/build.gradle.kts | 1 + .../springbootdemo/DevServerComponent.java | 2 +- .../springbootdemo/SyncRequestTest.java | 130 ++++++++++++++++++ 3 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 inngest-spring-boot-demo/src/test/java/com/inngest/springbootdemo/SyncRequestTest.java diff --git a/inngest-spring-boot-demo/build.gradle.kts b/inngest-spring-boot-demo/build.gradle.kts index 06c0dc62..259e0b33 100644 --- a/inngest-spring-boot-demo/build.gradle.kts +++ b/inngest-spring-boot-demo/build.gradle.kts @@ -26,6 +26,7 @@ dependencies { implementation("com.squareup.okhttp3:okhttp:4.12.0") testImplementation("org.springframework.boot:spring-boot-starter-test") + testImplementation("com.squareup.okhttp3:mockwebserver:4.12.0") if (JavaVersion.current().isJava11Compatible) { testImplementation("uk.org.webcompere:system-stubs-jupiter:2.1.6") diff --git a/inngest-spring-boot-demo/src/main/java/com/inngest/springbootdemo/DevServerComponent.java b/inngest-spring-boot-demo/src/main/java/com/inngest/springbootdemo/DevServerComponent.java index 272c0abf..b7083410 100644 --- a/inngest-spring-boot-demo/src/main/java/com/inngest/springbootdemo/DevServerComponent.java +++ b/inngest-spring-boot-demo/src/main/java/com/inngest/springbootdemo/DevServerComponent.java @@ -33,7 +33,7 @@ private void waitForStartup(CommHandler commHandler) throws Exception { try (Response response = httpClient.newCall(request).execute()) { if (response.code() == 200) { Thread.sleep(3000); - commHandler.register("http://localhost:8080"); + commHandler.register("http://localhost:8080", null); return; } } diff --git a/inngest-spring-boot-demo/src/test/java/com/inngest/springbootdemo/SyncRequestTest.java b/inngest-spring-boot-demo/src/test/java/com/inngest/springbootdemo/SyncRequestTest.java new file mode 100644 index 00000000..27e88dfd --- /dev/null +++ b/inngest-spring-boot-demo/src/test/java/com/inngest/springbootdemo/SyncRequestTest.java @@ -0,0 +1,130 @@ +package com.inngest.springbootdemo; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.inngest.*; +import com.inngest.springboot.InngestConfiguration; +import okhttp3.mockwebserver.MockResponse; +import okhttp3.mockwebserver.MockWebServer; +import okhttp3.mockwebserver.RecordedRequest; +import org.junit.jupiter.api.*; +import org.junit.jupiter.api.condition.EnabledIfSystemProperty; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Import; +import org.springframework.test.web.servlet.MockMvc; +import uk.org.webcompere.systemstubs.environment.EnvironmentVariables; +import uk.org.webcompere.systemstubs.jupiter.SystemStub; +import uk.org.webcompere.systemstubs.jupiter.SystemStubsExtension; + +import java.util.HashMap; + +import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + + +@ExtendWith(SystemStubsExtension.class) +public class SyncRequestTest { + static class SyncInngestConfiguration extends InngestConfiguration { + protected HashMap functions() { + return new HashMap<>(); + } + + @Override + protected Inngest inngestClient() { + return new Inngest("spring_test_registration"); + } + + @Override + protected ServeConfig serve(Inngest client) { + return new ServeConfig(client); + } + + @Bean + protected CommHandler commHandler(@Autowired Inngest inngestClient) { + ServeConfig serveConfig = new ServeConfig(inngestClient); + return new CommHandler(functions(), inngestClient, serveConfig, SupportedFrameworkName.SpringBoot); + } + } + + @SystemStub + private static EnvironmentVariables environmentVariables; + + public static MockWebServer mockWebServer; + + @Import(SyncInngestConfiguration.class) + @WebMvcTest(DemoController.class) + @Nested + @EnabledIfSystemProperty(named = "test-group", matches = "unit-test") + @TestMethodOrder(MethodOrderer.OrderAnnotation.class) + class InnerSpringTest { + @Autowired + private MockMvc mockMvc; + + @BeforeEach + void BeforeEach() throws Exception { + mockWebServer = new MockWebServer(); + mockWebServer.start(); + + String serverUrl = mockWebServer.url("").toString(); + + environmentVariables.set("INNGEST_API_BASE_URL", serverUrl.substring(0, serverUrl.length() - 1)); + } + + @AfterEach + void afterEach() throws Exception { + mockWebServer.shutdown(); + } + + private void assertThatPayloadDoesNotContainDeployId(RecordedRequest recordedRequest) throws Exception { + String requestBody = recordedRequest.getBody().readUtf8(); + + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(requestBody); + + assertFalse(jsonNode.has("deployId")); + } + + @Test + public void shouldIncludeDeployIdInSyncRequestIfPresent() throws Exception { + mockWebServer.enqueue(new MockResponse().setBody("Success")); + mockWebServer.enqueue(new MockResponse().setBody("Success")); + mockWebServer.enqueue(new MockResponse().setBody("Success")); + + mockMvc.perform(put("/api/inngest") + .header("Host", "localhost:8080") + .param("deployId", "1")) + .andExpect(status().isOk()); + + RecordedRequest recordedRequest = mockWebServer.takeRequest(); + + assertEquals("/fn/register", recordedRequest.getRequestUrl().encodedPath()); + assertEquals("1", recordedRequest.getRequestUrl().queryParameter("deployId")); + assertThatPayloadDoesNotContainDeployId(recordedRequest); + + mockMvc.perform(put("/api/inngest") + .header("Host", "localhost:8080")) + .andExpect(status().isOk()); + + recordedRequest = mockWebServer.takeRequest(); + + assertEquals("/fn/register", recordedRequest.getRequestUrl().encodedPath()); + assertNull(recordedRequest.getRequestUrl().queryParameter("deployId")); + assertThatPayloadDoesNotContainDeployId(recordedRequest); + + mockMvc.perform(put("/api/inngest") + .header("Host", "localhost:8080") + .param("deployId", "3")) + .andExpect(status().isOk()); + + recordedRequest = mockWebServer.takeRequest(); + + assertEquals("/fn/register", recordedRequest.getRequestUrl().encodedPath()); + assertEquals("3", recordedRequest.getRequestUrl().queryParameter("deployId")); + assertThatPayloadDoesNotContainDeployId(recordedRequest); + } + } +}