1616package feign ;
1717
1818import com .google .common .collect .ImmutableList ;
19- import com .google .common .collect .ImmutableSet ;
2019import com .google .gson .reflect .TypeToken ;
21- import org .testng .annotations .Test ;
22-
23- import javax .inject .Named ;
2420import java .net .URI ;
21+ import java .util .Arrays ;
2522import java .util .List ;
26-
27- import static org .testng .Assert .assertEquals ;
28- import static org .testng .Assert .assertFalse ;
29- import static org .testng .Assert .assertNull ;
30- import static org .testng .Assert .assertTrue ;
23+ import javax .inject .Named ;
24+ import org .junit .Rule ;
25+ import org .junit .Test ;
26+ import org .junit .rules .ExpectedException ;
3127
3228import static feign .Util .UTF_8 ;
29+ import static org .junit .Assert .assertEquals ;
30+ import static org .junit .Assert .assertFalse ;
31+ import static org .junit .Assert .assertNull ;
32+ import static org .junit .Assert .assertTrue ;
3333
3434/**
3535 * Tests interfaces defined per {@link Contract.Default} are interpreted into expected {@link feign
3636 * .RequestTemplate template}
3737 * instances.
3838 */
39- @ Test
4039public class DefaultContractTest {
40+ @ Rule public final ExpectedException thrown = ExpectedException .none ();
41+
4142 Contract .Default contract = new Contract .Default ();
4243
4344 interface Methods {
@@ -51,14 +52,14 @@ interface Methods {
5152 }
5253
5354 @ Test public void httpMethods () throws Exception {
54- assertEquals (contract . parseAndValidatateMetadata ( Methods . class . getDeclaredMethod ( "post" )). template (). method () ,
55- "POST" );
56- assertEquals (contract . parseAndValidatateMetadata ( Methods . class . getDeclaredMethod ( "put" )). template (). method () ,
57- "PUT" );
58- assertEquals (contract . parseAndValidatateMetadata ( Methods . class . getDeclaredMethod ( "get" )). template (). method () ,
59- "GET" );
60- assertEquals (contract . parseAndValidatateMetadata ( Methods . class . getDeclaredMethod ( "delete" )). template (). method () ,
61- "DELETE" );
55+ assertEquals ("POST" ,
56+ contract . parseAndValidatateMetadata ( Methods . class . getDeclaredMethod ( "post" )). template (). method () );
57+ assertEquals ("PUT" ,
58+ contract . parseAndValidatateMetadata ( Methods . class . getDeclaredMethod ( "put" )). template (). method () );
59+ assertEquals ("GET" ,
60+ contract . parseAndValidatateMetadata ( Methods . class . getDeclaredMethod ( "get" )). template (). method () );
61+ assertEquals ("DELETE" ,
62+ contract . parseAndValidatateMetadata ( Methods . class . getDeclaredMethod ( "delete" )). template (). method () );
6263 }
6364
6465 interface BodyParams {
@@ -78,9 +79,11 @@ interface BodyParams {
7879 }.getType ());
7980 }
8081
81- @ Test (expectedExceptions = IllegalStateException .class , expectedExceptionsMessageRegExp = "Method has too many Body.*" )
82- public void tooManyBodies () throws Exception {
83- contract .parseAndValidatateMetadata (BodyParams .class .getDeclaredMethod ("tooMany" , List .class , List .class ));
82+ @ Test public void tooManyBodies () throws Exception {
83+ thrown .expect (IllegalStateException .class );
84+ thrown .expectMessage ("Method has too many Body" );
85+ contract .parseAndValidatateMetadata (
86+ BodyParams .class .getDeclaredMethod ("tooMany" , List .class , List .class ));
8487 }
8588
8689 interface CustomMethodAndURIParam {
@@ -90,13 +93,13 @@ interface CustomMethodAndURIParam {
9093 @ Test public void requestLineOnlyRequiresMethod () throws Exception {
9194 MethodMetadata md = contract .parseAndValidatateMetadata (CustomMethodAndURIParam .class .getDeclaredMethod ("patch" ,
9295 URI .class ));
93- assertEquals (md .template ().method (), "PATCH" );
94- assertEquals (md .template ().url (), "" );
96+ assertEquals ("PATCH" , md .template ().method ());
97+ assertEquals ("" , md .template ().url ());
9598 assertTrue (md .template ().queries ().isEmpty ());
9699 assertTrue (md .template ().headers ().isEmpty ());
97100 assertNull (md .template ().body ());
98101 assertNull (md .template ().bodyTemplate ());
99- assertEquals (md . urlIndex ( ), Integer . valueOf ( 0 ));
102+ assertEquals (Integer . valueOf ( 0 ), md . urlIndex ( ));
100103 }
101104
102105 interface WithQueryParamsInPath {
@@ -114,38 +117,38 @@ interface WithQueryParamsInPath {
114117 @ Test public void queryParamsInPathExtract () throws Exception {
115118 {
116119 MethodMetadata md = contract .parseAndValidatateMetadata (WithQueryParamsInPath .class .getDeclaredMethod ("none" ));
117- assertEquals (md .template ().url (), "/" );
120+ assertEquals ("/" , md .template ().url ());
118121 assertTrue (md .template ().queries ().isEmpty ());
119- assertEquals (md . template (). toString (), "GET / HTTP/1.1\n " );
122+ assertEquals ("GET / HTTP/1.1\n " , md . template (). toString () );
120123 }
121124 {
122125 MethodMetadata md = contract .parseAndValidatateMetadata (WithQueryParamsInPath .class .getDeclaredMethod ("one" ));
123- assertEquals (md .template ().url (), "/" );
124- assertEquals (md .template ().queries ().get ("Action" ), ImmutableSet . of ( "GetUser " ));
125- assertEquals (md . template (). toString (), "GET /?Action=GetUser HTTP/1.1\n " );
126+ assertEquals ("/" , md .template ().url ());
127+ assertEquals (Arrays . asList ( "GetUser" ), md .template ().queries ().get ("Action" ));
128+ assertEquals ("GET /?Action=GetUser HTTP/1.1\n " , md . template (). toString () );
126129 }
127130 {
128131 MethodMetadata md = contract .parseAndValidatateMetadata (WithQueryParamsInPath .class .getDeclaredMethod ("two" ));
129- assertEquals (md .template ().url (), "/" );
130- assertEquals (md .template ().queries ().get ("Action" ), ImmutableSet . of ( "GetUser " ));
131- assertEquals (md .template ().queries ().get ("Version" ), ImmutableSet . of ( "2010-05-08 " ));
132- assertEquals (md . template (). toString (), "GET /?Action=GetUser&Version=2010-05-08 HTTP/1.1\n " );
132+ assertEquals ("/" , md .template ().url ());
133+ assertEquals (Arrays . asList ( "GetUser" ), md .template ().queries ().get ("Action" ));
134+ assertEquals (Arrays . asList ( "2010-05-08" ), md .template ().queries ().get ("Version" ));
135+ assertEquals ("GET /?Action=GetUser&Version=2010-05-08 HTTP/1.1\n " , md . template (). toString () );
133136 }
134137 {
135138 MethodMetadata md = contract .parseAndValidatateMetadata (WithQueryParamsInPath .class .getDeclaredMethod ("three" ));
136- assertEquals (md .template ().url (), "/" );
137- assertEquals (md .template ().queries ().get ("Action" ), ImmutableSet . of ( "GetUser " ));
138- assertEquals (md .template ().queries ().get ("Version" ), ImmutableSet . of ( "2010-05-08 " ));
139- assertEquals (md .template ().queries ().get ("limit" ), ImmutableSet . of ( "1 " ));
140- assertEquals (md . template (). toString (), "GET /?Action=GetUser&Version=2010-05-08&limit=1 HTTP/1.1\n " );
139+ assertEquals ("/" , md .template ().url ());
140+ assertEquals (Arrays . asList ( "GetUser" ), md .template ().queries ().get ("Action" ));
141+ assertEquals (Arrays . asList ( "2010-05-08" ), md .template ().queries ().get ("Version" ));
142+ assertEquals (Arrays . asList ( "1" ), md .template ().queries ().get ("limit" ));
143+ assertEquals ("GET /?Action=GetUser&Version=2010-05-08&limit=1 HTTP/1.1\n " , md . template (). toString () );
141144 }
142145 {
143146 MethodMetadata md = contract .parseAndValidatateMetadata (WithQueryParamsInPath .class .getDeclaredMethod ("empty" ));
144- assertEquals (md .template ().url (), "/" );
147+ assertEquals ("/" , md .template ().url ());
145148 assertTrue (md .template ().queries ().containsKey ("flag" ));
146- assertEquals (md .template ().queries ().get ("Action" ), ImmutableSet . of ( "GetUser " ));
147- assertEquals (md .template ().queries ().get ("Version" ), ImmutableSet . of ( "2010-05-08 " ));
148- assertEquals (md . template (). toString (), "GET /?flag&Action=GetUser&Version=2010-05-08 HTTP/1.1\n " );
149+ assertEquals (Arrays . asList ( "GetUser" ), md .template ().queries ().get ("Action" ));
150+ assertEquals (Arrays . asList ( "2010-05-08" ), md .template ().queries ().get ("Version" ));
151+ assertEquals ("GET /?flag&Action=GetUser&Version=2010-05-08 HTTP/1.1\n " , md . template (). toString () );
149152 }
150153 }
151154
@@ -156,17 +159,16 @@ interface BodyWithoutParameters {
156159 }
157160
158161 @ Test public void bodyWithoutParameters () throws Exception {
159- String expectedBody = "<v01:getAccountsListOfUser/>" ;
160162 MethodMetadata md = contract .parseAndValidatateMetadata (BodyWithoutParameters .class .getDeclaredMethod ("post" ));
161- assertEquals (md .template ().body (), expectedBody . getBytes ( UTF_8 ));
163+ assertEquals ("<v01:getAccountsListOfUser/>" , new String ( md .template ().body (), UTF_8 ));
162164 assertFalse (md .template ().bodyTemplate () != null );
163165 assertTrue (md .formParams ().isEmpty ());
164166 assertTrue (md .indexToName ().isEmpty ());
165167 }
166168
167169 @ Test public void producesAddsContentTypeHeader () throws Exception {
168170 MethodMetadata md = contract .parseAndValidatateMetadata (BodyWithoutParameters .class .getDeclaredMethod ("post" ));
169- assertEquals (md .template ().headers ().get ("Content-Type" ), ImmutableSet . of ( "application/xml " ));
171+ assertEquals (Arrays . asList ( "application/xml" ), md .template ().headers ().get ("Content-Type" ));
170172 }
171173
172174 interface WithURIParam {
@@ -176,15 +178,15 @@ interface WithURIParam {
176178 @ Test public void methodCanHaveUriParam () throws Exception {
177179 MethodMetadata md = contract .parseAndValidatateMetadata (WithURIParam .class .getDeclaredMethod ("uriParam" , String .class ,
178180 URI .class , String .class ));
179- assertEquals (md . urlIndex ( ), Integer . valueOf ( 1 ));
181+ assertEquals (Integer . valueOf ( 1 ), md . urlIndex ( ));
180182 }
181183
182184 @ Test public void pathParamsParseIntoIndexToName () throws Exception {
183185 MethodMetadata md = contract .parseAndValidatateMetadata (WithURIParam .class .getDeclaredMethod ("uriParam" , String .class ,
184186 URI .class , String .class ));
185- assertEquals (md . template (). url (), "/{1}/{2}" );
186- assertEquals (md .indexToName ().get (0 ), ImmutableSet . of ( "1" ));
187- assertEquals (md .indexToName ().get (2 ), ImmutableSet . of ( "2" ));
187+ assertEquals ("/{1}/{2}" , md . template (). url () );
188+ assertEquals (Arrays . asList ( "1" ), md .indexToName ().get (0 ));
189+ assertEquals (Arrays . asList ( "2" ), md .indexToName ().get (2 ));
188190 }
189191
190192 interface WithPathAndQueryParams {
@@ -199,13 +201,13 @@ Response recordsByNameAndType(@Named("domainId") int id, @Named("name") String n
199201 assertNull (md .template ().body ());
200202 assertNull (md .template ().bodyTemplate ());
201203 assertTrue (md .template ().headers ().isEmpty ());
202- assertEquals (md . template (). url (), "/domains/{domainId}/records" );
203- assertEquals (md .template ().queries ().get ("name" ), ImmutableSet . of ( "{name} " ));
204- assertEquals (md .template ().queries ().get ("type" ), ImmutableSet . of ( "{type} " ));
205- assertEquals (md .indexToName ().get (0 ), ImmutableSet . of ( "domainId" ));
206- assertEquals (md .indexToName ().get (1 ), ImmutableSet . of ( "name" ));
207- assertEquals (md .indexToName ().get (2 ), ImmutableSet . of ( "type" ));
208- assertEquals (md . template (). toString (), "GET /domains/{domainId}/records?name={name}&type={type} HTTP/1.1\n " );
204+ assertEquals ("/domains/{domainId}/records" , md . template (). url () );
205+ assertEquals (Arrays . asList ( "{name}" ), md .template ().queries ().get ("name" ));
206+ assertEquals (Arrays . asList ( "{type}" ), md .template ().queries ().get ("type" ));
207+ assertEquals (Arrays . asList ( "domainId" ), md .indexToName ().get (0 ));
208+ assertEquals (Arrays . asList ( "name" ), md .indexToName ().get (1 ));
209+ assertEquals (Arrays . asList ( "type" ), md .indexToName ().get (2 ));
210+ assertEquals ("GET /domains/{domainId}/records?name={name}&type={type} HTTP/1.1\n " , md . template (). toString () );
209211 }
210212
211213 interface FormParams {
@@ -221,12 +223,13 @@ void login(
221223 String .class , String .class ));
222224
223225 assertFalse (md .template ().body () != null );
224- assertEquals (md .template ().bodyTemplate (),
225- "%7B\" customer_name\" : \" {customer_name}\" , \" user_name\" : \" {user_name}\" , \" password\" : \" {password}\" %7D" );
226- assertEquals (md .formParams (), ImmutableList .of ("customer_name" , "user_name" , "password" ));
227- assertEquals (md .indexToName ().get (0 ), ImmutableSet .of ("customer_name" ));
228- assertEquals (md .indexToName ().get (1 ), ImmutableSet .of ("user_name" ));
229- assertEquals (md .indexToName ().get (2 ), ImmutableSet .of ("password" ));
226+ assertEquals (
227+ "%7B\" customer_name\" : \" {customer_name}\" , \" user_name\" : \" {user_name}\" , \" password\" : \" {password}\" %7D" ,
228+ md .template ().bodyTemplate ());
229+ assertEquals (ImmutableList .of ("customer_name" , "user_name" , "password" ), md .formParams ());
230+ assertEquals (Arrays .asList ("customer_name" ), md .indexToName ().get (0 ));
231+ assertEquals (Arrays .asList ("user_name" ), md .indexToName ().get (1 ));
232+ assertEquals (Arrays .asList ("password" ), md .indexToName ().get (2 ));
230233 }
231234
232235 interface HeaderParams {
@@ -237,7 +240,7 @@ interface HeaderParams {
237240 @ Test public void headerParamsParseIntoIndexToName () throws Exception {
238241 MethodMetadata md = contract .parseAndValidatateMetadata (HeaderParams .class .getDeclaredMethod ("logout" , String .class ));
239242
240- assertEquals (md .template ().headers ().get ("Auth-Token" ), ImmutableSet . of ( "{Auth-Token} " ));
241- assertEquals (md .indexToName ().get (0 ), ImmutableSet . of ( "Auth-Token" ));
243+ assertEquals (Arrays . asList ( "{Auth-Token}" ), md .template ().headers ().get ("Auth-Token" ));
244+ assertEquals (Arrays . asList ( "Auth-Token" ), md .indexToName ().get (0 ));
242245 }
243246}
0 commit comments