Skip to content

Commit

Permalink
Merge branch 'main' into dependabot/gradle/crime-application-tracking…
Browse files Browse the repository at this point in the history
…/org.springframework.boot-3.2.5
  • Loading branch information
nittagr committed Apr 29, 2024
2 parents dc53ed8 + 8105303 commit ca3fa16
Show file tree
Hide file tree
Showing 14 changed files with 711 additions and 2 deletions.
3 changes: 3 additions & 0 deletions crime-application-tracking/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ java {

def versions = [
pitest : "1.16.0",
okhttpVersion : "4.9.3",
mockwebserverVersion : "4.12.0",
sentryVersion : "7.8.0",
validationapiVersion : '2.0.1.Final',
commonsioVersion : '2.11.0',
Expand Down Expand Up @@ -61,6 +63,7 @@ dependencies {
testImplementation "org.springframework.security:spring-security-test"
testImplementation 'io.projectreactor:reactor-test'
testImplementation "org.pitest:pitest:$versions.pitest"
testImplementation "com.squareup.okhttp3:mockwebserver:$versions.mockwebserverVersion"
testImplementation group: 'commons-io', name: 'commons-io', version: versions.commonsioVersion
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package uk.gov.justice.laa.crime.application.tracking.config;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.oauth2.client.web.OAuth2AuthorizedClientRepository;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.netty.resources.ConnectionProvider;

import org.springframework.security.oauth2.client.web.reactive.function.client.ServletOAuth2AuthorizedClientExchangeFilterFunction;
import uk.gov.justice.laa.crime.application.tracking.client.MaatCourtDataApiClient;

import java.time.Duration;

import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.Mockito.when;
import static org.assertj.core.api.Assertions.assertThat;

@SpringBootTest
class MaatCourtDataWebClientConfigurationTest {
@Autowired
private ServicesConfiguration servicesConfiguration;
@Autowired
private ClientRegistrationRepository clientRegistrations;
@Autowired
private OAuth2AuthorizedClientRepository authorizedClients;
@Autowired
private WebClient webClient;

private MaatCourtDataWebClientConfiguration webClientConfig;

@BeforeEach
void setUp() {
webClientConfig = new MaatCourtDataWebClientConfiguration();
}

@Test
void shouldConfigureWebClient(){
WebClient webClient = webClientConfig.maatCourtDataWebClient(servicesConfiguration, clientRegistrations, authorizedClients);
assertNotNull(webClient);
}

@Test
void shouldConfigureMaatCourtDataApiClient(){
MaatCourtDataApiClient maatCourtDataApiClient = webClientConfig.maatCourtDataApiClient(webClient);
assertNotNull(maatCourtDataApiClient);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package uk.gov.justice.laa.crime.application.tracking.config;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;

import java.lang.reflect.Field;

import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
class ServicesConfigurationTest {
@Autowired
ServicesConfiguration myClass;
@Test
void testVariables() {
String expectedUrl = "http://test.com";
String expectedRegID = "201920";
// Call a public method that interacts with the private variable
ServicesConfiguration.MaatApi maatApi = new ServicesConfiguration.MaatApi(expectedUrl, expectedRegID);
myClass.setMaatApi(maatApi);

// Assert the expected behavior
assertEquals(expectedUrl, maatApi.getBaseUrl());
assertEquals(expectedRegID, maatApi.getRegistrationId());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package uk.gov.justice.laa.crime.application.tracking.exception;

import org.junit.jupiter.api.Test;
import org.springframework.http.HttpStatus;

import static org.junit.jupiter.api.Assertions.*;

class ApplicationTrackingExceptionTest {

@Test
void getHttpResponseCode() {
// Arrange
HttpStatus expectedStatus = HttpStatus.BAD_REQUEST; // Example HttpStatus
String expectedMessage = "Test message";

// Act
ApplicationTrackingException exception = new ApplicationTrackingException(expectedStatus, expectedMessage);

// Assert
assertEquals(expectedMessage, exception.getMessage(), "The exception message should match the provided message");
assertEquals(expectedStatus, exception.getHttpResponseCode(), "The HttpStatus should match the provided HttpStatus");

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,257 @@
package uk.gov.justice.laa.crime.application.tracking.integration;

import okhttp3.mockwebserver.MockWebServer;
import org.junit.jupiter.api.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import uk.gov.justice.laa.crime.application.tracking.CrimeApplicationTrackingApplication;
import uk.gov.justice.laa.crime.application.tracking.model.ApplicationTrackingOutputResult;
import uk.gov.justice.laa.crime.application.tracking.model.ApplicationTrackingOutputResult.RequestSource;
import uk.gov.justice.laa.crime.application.tracking.testutils.FileUtils;
import uk.gov.justice.laa.crime.application.tracking.testutils.JsonUtils;

import java.io.IOException;

import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.DEFINED_PORT;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@SpringBootTest(classes = CrimeApplicationTrackingApplication.class, webEnvironment = DEFINED_PORT)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class ApplicationTrackingServiceIntegrationTest {
private MockMvc mvc;

private static MockWebServer mockWebServer;

private ApplicationTrackingOutputResult applicationTrackingOutputResultJson;

@Autowired private WebApplicationContext webApplicationContext;

@BeforeAll
public void initialiseMockWebServer() throws IOException {
mockWebServer = new MockWebServer();
mockWebServer.setDispatcher(MockWebServerStubs.forDownstreamApiCalls());
mockWebServer.start(9999);
}

@AfterAll
protected void shutdownMockWebServer() throws IOException {
mockWebServer.shutdown();
}

@BeforeEach
public void setup() {
String content = FileUtils.readFileToString("testdata/ApplicationTrackingOutputResult_default.json");
applicationTrackingOutputResultJson = JsonUtils.jsonToObject(content, ApplicationTrackingOutputResult.class);

this.mvc = MockMvcBuilders.webAppContextSetup(this.webApplicationContext).build();
}

@Test
void givenCreateApplicationRequest_shouldCreateAudit_andDoRequiredUpdates() throws Exception {
String content = createApplicationTrackingOutputResult(RequestSource.CREATE_APPLICATION);
RequestBuilder request =
MockMvcRequestBuilders.post(
"/api/internal/v1/application-tracking-output-result")
.content(content)
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON);

mvc.perform(request)
.andExpect(status().isOk())
.andReturn();

}

@Test
void givenCreateApplicationRequest_shouldNotCreateAudit_andThrowError() throws Exception {
String content = createApplicationTrackingOutputResult(RequestSource.CREATE_APPLICATION, 123456);
RequestBuilder request =
MockMvcRequestBuilders.post(
"/api/internal/v1/application-tracking-output-result")
.content(content)
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON);

mvc.perform(request)
.andExpect(status().is4xxClientError())
.andReturn();

}

@Test
void givenCreateApplicationRequest_shouldProcessHardship_andDoRequiredUpdates() throws Exception {
String content = createApplicationTrackingOutputResult(RequestSource.HARDSHIP);
RequestBuilder request =
MockMvcRequestBuilders.post(
"/api/internal/v1/application-tracking-output-result")
.content(content)
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON);

mvc.perform(request)
.andExpect(status().isOk())
.andReturn();

}

@Test
void givenCreateApplicationRequest_shouldNotProcessHardship_andThrowError() throws Exception {
String content = createApplicationTrackingOutputResult(RequestSource.HARDSHIP, 123456);
RequestBuilder request =
MockMvcRequestBuilders.post(
"/api/internal/v1/application-tracking-output-result")
.content(content)
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON);

mvc.perform(request)
.andExpect(status().is4xxClientError())
.andReturn();

}

@Test
void givenCreateApplicationRequest_shouldProcessCrownCourt_andDoRequiredUpdates() throws Exception {
String content = createApplicationTrackingOutputResult(RequestSource.CROWN_COURT);
RequestBuilder request =
MockMvcRequestBuilders.post(
"/api/internal/v1/application-tracking-output-result")
.content(content)
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON);

mvc.perform(request)
.andExpect(status().isOk())
.andReturn();

}

@Test
void givenCreateApplicationRequest_shouldNotProcessCrownCourt_andThrowError() throws Exception {
String content = createApplicationTrackingOutputResult(RequestSource.CROWN_COURT, 123456);
RequestBuilder request =
MockMvcRequestBuilders.post(
"/api/internal/v1/application-tracking-output-result")
.content(content)
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON);

mvc.perform(request)
.andExpect(status().is4xxClientError())
.andReturn();

}

@Test
void givenCreateApplicationRequest_shouldUpdateCapitalAndEquity_andDoRequiredUpdates() throws Exception {
String content = createApplicationTrackingOutputResult(RequestSource.CAPITAL_AND_EQUITY);
RequestBuilder request =
MockMvcRequestBuilders.post(
"/api/internal/v1/application-tracking-output-result")
.content(content)
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON);

mvc.perform(request)
.andExpect(status().isOk())
.andReturn();

}

@Test
void givenCreateApplicationRequest_shouldNotUpdateCapitalAndEquity_andThrowError() throws Exception {
String content = createApplicationTrackingOutputResult(RequestSource.CAPITAL_AND_EQUITY, 12345);
RequestBuilder request =
MockMvcRequestBuilders.post(
"/api/internal/v1/application-tracking-output-result")
.content(content)
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON);

mvc.perform(request)
.andExpect(status().is4xxClientError())
.andReturn();

}

@Test
void givenCreateApplicationRequest_shouldProcessPassportIOJ_andDoRequiredUpdates() throws Exception {
String content = createApplicationTrackingOutputResult(RequestSource.PASSPORT_IOJ);
RequestBuilder request =
MockMvcRequestBuilders.post(
"/api/internal/v1/application-tracking-output-result")
.content(content)
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON);

mvc.perform(request)
.andExpect(status().isOk())
.andReturn();

}

@Test
void givenCreateApplicationRequest_shouldNotProcessPassportIOJ_andThrowError() throws Exception {
String content = createApplicationTrackingOutputResult(RequestSource.PASSPORT_IOJ, 12345);
RequestBuilder request =
MockMvcRequestBuilders.post(
"/api/internal/v1/application-tracking-output-result")
.content(content)
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON);

mvc.perform(request)
.andExpect(status().is4xxClientError())
.andReturn();

}

@Test
void givenCreateApplicationRequest_shouldProcessMeansAssesment_andDoRequiredUpdates() throws Exception {
String content = createApplicationTrackingOutputResult(RequestSource.MEANS_ASSESSMENT);
RequestBuilder request =
MockMvcRequestBuilders.post(
"/api/internal/v1/application-tracking-output-result")
.content(content)
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON);

mvc.perform(request)
.andExpect(status().isOk())
.andReturn();

}

@Test
void givenCreateApplicationRequestWithUnknownUSN_shouldNotProcessMeansAssessment_andThrowError() throws Exception {
String content = createApplicationTrackingOutputResult(RequestSource.MEANS_ASSESSMENT, 40400404);
RequestBuilder request =
MockMvcRequestBuilders.post(
"/api/internal/v1/application-tracking-output-result")
.content(content)
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON);

mvc.perform(request)
.andExpect(status().is4xxClientError())
.andReturn();
}

private String createApplicationTrackingOutputResult(RequestSource requestSource, int usn) {
applicationTrackingOutputResultJson.setRequestSource(requestSource);
applicationTrackingOutputResultJson.setUsn(usn);
return JsonUtils.objectToJson(requestSource);
}


private String createApplicationTrackingOutputResult(RequestSource requestSource) {
applicationTrackingOutputResultJson.setRequestSource(requestSource);
return JsonUtils.objectToJson(applicationTrackingOutputResultJson);
}
}
Loading

0 comments on commit ca3fa16

Please sign in to comment.