1818import lombok .Builder ;
1919import lombok .RequiredArgsConstructor ;
2020import lombok .Setter ;
21+ import lombok .ToString ;
2122import lombok .experimental .Accessors ;
2223import org .apache .http .HttpResponse ;
2324import org .apache .http .HttpVersion ;
@@ -51,6 +52,7 @@ class ODataNextLinkTest
5152 @ AllArgsConstructor
5253 @ Accessors ( fluent = true )
5354 @ Setter
55+ @ ToString ( includeFieldNames = false , exclude = { "with" , "expects" } )
5456 static class QueryParameterCase
5557 {
5658 final String label ;
@@ -75,26 +77,68 @@ static class Expectation
7577 }
7678 }
7779
78- static QueryParameterCase [] QUERY_PARAMETERS_CASES =
79- {
80- // case 1: query-parameters from destination uri, destination properties, next-link and odata-request are distinct
81- QueryParameterCase
82- .named ("DISTINCT" )
83- .with (
84- QueryParameterCase .Setup
85- .builder ()
86- .destinationQuery ("dest1=one&dest2=two" )
87- .propertiesQuery ("prop1=one&prop2=two" )
88- .initialQuery ("odata1=one&odata2=two" )
89- .nextLinkQuery ("next1=one&next2=two" )
90- .build ())
91- .expects (
92- QueryParameterCase .Expectation
93- .builder ()
94- .initialQuerySent ("dest1=one&dest2=two&odata1=one&odata2=two&prop1=one&prop2=two" )
95- .nextLinkQueryParsed ("$skiptoken=42&next1=one&next2=two" )
96- .nextLinkQuerySent ("dest1=one&dest2=two&$skiptoken=42&next1=one&next2=two&prop1=one&prop2=two" )
97- .build ()) };
80+ private static QueryParameterCase [] QUERY_PARAMETERS_CASES =
81+ {
82+ // case 1: query-parameters from destination uri, destination properties, next-link and odata-request are distinct
83+ QueryParameterCase
84+ .named ("DISTINCT" )
85+ .with (
86+ QueryParameterCase .Setup
87+ .builder ()
88+ .destinationQuery ("dest1=one&dest2=two" )
89+ .propertiesQuery ("prop1=one&prop2=two" )
90+ .initialQuery ("odata1=one&odata2=two" )
91+ .nextLinkQuery ("next1=one&next2=two" )
92+ .build ())
93+ .expects (
94+ QueryParameterCase .Expectation
95+ .builder ()
96+ .initialQuerySent ("dest1=one&dest2=two&odata1=one&odata2=two&prop1=one&prop2=two" )
97+ .nextLinkQueryParsed ("$skiptoken=42&next1=one&next2=two" )
98+ .nextLinkQuerySent ("dest1=one&dest2=two&$skiptoken=42&next1=one&next2=two&prop1=one&prop2=two" )
99+ .build ()),
100+ // case 2: query-parameters from destination uri, destination properties, next-link and odata-request with equal values
101+ QueryParameterCase
102+ .named ("EQUAL" )
103+ .with (
104+ QueryParameterCase .Setup
105+ .builder ()
106+ .destinationQuery ("dest1=one&dest2=two" )
107+ .propertiesQuery ("prop1=one&prop2=two" )
108+ .initialQuery ("odata1=one&odata2=two" )
109+ .nextLinkQuery ("next1=one&dest1=one&prop1=one&odata1=one" )
110+ .build ())
111+ .expects (
112+ QueryParameterCase .Expectation
113+ .builder ()
114+ .initialQuerySent ("dest1=one&dest2=two&odata1=one&odata2=two&prop1=one&prop2=two" )
115+ .nextLinkQueryParsed ("$skiptoken=42&next1=one&odata1=one" )
116+ .nextLinkQuerySent ("dest1=one&dest2=two&$skiptoken=42&next1=one&odata1=one&prop1=one&prop2=two" )
117+ .build ()),
118+ // case 3: query-parameters from next link may be in conflict with destination uri or destination properties
119+ QueryParameterCase
120+ .named ("CONFLICT" )
121+ .with (
122+ QueryParameterCase .Setup
123+ .builder ()
124+ .destinationQuery ("dest1=one&dest2=two" )
125+ .propertiesQuery ("prop1=one&prop2=two" )
126+ .initialQuery ("odata1=one&odata2=two" )
127+ .nextLinkQuery ("next1=eins&dest1=eins&prop1=eins&odata1=eins" )
128+ .build ())
129+ .expects (
130+ QueryParameterCase .Expectation
131+ .builder ()
132+ .initialQuerySent ("dest1=one&dest2=two&odata1=one&odata2=two&prop1=one&prop2=two" )
133+ .nextLinkQueryParsed ("$skiptoken=42&next1=eins&dest1=eins&prop1=eins&odata1=eins" )
134+ .nextLinkQuerySent (
135+ "dest1=one&dest2=two" // destination parameters
136+ + "&$skiptoken=42&next1=eins&dest1=eins&prop1=eins&odata1=eins" // next-link parameters
137+ + "&prop1=one&prop2=two" // properties parameters
138+ )
139+ .build ()),
140+
141+ };
98142
99143 @ ParameterizedTest
100144 @ FieldSource ( "QUERY_PARAMETERS_CASES" )
@@ -119,7 +163,7 @@ void testRemoveDuplicateQueryArguments1( @Nonnull final QueryParameterCase testC
119163 // TEST SETUP: construct destination and HttpClient
120164 final String destinationUrl = wiremock .baseUrl () + "/?" + testCase .with .destinationQuery ;
121165 final DefaultHttpDestination .Builder destinationBuilder = DefaultHttpDestination .builder (destinationUrl );
122- for ( final String queryArg : testCase .with .propertiesQuery .split ("&" )) {
166+ for ( final String queryArg : testCase .with .propertiesQuery .split ("&" ) ) {
123167 final String [] queryArgParts = queryArg .split ("=" , 2 );
124168 destinationBuilder .property ("URL.queries." + queryArgParts [0 ], queryArgParts [1 ]);
125169 }
@@ -147,7 +191,7 @@ void testRemoveDuplicateQueryArguments1( @Nonnull final QueryParameterCase testC
147191 void testRemoveDuplicateQueryArguments ()
148192 {
149193 final ODataRequestGeneric request =
150- new ODataRequestRead ("/v1/foo/bar /" , "endpoint" , "blub=42" , ODataProtocol .V2 );
194+ new ODataRequestRead ("/v1/path/to /" , "endpoint" , "blub=42" , ODataProtocol .V2 );
151195
152196 final HttpResponse httpResponse = new BasicHttpResponse (HttpVersion .HTTP_1_1 , 200 , "Ok" );
153197 httpResponse .setEntity (new StringEntity (PAYLOAD_NEXT_LINK , ContentType .APPLICATION_JSON ));
@@ -158,13 +202,13 @@ void testRemoveDuplicateQueryArguments()
158202 final Destination dest1 = DefaultHttpDestination .builder (baseUrl ).property ("URL.queries.foo" , "bar" ).build ();
159203 final HttpClient client1 = HttpClientAccessor .getHttpClient (dest1 );
160204 final ODataRequestResultGeneric result1 = new ODataRequestResultGeneric (request , httpResponse , client1 );
161- assertThat (result1 .getNextLink ()).contains ("/v1/foo/bar /endpoint?$skiptoken=s3cReT-t0k3n" );
205+ assertThat (result1 .getNextLink ()).contains ("/v1/path/to /endpoint?$skiptoken=s3cReT-t0k3n" );
162206
163207 // case 2: query parameters are NOT EQUAL in destination and in nextLink -> retain query parameter
164208 final Destination dest2 = DefaultHttpDestination .builder (baseUrl ).property ("URL.queries.foo" , "baz" ).build ();
165209 final HttpClient client2 = HttpClientAccessor .getHttpClient (dest2 );
166210 final ODataRequestResultGeneric result2 = new ODataRequestResultGeneric (request , httpResponse , client2 );
167- assertThat (result2 .getNextLink ()).contains ("/v1/foo/bar /endpoint?$skiptoken=s3cReT-t0k3n&foo=bar" );
211+ assertThat (result2 .getNextLink ()).contains ("/v1/path/to /endpoint?$skiptoken=s3cReT-t0k3n&foo=bar" );
168212 }
169213
170214 @ Test
0 commit comments