2323import static org .mockito .Mockito .verify ;
2424import static org .mockito .Mockito .when ;
2525import feign .Client ;
26- import feign .InvocationHandlerFactory ;
2726import feign .Logger ;
2827import feign .Logger .Level ;
2928import feign .Param ;
3837import feign .ResponseMapper ;
3938import feign .RetryableException ;
4039import feign .Retryer ;
41- import feign .Target ;
4240import feign .codec .Decoder ;
4341import feign .codec .ErrorDecoder ;
4442import feign .jackson .JacksonDecoder ;
4543import feign .jackson .JacksonEncoder ;
4644import feign .jaxrs .JAXRSContract ;
4745import io .reactivex .Flowable ;
48- import java .lang .reflect .InvocationHandler ;
49- import java .lang .reflect .Method ;
5046import java .lang .reflect .Type ;
5147import java .nio .charset .Charset ;
5248import java .util .Arrays ;
5349import java .util .Collections ;
54- import java .util .Map ;
5550import javax .ws .rs .GET ;
5651import javax .ws .rs .Path ;
5752import okhttp3 .mockwebserver .MockResponse ;
6358import org .mockito .stubbing .Answer ;
6459import reactor .core .publisher .Flux ;
6560import reactor .core .publisher .Mono ;
61+ import reactor .test .StepVerifier ;
6662
6763public class ReactiveFeignIntegrationTest {
6864
@@ -100,16 +96,18 @@ public void testReactorTargetFull() throws Exception {
10096 .target (TestReactorService .class , this .getServerUrl ());
10197 assertThat (service ).isNotNull ();
10298
103- String version = service .version ()
104- .block ();
105- assertThat (version ).isNotNull ();
99+ StepVerifier .create (service .version ())
100+ .expectNext ("1.0" )
101+ .expectComplete ()
102+ .verify ();
106103 assertThat (webServer .takeRequest ().getPath ()).isEqualToIgnoringCase ("/version" );
107104
108105
109106 /* test encoding and decoding */
110- User user = service .user ("test" )
111- .blockFirst ();
112- assertThat (user ).isNotNull ().hasFieldOrPropertyWithValue ("username" , "test" );
107+ StepVerifier .create (service .user ("test" ))
108+ .assertNext (user -> assertThat (user ).hasFieldOrPropertyWithValue ("username" , "test" ))
109+ .expectComplete ()
110+ .verify ();
113111 assertThat (webServer .takeRequest ().getPath ()).isEqualToIgnoringCase ("/users/test" );
114112
115113 }
@@ -127,15 +125,17 @@ public void testRxJavaTarget() throws Exception {
127125 .target (TestReactiveXService .class , this .getServerUrl ());
128126 assertThat (service ).isNotNull ();
129127
130- String version = service .version ()
131- .firstElement ().blockingGet ();
132- assertThat (version ).isNotNull ();
128+ StepVerifier .create (service .version ())
129+ .expectNext ("1.0" )
130+ .expectComplete ()
131+ .verify ();
133132 assertThat (webServer .takeRequest ().getPath ()).isEqualToIgnoringCase ("/version" );
134133
135134 /* test encoding and decoding */
136- User user = service .user ("test" )
137- .firstElement ().blockingGet ();
138- assertThat (user ).isNotNull ().hasFieldOrPropertyWithValue ("username" , "test" );
135+ StepVerifier .create (service .user ("test" ))
136+ .assertNext (user -> assertThat (user ).hasFieldOrPropertyWithValue ("username" , "test" ))
137+ .expectComplete ()
138+ .verify ();
139139 assertThat (webServer .takeRequest ().getPath ()).isEqualToIgnoringCase ("/users/test" );
140140 }
141141
@@ -164,7 +164,10 @@ public void testRequestInterceptor() {
164164 TestReactorService service = ReactorFeign .builder ()
165165 .requestInterceptor (mockInterceptor )
166166 .target (TestReactorService .class , this .getServerUrl ());
167- service .version ().block ();
167+ StepVerifier .create (service .version ())
168+ .expectNext ("1.0" )
169+ .expectComplete ()
170+ .verify ();
168171 verify (mockInterceptor , times (1 )).apply (any (RequestTemplate .class ));
169172 }
170173
@@ -176,7 +179,10 @@ public void testRequestInterceptors() {
176179 TestReactorService service = ReactorFeign .builder ()
177180 .requestInterceptors (Arrays .asList (mockInterceptor , mockInterceptor ))
178181 .target (TestReactorService .class , this .getServerUrl ());
179- service .version ().block ();
182+ StepVerifier .create (service .version ())
183+ .expectNext ("1.0" )
184+ .expectComplete ()
185+ .verify ();
180186 verify (mockInterceptor , times (2 )).apply (any (RequestTemplate .class ));
181187 }
182188
@@ -193,7 +199,10 @@ public void testResponseMappers() throws Exception {
193199 TestReactorService service = ReactorFeign .builder ()
194200 .mapAndDecode (responseMapper , decoder )
195201 .target (TestReactorService .class , this .getServerUrl ());
196- service .version ().block ();
202+ StepVerifier .create (service .version ())
203+ .expectNext ("1.0" )
204+ .expectComplete ()
205+ .verify ();
197206 verify (responseMapper , times (1 ))
198207 .map (any (Response .class ), any (Type .class ));
199208 verify (decoder , times (1 )).decode (any (Response .class ), any (Type .class ));
@@ -208,16 +217,16 @@ public void testQueryMapEncoders() {
208217 TestReactiveXService service = RxJavaFeign .builder ()
209218 .queryMapEncoder (encoder )
210219 .target (TestReactiveXService .class , this .getServerUrl ());
211- String results = service .search (new SearchQuery ())
212- .blockingSingle ();
213- assertThat (results ).isNotEmpty ();
220+ StepVerifier .create (service .search (new SearchQuery ()))
221+ .expectNext ("No Results Found" )
222+ .expectComplete ()
223+ .verify ();
214224 verify (encoder , times (1 )).encode (any (Object .class ));
215225 }
216226
217- @ SuppressWarnings ({"ResultOfMethodCallIgnored" , " ThrowableNotThrown" })
227+ @ SuppressWarnings ({"ThrowableNotThrown" })
218228 @ Test
219229 public void testErrorDecoder () {
220- this .thrown .expect (RuntimeException .class );
221230 this .webServer .enqueue (new MockResponse ().setBody ("Bad Request" ).setResponseCode (400 ));
222231
223232 ErrorDecoder errorDecoder = mock (ErrorDecoder .class );
@@ -227,8 +236,11 @@ public void testErrorDecoder() {
227236 TestReactiveXService service = RxJavaFeign .builder ()
228237 .errorDecoder (errorDecoder )
229238 .target (TestReactiveXService .class , this .getServerUrl ());
230- service .search (new SearchQuery ())
231- .blockingSingle ();
239+ StepVerifier .create (service .search (new SearchQuery ()))
240+ .expectErrorSatisfies (ex -> assertThat (ex )
241+ .isInstanceOf (IllegalStateException .class )
242+ .hasMessage ("bad request" ))
243+ .verify ();
232244 verify (errorDecoder , times (1 )).decode (anyString (), any (Response .class ));
233245 }
234246
@@ -243,7 +255,10 @@ public void testRetryer() {
243255 TestReactorService service = ReactorFeign .builder ()
244256 .retryer (spy )
245257 .target (TestReactorService .class , this .getServerUrl ());
246- service .version ().log ().block ();
258+ StepVerifier .create (service .version ())
259+ .expectNext ("1.0" )
260+ .expectComplete ()
261+ .verify ();
247262 verify (spy , times (1 )).continueOrPropagate (any (RetryableException .class ));
248263 }
249264
@@ -261,7 +276,10 @@ public void testClient() throws Exception {
261276 TestReactorService service = ReactorFeign .builder ()
262277 .client (client )
263278 .target (TestReactorService .class , this .getServerUrl ());
264- service .version ().block ();
279+ StepVerifier .create (service .version ())
280+ .expectNext ("1.0" )
281+ .expectComplete ()
282+ .verify ();
265283 verify (client , times (1 )).execute (any (Request .class ), any (Options .class ));
266284 }
267285
@@ -272,8 +290,10 @@ public void testDifferentContract() throws Exception {
272290 TestJaxRSReactorService service = ReactorFeign .builder ()
273291 .contract (new JAXRSContract ())
274292 .target (TestJaxRSReactorService .class , this .getServerUrl ());
275- String version = service .version ().block ();
276- assertThat (version ).isNotNull ();
293+ StepVerifier .create (service .version ())
294+ .expectNext ("1.0" )
295+ .expectComplete ()
296+ .verify ();
277297 assertThat (webServer .takeRequest ().getPath ()).isEqualToIgnoringCase ("/version" );
278298 }
279299
0 commit comments