@@ -13,6 +13,8 @@ import Turf
1313
1414let BogusToken = " pk.feedCafeDadeDeadBeef-BadeBede.FadeCafeDadeDeed-BadeBede "
1515let BogusCredentials = Credentials ( accessToken: BogusToken)
16+ private let accessTokenKey = " access_token "
17+ private let skuKey = " sku "
1618let BadResponse = """
1719<!DOCTYPE HTML PUBLIC " -//W3C//DTD HTML 4.01 Transitional//EN " " http://www.w3.org/TR/html4/loose.dtd " >
1820<HTML><HEAD><META HTTP-EQUIV= " Content-Type " CONTENT= " text/html; charset=iso-8859-1 " >
@@ -142,7 +144,6 @@ class DirectionsTests: XCTestCase {
142144 let directions = Directions ( credentials: BogusCredentials)
143145 let opts = RouteOptions ( locations: [ one, two] )
144146 directions. calculate ( opts, completionHandler: { result in
145-
146147 guard case . failure( let error) = result else {
147148 XCTFail ( " Expecting error, none returned. " )
148149 return
@@ -264,5 +265,78 @@ class DirectionsTests: XCTestCase {
264265 XCTAssertTrue ( queryItems. contains ( where: { $0. name == " sku " && $0. value == skuToken } ) )
265266 XCTAssertTrue ( queryItems. contains ( where: { $0. name == " access_token " && $0. value == BogusToken } ) )
266267 }
268+
269+ func testUrlWithCustomParametersWithAccessToken( ) {
270+ let customParameterKey = " custom_parameter "
271+ let customParameterValue = " custom_value "
272+
273+ let queryItems = requestQueryItems ( with: [
274+ URLQueryItem ( name: accessTokenKey, value: " invalid " ) ,
275+ URLQueryItem ( name: customParameterKey, value: customParameterValue) ,
276+ ] )
277+
278+ let accessTokenItems = queryItems. filter { $0. name == accessTokenKey }
279+ XCTAssertEqual ( accessTokenItems. count, 1 )
280+ let skuItems = queryItems. filter { $0. name == skuKey }
281+ XCTAssertEqual ( skuItems. count, 1 )
282+ XCTAssertTrue ( queryItems. contains ( where: { $0. name == skuKey && $0. value == skuToken } ) )
283+ XCTAssert ( queryItems. contains ( where: { $0. name == accessTokenKey && $0. value == BogusToken } ) )
284+
285+ XCTAssert ( queryItems. contains ( where: { $0. name == customParameterKey && $0. value == customParameterValue } ) )
286+ }
287+
288+ func testUrlWithCustomParametersWithSkuToken( ) {
289+ let skuKey = " sku "
290+ let customParameterKey = " custom_parameter "
291+ let customParameterValue = " custom_value "
292+
293+ let queryItems = requestQueryItems ( with: [
294+ URLQueryItem ( name: skuKey, value: " invalid " ) ,
295+ URLQueryItem ( name: customParameterKey, value: customParameterValue) ,
296+ ] )
297+
298+ let accessTokenItems = queryItems. filter { $0. name == accessTokenKey }
299+ XCTAssertEqual ( accessTokenItems. count, 1 )
300+ let skuItems = queryItems. filter { $0. name == skuKey }
301+ XCTAssertEqual ( skuItems. count, 1 )
302+ XCTAssertTrue ( queryItems. contains ( where: { $0. name == skuKey && $0. value == skuToken } ) )
303+ XCTAssert ( queryItems. contains ( where: { $0. name == accessTokenKey && $0. value == BogusToken } ) )
304+
305+ XCTAssert ( queryItems. contains ( where: { $0. name == customParameterKey && $0. value == customParameterValue } ) )
306+ }
307+
308+ func testUrlWithCustomParametersWithSkuAndAccessToken( ) {
309+ let customParameterKey = " custom_parameter "
310+ let customParameterValue = " custom_value "
311+ let queryItems = requestQueryItems ( with: [
312+ URLQueryItem ( name: accessTokenKey, value: " invalid_token " ) ,
313+ URLQueryItem ( name: skuKey, value: " invalid_sku " ) ,
314+ URLQueryItem ( name: customParameterKey, value: customParameterValue) ,
315+ ] )
316+ let accessTokenItems = queryItems. filter { $0. name == accessTokenKey }
317+ XCTAssertEqual ( accessTokenItems. count, 1 )
318+ let skuItems = queryItems. filter { $0. name == skuKey }
319+ XCTAssertEqual ( skuItems. count, 1 )
320+ XCTAssertTrue ( queryItems. contains ( where: { $0. name == skuKey && $0. value == skuToken } ) )
321+ XCTAssert ( queryItems. contains ( where: { $0. name == accessTokenKey && $0. value == BogusToken } ) )
322+
323+ XCTAssert ( queryItems. contains ( where: { $0. name == customParameterKey && $0. value == customParameterValue } ) )
324+ }
325+
326+ private func requestQueryItems( with customParameters: [ URLQueryItem ] ) -> [ URLQueryItem ] {
327+ let coordinate = LocationCoordinate2D ( latitude: 0 , longitude: 0 )
328+ let options = CustomRouteOptions ( waypoints: [
329+ Waypoint ( coordinate: coordinate) ,
330+ Waypoint ( coordinate: coordinate) ,
331+ ] , customParameters: customParameters)
332+
333+ let directions = Directions ( credentials: BogusCredentials)
334+ let url = directions. url ( forCalculating: options, httpMethod: " GET " )
335+ guard let queryItems = URLComponents ( url: url, resolvingAgainstBaseURL: false ) ? . queryItems else {
336+ XCTFail ( " Unexpected nil queryItems " )
337+ return [ ]
338+ }
339+ return queryItems
340+ }
267341}
268342#endif
0 commit comments