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