33import static com .github .tomakehurst .wiremock .client .WireMock .get ;
44import static com .github .tomakehurst .wiremock .client .WireMock .getRequestedFor ;
55import static com .github .tomakehurst .wiremock .client .WireMock .okJson ;
6- import static com .github .tomakehurst .wiremock .client .WireMock .post ;
76import static com .github .tomakehurst .wiremock .client .WireMock .urlEqualTo ;
87import static com .github .tomakehurst .wiremock .client .WireMock .verify ;
98import static com .github .tomakehurst .wiremock .core .WireMockConfiguration .wireMockConfig ;
109import static org .assertj .core .api .Assertions .assertThat ;
1110import static org .mockito .Mockito .mock ;
1211import static org .mockito .Mockito .when ;
1312
14- import com .github .tomakehurst .wiremock .WireMockServer ;
15- import com .github .tomakehurst .wiremock .core .WireMockConfiguration ;
16- import io .vavr .control .Try ;
17- import lombok .AllArgsConstructor ;
18- import lombok .Builder ;
19- import lombok .RequiredArgsConstructor ;
20- import lombok .Setter ;
21- import lombok .ToString ;
22- import lombok .experimental .Accessors ;
13+ import javax .annotation .Nonnull ;
14+
2315import org .apache .http .HttpResponse ;
2416import org .apache .http .HttpVersion ;
2517import org .apache .http .client .HttpClient ;
2618import org .apache .http .entity .ContentType ;
2719import org .apache .http .entity .StringEntity ;
2820import org .apache .http .message .BasicHttpResponse ;
2921import org .junit .jupiter .api .Test ;
22+ import org .junit .jupiter .params .ParameterizedTest ;
23+ import org .junit .jupiter .params .provider .FieldSource ;
3024
25+ import com .github .tomakehurst .wiremock .WireMockServer ;
26+ import com .github .tomakehurst .wiremock .core .WireMockConfiguration ;
3127import com .sap .cloud .sdk .cloudplatform .connectivity .DefaultHttpDestination ;
3228import com .sap .cloud .sdk .cloudplatform .connectivity .Destination ;
3329import com .sap .cloud .sdk .cloudplatform .connectivity .HttpClientAccessor ;
3430import com .sap .cloud .sdk .datamodel .odata .client .ODataProtocol ;
35- import org .junit .jupiter .params .ParameterizedTest ;
36- import org .junit .jupiter .params .provider .FieldSource ;
3731
38- import javax .annotation .Nonnull ;
32+ import io .vavr .control .Try ;
33+ import lombok .AllArgsConstructor ;
34+ import lombok .Builder ;
35+ import lombok .RequiredArgsConstructor ;
36+ import lombok .Setter ;
37+ import lombok .ToString ;
38+ import lombok .experimental .Accessors ;
3939
4040class ODataNextLinkTest
4141{
@@ -93,10 +93,11 @@ static class Expectation
9393 .expects (
9494 QueryParameterCase .Expectation
9595 .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" )
96+ .initialQuerySent ("dest1=one&dest2=two&odata1=one&odata2=two&prop1=one&prop2=two" ) // destination parameters + odata-request parameters + properties parameters
97+ .nextLinkQueryParsed ("$skiptoken=42&next1=one&next2=two" ) // parsed next-link with removed redundant query parameters
98+ .nextLinkQuerySent ("dest1=one&dest2=two&$skiptoken=42&next1=one&next2=two&prop1=one&prop2=two" ) // destination parameters + next-link parameters + properties parameters
9999 .build ()),
100+
100101 // case 2: query-parameters from destination uri, destination properties, next-link and odata-request with equal values
101102 QueryParameterCase
102103 .named ("EQUAL" )
@@ -111,10 +112,11 @@ static class Expectation
111112 .expects (
112113 QueryParameterCase .Expectation
113114 .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" )
115+ .initialQuerySent ("dest1=one&dest2=two&odata1=one&odata2=two&prop1=one&prop2=two" ) // destination parameters + odata-request parameters + properties parameters
116+ .nextLinkQueryParsed ("$skiptoken=42&next1=one&odata1=one" ) // parsed next-link with removed redundant query parameters
117+ .nextLinkQuerySent ("dest1=one&dest2=two&$skiptoken=42&next1=one&odata1=one&prop1=one&prop2=two" ) // destination parameters + next-link parameters + properties parameters
117118 .build ()),
119+
118120 // case 3: query-parameters from next link may be in conflict with destination uri or destination properties
119121 QueryParameterCase
120122 .named ("CONFLICT" )
@@ -129,15 +131,34 @@ static class Expectation
129131 .expects (
130132 QueryParameterCase .Expectation
131133 .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+ .initialQuerySent ("dest1=one&dest2=two&odata1=one&odata2=two&prop1=one&prop2=two" ) // destination parameters + odata-request parameters + properties parameters
135+ .nextLinkQueryParsed ("$skiptoken=42&next1=eins&dest1=eins&prop1=eins&odata1=eins" ) // parsed next-link with conflicting parameter values
134136 .nextLinkQuerySent (
135137 "dest1=one&dest2=two" // destination parameters
136138 + "&$skiptoken=42&next1=eins&dest1=eins&prop1=eins&odata1=eins" // next-link parameters
137139 + "&prop1=one&prop2=two" // properties parameters
138140 )
139141 .build ()),
140142
143+ // case 4: sanity check for same query-parameters
144+ QueryParameterCase
145+ .named ("SANITY" )
146+ .with (
147+ QueryParameterCase .Setup
148+ .builder ()
149+ .destinationQuery ("foo=bar" )
150+ .propertiesQuery ("foo=bar" )
151+ .initialQuery ("foo=bar" )
152+ .nextLinkQuery ("foo=bar" )
153+ .build ())
154+ .expects (
155+ QueryParameterCase .Expectation
156+ .builder ()
157+ .initialQuerySent ("foo=bar&foo=bar&foo=bar" ) // destination parameters + odata-request parameters + properties parameters
158+ .nextLinkQueryParsed ("$skiptoken=42" ) // parsed next-link with removed redundant query parameters
159+ .nextLinkQuerySent ("foo=bar&$skiptoken=42&foo=bar" ) // destination parameters + next-link parameters + properties parameters
160+ .build ()),
161+
141162 };
142163
143164 @ ParameterizedTest
@@ -191,7 +212,7 @@ void testRemoveDuplicateQueryArguments1( @Nonnull final QueryParameterCase testC
191212 void testRemoveDuplicateQueryArguments ()
192213 {
193214 final ODataRequestGeneric request =
194- new ODataRequestRead ("/v1/path/to /" , "endpoint" , "blub=42" , ODataProtocol .V2 );
215+ new ODataRequestRead ("/v1/foo/bar /" , "endpoint" , "blub=42" , ODataProtocol .V2 );
195216
196217 final HttpResponse httpResponse = new BasicHttpResponse (HttpVersion .HTTP_1_1 , 200 , "Ok" );
197218 httpResponse .setEntity (new StringEntity (PAYLOAD_NEXT_LINK , ContentType .APPLICATION_JSON ));
@@ -202,13 +223,13 @@ void testRemoveDuplicateQueryArguments()
202223 final Destination dest1 = DefaultHttpDestination .builder (baseUrl ).property ("URL.queries.foo" , "bar" ).build ();
203224 final HttpClient client1 = HttpClientAccessor .getHttpClient (dest1 );
204225 final ODataRequestResultGeneric result1 = new ODataRequestResultGeneric (request , httpResponse , client1 );
205- assertThat (result1 .getNextLink ()).contains ("/v1/path/to /endpoint?$skiptoken=s3cReT-t0k3n" );
226+ assertThat (result1 .getNextLink ()).contains ("/v1/foo/bar /endpoint?$skiptoken=s3cReT-t0k3n" );
206227
207228 // case 2: query parameters are NOT EQUAL in destination and in nextLink -> retain query parameter
208- final Destination dest2 = DefaultHttpDestination .builder (baseUrl ).property ("URL.queries.foo" , "baz " ).build ();
229+ final Destination dest2 = DefaultHttpDestination .builder (baseUrl ).property ("URL.queries.foo" , "SAP " ).build ();
209230 final HttpClient client2 = HttpClientAccessor .getHttpClient (dest2 );
210231 final ODataRequestResultGeneric result2 = new ODataRequestResultGeneric (request , httpResponse , client2 );
211- assertThat (result2 .getNextLink ()).contains ("/v1/path/to /endpoint?$skiptoken=s3cReT-t0k3n&foo=bar" );
232+ assertThat (result2 .getNextLink ()).contains ("/v1/foo/bar /endpoint?$skiptoken=s3cReT-t0k3n&foo=bar" );
212233 }
213234
214235 @ Test
0 commit comments