/ELWebServiceTests/ParameterEncodingTests.swift

https://github.com/TheHolyGrail/Swallow · Swift · 107 lines · 71 code · 26 blank · 10 comment · 3 complexity · 15135de9046a19c4f00a8a16ce6d97cb MD5 · raw file

  1. //
  2. // ParameterEncodingTests.swift
  3. // ELWebService
  4. //
  5. // Created by Angelo Di Paolo on 3/3/16.
  6. // Copyright © 2016 WalmartLabs. All rights reserved.
  7. //
  8. import XCTest
  9. @testable import ELWebService
  10. class ParameterEncodingTests: XCTestCase {
  11. // MARK: encodeURL
  12. func test_encodeURL_percentEncodesWithSpacesInStrings() {
  13. let url = URL(string: "http://httpbin.org/get")!
  14. let parameters = ["percentEncoded" : "this needs percent encoded"]
  15. let encoding = Request.ParameterEncoding.percent
  16. let encodedURL = encoding.encodeURL(url, parameters: parameters)
  17. XCTAssertNotNil(encodedURL, "Encoded URL should be not be nil")
  18. XCTAssertNotNil(encodedURL?.query, "Encoded URL query should be not be nil")
  19. let stringValue = encodedURL!.query!
  20. let components = stringValue.components(separatedBy: "=")
  21. XCTAssertEqual(components[0], "percentEncoded")
  22. XCTAssertEqual(components[1], "this%20needs%20percent%20encoded")
  23. }
  24. func test_encodeURL_percentEncodesWithIntValue() {
  25. let url = URL(string: "http://httpbin.org/get")!
  26. let parameters = ["number" : 500]
  27. let encoding = Request.ParameterEncoding.percent
  28. let encodedURL = encoding.encodeURL(url, parameters: parameters)
  29. XCTAssertNotNil(encodedURL, "Encoded URL should be not be nil")
  30. XCTAssertNotNil(encodedURL?.query, "Encoded URL query should be not be nil")
  31. let stringValue = encodedURL!.query!
  32. let components = stringValue.components(separatedBy: "=")
  33. XCTAssertEqual(components[1], "500")
  34. }
  35. func test_encodeURL_percentEncodesWithBoolValue() {
  36. let url = URL(string: "http://httpbin.org/get")!
  37. let parameters = ["boolValue" : true]
  38. let encoding = Request.ParameterEncoding.percent
  39. let encodedURL = encoding.encodeURL(url, parameters: parameters)
  40. XCTAssertNotNil(encodedURL, "Encoded URL should be not be nil")
  41. XCTAssertNotNil(encodedURL?.query, "Encoded URL query should be not be nil")
  42. let stringValue = encodedURL!.query!
  43. let components = stringValue.components(separatedBy: "=")
  44. XCTAssertEqual(components[1], "1")
  45. }
  46. // MARK: encodeBody
  47. func test_encodeBody_percentEncodesWithSpacesInStrings() {
  48. let parameters = ["percentEncoded" : "this needs percent encoded"]
  49. let encoding = Request.ParameterEncoding.percent
  50. let encodedData = encoding.encodeBody(parameters)
  51. XCTAssertNotNil(encodedData, "Encoded body should be non-nil")
  52. let stringValue = NSString(data: encodedData!, encoding: String.Encoding.utf8.rawValue)!
  53. let components = stringValue.components(separatedBy: "=")
  54. XCTAssertEqual(components[0], "percentEncoded")
  55. XCTAssertEqual(components[1], "this%20needs%20percent%20encoded")
  56. }
  57. func test_encodeBody_charSet() {
  58. let parameters = ["percentEncoded" : "this + needs percent / encoded"]
  59. let encoding = Request.ParameterEncoding.percent
  60. let encodedData = encoding.encodeBody(parameters, allowedCharacters: CharacterSet.alphanumerics)
  61. XCTAssertNotNil(encodedData, "Encoded body should be non-nil")
  62. let stringValue = NSString(data: encodedData!, encoding: String.Encoding.utf8.rawValue)!
  63. let components = stringValue.components(separatedBy: "=")
  64. XCTAssertEqual(components[0], "percentEncoded")
  65. XCTAssertEqual(components[1], "this%20%2B%20needs%20percent%20%2F%20encoded")
  66. }
  67. func test_encodeBody_encodesJSONParameters() {
  68. let encoding = Request.ParameterEncoding.json
  69. let parameters: [String: Any] = ["foo" : "bar", "paramName" : "paramValue", "number" : 42]
  70. let data = encoding.encodeBody(parameters)
  71. XCTAssert(data != nil, "Encoded JSON data should not be nil")
  72. let json = try? JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions())
  73. XCTAssertNotNil(json, "Serialized JSON should not be nil")
  74. // test original parameters against encoded
  75. if let json = json as? [String : Any] {
  76. ELTestAssertRequestParametersEqual(json, parameters)
  77. } else {
  78. XCTFail("Failed to cast JSON as [String : Any]")
  79. }
  80. }
  81. }