Skip to content

Commit

Permalink
Implement test for deployId query parameter when calling Sync endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
KiKoS0 committed Sep 12, 2024
1 parent 06135c3 commit 571c660
Show file tree
Hide file tree
Showing 3 changed files with 132 additions and 1 deletion.
1 change: 1 addition & 0 deletions inngest-spring-boot-demo/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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<String, InngestFunction> 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);
}
}
}

0 comments on commit 571c660

Please sign in to comment.