17
17
18
18
import static org .assertj .core .api .Assertions .assertThat ;
19
19
import 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 ;
20
25
21
- import feign .codec .Decoder ;
22
- import feign .codec .Encoder ;
23
- import feign .codec .ErrorDecoder ;
24
26
import java .lang .reflect .Field ;
25
27
import java .util .List ;
26
28
import org .junit .jupiter .api .Test ;
@@ -31,26 +33,37 @@ class BaseBuilderTest {
31
33
@ Test
32
34
void checkEnrichTouchesAllAsyncBuilderFields ()
33
35
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 ));
39
45
}
40
46
41
47
@ Test
42
48
void checkEnrichTouchesAllBuilderFields ()
43
49
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 ));
49
59
}
50
60
51
- private void test (BaseBuilder <?, ?> builder , int expectedFieldsCount )
61
+ private Capability test (BaseBuilder <?, ?> builder , int expectedFieldsCount )
52
62
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 ));
54
67
55
68
BaseBuilder <?, ?> enriched = builder .addCapability (mockingCapability ).enrich ();
56
69
@@ -69,100 +82,10 @@ private void test(BaseBuilder<?, ?> builder, int expectedFieldsCount)
69
82
.isTrue ();
70
83
assertNotSame (builder , enriched );
71
84
}
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
- }
117
85
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 ));
142
88
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 ;
167
90
}
168
91
}
0 commit comments