1717
1818import  static  org .assertj .core .api .Assertions .assertThat ;
1919import  static  org .junit .jupiter .api .Assertions .assertNotSame ;
20+ import  static  org .mockito .ArgumentMatchers .any ;
21+ import  static  org .mockito .Mockito .RETURNS_MOCKS ;
22+ import  static  org .mockito .Mockito .doAnswer ;
23+ import  static  org .mockito .Mockito .mock ;
24+ import  static  org .mockito .Mockito .verify ;
2025
21- import  feign .codec .Decoder ;
22- import  feign .codec .Encoder ;
23- import  feign .codec .ErrorDecoder ;
2426import  java .lang .reflect .Field ;
2527import  java .util .List ;
2628import  org .junit .jupiter .api .Test ;
@@ -31,26 +33,37 @@ class BaseBuilderTest {
3133  @ Test 
3234  void  checkEnrichTouchesAllAsyncBuilderFields ()
3335      throws  IllegalArgumentException , IllegalAccessException  {
34-     test (
35-         AsyncFeign .builder ()
36-             .requestInterceptor (template  -> {})
37-             .responseInterceptor ((ic , c ) -> c .next (ic )),
38-         14 );
36+     Capability  mockingCapability  =
37+         test (
38+             AsyncFeign .builder ()
39+                 .requestInterceptor (template  -> {})
40+                 .responseInterceptor ((ic , c ) -> c .next (ic )),
41+             14 );
42+ 
43+     // make sure capability was invoked only once 
44+     verify (mockingCapability ).enrich (any (AsyncClient .class ));
3945  }
4046
4147  @ Test 
4248  void  checkEnrichTouchesAllBuilderFields ()
4349      throws  IllegalArgumentException , IllegalAccessException  {
44-     test (
45-         Feign .builder ()
46-             .requestInterceptor (template  -> {})
47-             .responseInterceptor ((ic , c ) -> c .next (ic )),
48-         12 );
50+     Capability  mockingCapability  =
51+         test (
52+             Feign .builder ()
53+                 .requestInterceptor (template  -> {})
54+                 .responseInterceptor ((ic , c ) -> c .next (ic )),
55+             12 );
56+ 
57+     // make sure capability was invoked only once 
58+     verify (mockingCapability ).enrich (any (Client .class ));
4959  }
5060
51-   private  void  test (BaseBuilder <?, ?> builder , int  expectedFieldsCount )
61+   private  Capability  test (BaseBuilder <?, ?> builder , int  expectedFieldsCount )
5262      throws  IllegalArgumentException , IllegalAccessException  {
53-     Capability  mockingCapability  = new  MockingCapability ();
63+     Capability  mockingCapability  = mock (Capability .class , RETURNS_MOCKS );
64+     doAnswer (inv  -> inv .getArgument (0 , BaseBuilder .class ))
65+         .when (mockingCapability )
66+         .beforeBuild (any (BaseBuilder .class ));
5467
5568    BaseBuilder <?, ?> enriched  = builder .addCapability (mockingCapability ).enrich ();
5669
@@ -69,100 +82,10 @@ private void test(BaseBuilder<?, ?> builder, int expectedFieldsCount)
6982          .isTrue ();
7083      assertNotSame (builder , enriched );
7184    }
72-   }
73- 
74-   private  final  class  MockingCapability  implements  Capability  {
75- 
76-     @ Override 
77-     @ SuppressWarnings ("unchecked" )
78-     public  <C > AsyncContextSupplier <C > enrich (AsyncContextSupplier <C > asyncContextSupplier ) {
79-       return  (AsyncContextSupplier <C >) Mockito .mock (AsyncContextSupplier .class );
80-     }
81- 
82-     @ Override 
83-     public  AsyncResponseHandler  enrich (AsyncResponseHandler  asyncResponseHandler ) {
84-       return  Mockito .mock (AsyncResponseHandler .class );
85-     }
86- 
87-     @ Override 
88-     public  ResponseInterceptor .Chain  enrich (ResponseInterceptor .Chain  chain ) {
89-       return  Mockito .mock (ResponseInterceptor .Chain .class );
90-     }
91- 
92-     @ Override 
93-     @ SuppressWarnings ("unchecked" )
94-     public  AsyncClient <Object > enrich (AsyncClient <Object > client ) {
95-       return  (AsyncClient <Object >) Mockito .mock (AsyncClient .class );
96-     }
97- 
98-     @ Override 
99-     public  Client  enrich (Client  client ) {
100-       return  Mockito .mock (Client .class );
101-     }
102- 
103-     @ Override 
104-     public  Contract  enrich (Contract  contract ) {
105-       return  Mockito .mock (Contract .class );
106-     }
107- 
108-     @ Override 
109-     public  Decoder  enrich (Decoder  decoder ) {
110-       return  Mockito .mock (Decoder .class );
111-     }
112- 
113-     @ Override 
114-     public  ErrorDecoder  enrich (ErrorDecoder  decoder ) {
115-       return  Mockito .mock (ErrorDecoder .class );
116-     }
11785
118-     @ Override 
119-     public  Encoder  enrich (Encoder  encoder ) {
120-       return  Mockito .mock (Encoder .class );
121-     }
122- 
123-     @ Override 
124-     public  InvocationHandlerFactory  enrich (InvocationHandlerFactory  invocationHandlerFactory ) {
125-       return  Mockito .mock (InvocationHandlerFactory .class );
126-     }
127- 
128-     @ Override 
129-     public  Logger .Level  enrich (Logger .Level  level ) {
130-       return  Mockito .mock (Logger .Level .class );
131-     }
132- 
133-     @ Override 
134-     public  Logger  enrich (Logger  logger ) {
135-       return  Mockito .mock (Logger .class );
136-     }
137- 
138-     @ Override 
139-     public  MethodInfoResolver  enrich (MethodInfoResolver  methodInfoResolver ) {
140-       return  Mockito .mock (MethodInfoResolver .class );
141-     }
86+     // make sure capability was invoked only once 
87+     verify (mockingCapability ).beforeBuild (any (BaseBuilder .class ));
14288
143-     @ Override 
144-     public  Request .Options  enrich (Request .Options  options ) {
145-       return  Mockito .mock (Request .Options .class );
146-     }
147- 
148-     @ Override 
149-     public  QueryMapEncoder  enrich (QueryMapEncoder  queryMapEncoder ) {
150-       return  Mockito .mock (QueryMapEncoder .class );
151-     }
152- 
153-     @ Override 
154-     public  RequestInterceptor  enrich (RequestInterceptor  requestInterceptor ) {
155-       return  Mockito .mock (RequestInterceptor .class );
156-     }
157- 
158-     @ Override 
159-     public  ResponseInterceptor  enrich (ResponseInterceptor  responseInterceptor ) {
160-       return  Mockito .mock (ResponseInterceptor .class );
161-     }
162- 
163-     @ Override 
164-     public  Retryer  enrich (Retryer  retryer ) {
165-       return  Mockito .mock (Retryer .class );
166-     }
89+     return  mockingCapability ;
16790  }
16891}
0 commit comments