Files
spring-boot-demo/http-service-clients/src/test/java/com/ankurm/hsc/Step09RestClientSliceTest.java
T
2026-11-06 21:44:06 +05:30

56 lines
2.4 KiB
Java

package com.ankurm.hsc;
import com.ankurm.hsc.client.PostClient;
import com.ankurm.hsc.model.Post;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.restclient.test.autoconfigure.RestClientTest;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.http.MediaType;
import org.springframework.test.web.client.MockRestServiceServer;
import org.springframework.web.client.RestClient;
import org.springframework.web.client.support.RestClientAdapter;
import org.springframework.web.service.invoker.HttpServiceProxyFactory;
import org.springframework.web.service.registry.ImportHttpServices;
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;
/**
* @RestClientTest next to an @ImportHttpServices group: what binds to the auto-configured
* MockRestServiceServer and what does not.
*/
@RestClientTest(properties = "spring.http.serviceclient.slice.base-url=http://upstream.test")
@Import(Step09RestClientSliceTest.SliceGroups.class)
class Step09RestClientSliceTest {
@Configuration(proxyBeanMethods = false)
@ImportHttpServices(group = "slice", types = PostClient.class)
static class SliceGroups {
}
@Autowired
RestClient.Builder builder;
@Autowired
MockRestServiceServer server;
private static final String JSON = "{\"id\":1,\"userId\":1,\"title\":\"From the mock\",\"body\":\"b\"}";
@Test
void sliceWithHttpServiceGroup() {
Transcript t = new Transcript("09-rest-client-test-slice.txt");
t.line("# a proxy built from the slice's own RestClient.Builder, which the mock server IS bound to");
PostClient viaBuilder = HttpServiceProxyFactory.builderFor(
RestClientAdapter.create(builder.baseUrl("http://upstream.test").build())).build().createClient(PostClient.class);
server.expect(requestTo("http://upstream.test/posts/1")).andRespond(withSuccess(JSON, MediaType.APPLICATION_JSON));
Post p = viaBuilder.findById(1);
server.verify();
t.line("findById(1) -> %s", p);
t.save();
assertThat(p.title()).isEqualTo("From the mock");
}
}