2020import java .util .function .Predicate ;
2121
2222import org .junit .jupiter .api .Test ;
23+ import org .mockito .Mockito ;
2324
2425import org .springframework .context .annotation .AnnotationConfigApplicationContext ;
26+ import org .springframework .http .client .ClientHttpRequestFactory ;
2527import org .springframework .util .LinkedMultiValueMap ;
2628import org .springframework .util .MultiValueMap ;
2729import org .springframework .web .client .RestClient ;
3133import org .springframework .web .service .registry .echo .EchoB ;
3234import org .springframework .web .service .registry .greeting .GreetingA ;
3335import org .springframework .web .service .registry .greeting .GreetingB ;
36+ import org .springframework .web .testfixture .http .client .MockClientHttpRequest ;
37+ import org .springframework .web .testfixture .http .client .MockClientHttpResponse ;
3438
3539import static org .assertj .core .api .Assertions .assertThat ;
40+ import static org .mockito .ArgumentMatchers .any ;
41+ import static org .mockito .Mockito .verify ;
42+ import static org .mockito .Mockito .when ;
43+ import static org .springframework .web .service .registry .HttpServiceGroup .ClientType .REST_CLIENT ;
3644
3745/**
3846 * Unit tests for {@link HttpServiceProxyRegistryFactoryBean}.
@@ -42,43 +50,65 @@ public class HttpServiceProxyRegistryFactoryBeanTests {
4250
4351 @ Test
4452 void twoGroups () {
45-
46- GroupsMetadata groupsMetadata = new GroupsMetadata ();
47-
4853 String echoName = "echo" ;
4954 String greetingName = "greeting" ;
55+ GroupsMetadata groupsMetadata = new GroupsMetadata ();
5056
51- groupsMetadata . getOrCreateGroup ( echoName , HttpServiceGroup . ClientType . REST_CLIENT )
52- . httpServiceTypeNames (). addAll ( List . of ( EchoA . class . getName (), EchoB . class . getName ()) );
57+ List < String > echoServices = List . of ( EchoA . class . getName (), EchoB . class . getName ());
58+ groupsMetadata . getOrCreateGroup ( echoName , REST_CLIENT ). httpServiceTypeNames (). addAll ( echoServices );
5359
54- groupsMetadata . getOrCreateGroup ( greetingName , HttpServiceGroup . ClientType . REST_CLIENT )
55- . httpServiceTypeNames (). addAll ( List . of ( GreetingA . class . getName (), GreetingB . class . getName ()) );
60+ List < String > greetingServices = List . of ( GreetingA . class . getName (), GreetingB . class . getName ());
61+ groupsMetadata . getOrCreateGroup ( greetingName , REST_CLIENT ). httpServiceTypeNames (). addAll ( greetingServices );
5662
5763 Predicate <HttpServiceGroup > echoFilter = group -> group .name ().equals (echoName );
5864 Predicate <HttpServiceGroup > greetingFilter = group -> group .name ().equals (greetingName );
65+ TestConfigurer groupConfigurer = new TestConfigurer (List .of (echoFilter , greetingFilter ));
5966
60- TestConfigurer testConfigurer = new TestConfigurer (List .of (echoFilter , greetingFilter ));
61-
62- AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext ();
63- applicationContext .registerBean (TestConfigurer .class , () -> testConfigurer );
64- applicationContext .refresh ();
65-
66- HttpServiceProxyRegistryFactoryBean factoryBean = new HttpServiceProxyRegistryFactoryBean (groupsMetadata );
67- factoryBean .setApplicationContext (applicationContext );
68- factoryBean .setBeanClassLoader (getClass ().getClassLoader ());
69- factoryBean .afterPropertiesSet ();
70-
71- HttpServiceProxyRegistry registry = factoryBean .getObject ();
67+ HttpServiceProxyRegistry registry = initProxyRegistry (groupConfigurer , groupsMetadata );
7268 assertThat (registry .getGroupNames ()).containsExactlyInAnyOrder (echoName , greetingName );
7369 assertThat (registry .getClientTypesInGroup (echoName )).containsExactlyInAnyOrder (EchoA .class , EchoB .class );
7470 assertThat (registry .getClientTypesInGroup (greetingName )).containsExactlyInAnyOrder (GreetingA .class , GreetingB .class );
7571
76- assertThat (testConfigurer .invocations )
72+ assertThat (groupConfigurer .invocations )
7773 .containsKeys (echoFilter , greetingFilter )
7874 .containsEntry (echoFilter , List .of (echoName ))
7975 .containsEntry (greetingFilter , List .of (greetingName ));
8076 }
8177
78+ @ Test
79+ void initializeClientBuilder () throws Exception {
80+ GroupsMetadata groupsMetadata = new GroupsMetadata ();
81+ groupsMetadata .getOrCreateGroup ("echo" , REST_CLIENT ).httpServiceTypeNames ().add (EchoA .class .getName ());
82+
83+ ClientHttpRequestFactory requestFactory = Mockito .mock (ClientHttpRequestFactory .class );
84+ MockClientHttpRequest request = new MockClientHttpRequest ();
85+ request .setResponse (new MockClientHttpResponse ());
86+ when (requestFactory .createRequest (any (), any ())).thenReturn (request );
87+
88+ RestClient .Builder clientBuilder = RestClient .builder ().baseUrl ("/" ).requestFactory (requestFactory );
89+ RestClientHttpServiceGroupConfigurer groupConfigurer = groups -> groups .forEachClient (group -> clientBuilder );
90+
91+ HttpServiceProxyRegistry registry = initProxyRegistry (groupConfigurer , groupsMetadata );
92+ registry .getClient (EchoA .class ).handle ("foo" );
93+
94+ verify (requestFactory );
95+ }
96+
97+ private HttpServiceProxyRegistry initProxyRegistry (
98+ RestClientHttpServiceGroupConfigurer groupConfigurer , GroupsMetadata groupsMetadata ) {
99+
100+ AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext ();
101+ context .registerBean (RestClientHttpServiceGroupConfigurer .class , () -> groupConfigurer );
102+ context .refresh ();
103+
104+ HttpServiceProxyRegistryFactoryBean factoryBean = new HttpServiceProxyRegistryFactoryBean (groupsMetadata );
105+ factoryBean .setApplicationContext (context );
106+ factoryBean .setBeanClassLoader (getClass ().getClassLoader ());
107+ factoryBean .afterPropertiesSet ();
108+
109+ return factoryBean .getObject ();
110+ }
111+
82112
83113 private static class TestConfigurer implements RestClientHttpServiceGroupConfigurer {
84114
0 commit comments