63 lines
2.6 KiB
Java
63 lines
2.6 KiB
Java
package com.ankurm.restclienttest;
|
|
|
|
import tools.jackson.databind.ObjectMapper;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.mockito.Mockito;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.boot.restclient.test.autoconfigure.RestClientTest;
|
|
import org.springframework.http.MediaType;
|
|
import org.springframework.test.context.bean.override.mockito.MockitoBean;
|
|
import org.springframework.test.web.client.MockRestServiceServer;
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo;
|
|
import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess;
|
|
|
|
/**
|
|
* The core example: a {@code RestClient}-based client, tested with {@code @RestClientTest} and
|
|
* {@code MockRestServiceServer}. {@link EmployeeClient} also depends on
|
|
* {@link EmployeeAuditLogger}, a plain collaborator the REST-client slice never creates on its
|
|
* own - replaced here with {@code @MockitoBean} now that {@code @MockBean} no longer exists in
|
|
* Spring Boot 4.
|
|
*/
|
|
@RestClientTest(EmployeeClient.class)
|
|
class RestClientEmployeeTest {
|
|
|
|
@Autowired
|
|
private MockRestServiceServer mockServer;
|
|
|
|
@Autowired
|
|
private EmployeeClient employeeClient;
|
|
|
|
@Autowired
|
|
private ObjectMapper objectMapper;
|
|
|
|
@MockitoBean
|
|
private EmployeeAuditLogger auditLogger;
|
|
|
|
@Test
|
|
void whenGetEmployeeById_thenReturnsEmployeeAndAudits() throws Exception {
|
|
Employee mockEmployee = new Employee(1, "Ankur", "M", "[email protected]");
|
|
String employeeJson = objectMapper.writeValueAsString(mockEmployee);
|
|
|
|
mockServer.expect(requestTo("http://hr-api.example.com/employees/1"))
|
|
.andRespond(withSuccess(employeeJson, MediaType.APPLICATION_JSON));
|
|
|
|
Employee result = employeeClient.getEmployeeById(1);
|
|
|
|
assertThat(result).isNotNull();
|
|
assertThat(result.id()).isEqualTo(1);
|
|
assertThat(result.firstName()).isEqualTo("Ankur");
|
|
|
|
mockServer.verify();
|
|
Mockito.verify(auditLogger).logFetch(1);
|
|
|
|
Capture.write("01-restclient-basic-fetch.txt",
|
|
"RestClient-based EmployeeClient, real deserialized result and audit call",
|
|
"requestTo(\"http://hr-api.example.com/employees/1\") -> 200 OK " + employeeJson
|
|
+ "\nresult = " + result
|
|
+ "\nauditLogger.logFetch(1) called = " + Mockito.mockingDetails(auditLogger)
|
|
.getInvocations().stream().anyMatch(i -> i.getMethod().getName().equals("logFetch")));
|
|
}
|
|
}
|