ResponseSerializationTests.swift 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591
  1. // ResponseSerializationTests.swift
  2. //
  3. // Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)
  4. //
  5. // Permission is hereby granted, free of charge, to any person obtaining a copy
  6. // of this software and associated documentation files (the "Software"), to deal
  7. // in the Software without restriction, including without limitation the rights
  8. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  9. // copies of the Software, and to permit persons to whom the Software is
  10. // furnished to do so, subject to the following conditions:
  11. //
  12. // The above copyright notice and this permission notice shall be included in
  13. // all copies or substantial portions of the Software.
  14. //
  15. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  18. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  20. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  21. // THE SOFTWARE.
  22. import Alamofire
  23. import Foundation
  24. import XCTest
  25. class ResponseSerializationTestCase: BaseTestCase {
  26. let error = NSError(domain: Error.Domain, code: -10000, userInfo: nil)
  27. // MARK: - Data Response Serializer Tests
  28. func testThatDataResponseSerializerSucceedsWhenDataIsNotNil() {
  29. // Given
  30. let serializer = Request.dataResponseSerializer()
  31. let data = "data".dataUsingEncoding(NSUTF8StringEncoding)!
  32. // When
  33. let result = serializer.serializeResponse(nil, nil, data, nil)
  34. // Then
  35. XCTAssertTrue(result.isSuccess, "result is success should be true")
  36. XCTAssertNotNil(result.value, "result value should not be nil")
  37. XCTAssertNil(result.error, "result error should be nil")
  38. }
  39. func testThatDataResponseSerializerFailsWhenDataIsNil() {
  40. // Given
  41. let serializer = Request.dataResponseSerializer()
  42. // When
  43. let result = serializer.serializeResponse(nil, nil, nil, nil)
  44. // Then
  45. XCTAssertTrue(result.isFailure, "result is failure should be true")
  46. XCTAssertNil(result.value, "result value should be nil")
  47. XCTAssertNotNil(result.error, "result error should not be nil")
  48. if let error = result.error {
  49. XCTAssertEqual(error.domain, Error.Domain, "error domain should match expected value")
  50. XCTAssertEqual(error.code, Error.Code.DataSerializationFailed.rawValue, "error code should match expected value")
  51. } else {
  52. XCTFail("error should not be nil")
  53. }
  54. }
  55. func testThatDataResponseSerializerFailsWhenErrorIsNotNil() {
  56. // Given
  57. let serializer = Request.dataResponseSerializer()
  58. // When
  59. let result = serializer.serializeResponse(nil, nil, nil, error)
  60. // Then
  61. XCTAssertTrue(result.isFailure, "result is failure should be true")
  62. XCTAssertNil(result.value, "result value should be nil")
  63. XCTAssertNotNil(result.error, "result error should not be nil")
  64. if let error = result.error {
  65. XCTAssertEqual(error.domain, Error.Domain, "error domain should match expected value")
  66. XCTAssertEqual(error.code, self.error.code, "error code should match expected value")
  67. } else {
  68. XCTFail("error should not be nil")
  69. }
  70. }
  71. func testThatDataResponseSerializerFailsWhenDataIsNilWithNon204ResponseStatusCode() {
  72. // Given
  73. let serializer = Request.dataResponseSerializer()
  74. let URL = NSURL(string: "https://httpbin.org/get")!
  75. let response = NSHTTPURLResponse(URL: URL, statusCode: 200, HTTPVersion: "HTTP/1.1", headerFields: nil)
  76. // When
  77. let result = serializer.serializeResponse(nil, response, nil, nil)
  78. // Then
  79. XCTAssertTrue(result.isFailure, "result is failure should be true")
  80. XCTAssertNil(result.value, "result value should be nil")
  81. XCTAssertNotNil(result.error, "result error should not be nil")
  82. if let error = result.error {
  83. XCTAssertEqual(error.domain, Error.Domain, "error domain should match expected value")
  84. XCTAssertEqual(error.code, Error.Code.DataSerializationFailed.rawValue, "error code should match expected value")
  85. } else {
  86. XCTFail("error should not be nil")
  87. }
  88. }
  89. func testThatDataResponseSerializerSucceedsWhenDataIsNilWith204ResponseStatusCode() {
  90. // Given
  91. let serializer = Request.dataResponseSerializer()
  92. let URL = NSURL(string: "https://httpbin.org/get")!
  93. let response = NSHTTPURLResponse(URL: URL, statusCode: 204, HTTPVersion: "HTTP/1.1", headerFields: nil)
  94. // When
  95. let result = serializer.serializeResponse(nil, response, nil, nil)
  96. // Then
  97. XCTAssertTrue(result.isSuccess, "result is success should be true")
  98. XCTAssertNotNil(result.value, "result value should not be nil")
  99. XCTAssertNil(result.error, "result error should be nil")
  100. if let data = result.value {
  101. XCTAssertEqual(data.length, 0, "data length should be zero")
  102. }
  103. }
  104. // MARK: - String Response Serializer Tests
  105. func testThatStringResponseSerializerFailsWhenDataIsNil() {
  106. // Given
  107. let serializer = Request.stringResponseSerializer()
  108. // When
  109. let result = serializer.serializeResponse(nil, nil, nil, nil)
  110. // Then
  111. XCTAssertTrue(result.isFailure, "result is failure should be true")
  112. XCTAssertNil(result.value, "result value should be nil")
  113. XCTAssertNotNil(result.error, "result error should not be nil")
  114. if let error = result.error {
  115. XCTAssertEqual(error.domain, Error.Domain, "error domain should match expected value")
  116. XCTAssertEqual(error.code, Error.Code.StringSerializationFailed.rawValue, "error code should match expected value")
  117. } else {
  118. XCTFail("error should not be nil")
  119. }
  120. }
  121. func testThatStringResponseSerializerSucceedsWhenDataIsEmpty() {
  122. // Given
  123. let serializer = Request.stringResponseSerializer()
  124. // When
  125. let result = serializer.serializeResponse(nil, nil, NSData(), nil)
  126. // Then
  127. XCTAssertTrue(result.isSuccess, "result is success should be true")
  128. XCTAssertNotNil(result.value, "result value should not be nil")
  129. XCTAssertNil(result.error, "result error should be nil")
  130. }
  131. func testThatStringResponseSerializerSucceedsWithUTF8DataAndNoProvidedEncoding() {
  132. let serializer = Request.stringResponseSerializer()
  133. let data = "data".dataUsingEncoding(NSUTF8StringEncoding)!
  134. // When
  135. let result = serializer.serializeResponse(nil, nil, data, nil)
  136. // Then
  137. XCTAssertTrue(result.isSuccess, "result is success should be true")
  138. XCTAssertNotNil(result.value, "result value should not be nil")
  139. XCTAssertNil(result.error, "result error should be nil")
  140. }
  141. func testThatStringResponseSerializerSucceedsWithUTF8DataAndUTF8ProvidedEncoding() {
  142. let serializer = Request.stringResponseSerializer(encoding: NSUTF8StringEncoding)
  143. let data = "data".dataUsingEncoding(NSUTF8StringEncoding)!
  144. // When
  145. let result = serializer.serializeResponse(nil, nil, data, nil)
  146. // Then
  147. XCTAssertTrue(result.isSuccess, "result is success should be true")
  148. XCTAssertNotNil(result.value, "result value should not be nil")
  149. XCTAssertNil(result.error, "result error should be nil")
  150. }
  151. func testThatStringResponseSerializerSucceedsWithUTF8DataUsingResponseTextEncodingName() {
  152. let serializer = Request.stringResponseSerializer()
  153. let data = "data".dataUsingEncoding(NSUTF8StringEncoding)!
  154. let response = NSHTTPURLResponse(
  155. URL: NSURL(string: "https://httpbin.org/get")!,
  156. statusCode: 200,
  157. HTTPVersion: "HTTP/1.1",
  158. headerFields: ["Content-Type": "image/jpeg; charset=utf-8"]
  159. )
  160. // When
  161. let result = serializer.serializeResponse(nil, response, data, nil)
  162. // Then
  163. XCTAssertTrue(result.isSuccess, "result is success should be true")
  164. XCTAssertNotNil(result.value, "result value should not be nil")
  165. XCTAssertNil(result.error, "result error should be nil")
  166. }
  167. func testThatStringResponseSerializerFailsWithUTF32DataAndUTF8ProvidedEncoding() {
  168. // Given
  169. let serializer = Request.stringResponseSerializer(encoding: NSUTF8StringEncoding)
  170. let data = "random data".dataUsingEncoding(NSUTF32StringEncoding)!
  171. // When
  172. let result = serializer.serializeResponse(nil, nil, data, nil)
  173. // Then
  174. XCTAssertTrue(result.isFailure, "result is failure should be true")
  175. XCTAssertNil(result.value, "result value should be nil")
  176. XCTAssertNotNil(result.error, "result error should not be nil")
  177. if let error = result.error {
  178. XCTAssertEqual(error.domain, Error.Domain, "error domain should match expected value")
  179. XCTAssertEqual(error.code, Error.Code.StringSerializationFailed.rawValue, "error code should match expected value")
  180. } else {
  181. XCTFail("error should not be nil")
  182. }
  183. }
  184. func testThatStringResponseSerializerFailsWithUTF32DataAndUTF8ResponseEncoding() {
  185. // Given
  186. let serializer = Request.stringResponseSerializer()
  187. let data = "random data".dataUsingEncoding(NSUTF32StringEncoding)!
  188. let response = NSHTTPURLResponse(
  189. URL: NSURL(string: "https://httpbin.org/get")!,
  190. statusCode: 200,
  191. HTTPVersion: "HTTP/1.1",
  192. headerFields: ["Content-Type": "image/jpeg; charset=utf-8"]
  193. )
  194. // When
  195. let result = serializer.serializeResponse(nil, response, data, nil)
  196. // Then
  197. XCTAssertTrue(result.isFailure, "result is failure should be true")
  198. XCTAssertNil(result.value, "result value should be nil")
  199. XCTAssertNotNil(result.error, "result error should not be nil")
  200. if let error = result.error {
  201. XCTAssertEqual(error.domain, Error.Domain, "error domain should match expected value")
  202. XCTAssertEqual(error.code, Error.Code.StringSerializationFailed.rawValue, "error code should match expected value")
  203. } else {
  204. XCTFail("error should not be nil")
  205. }
  206. }
  207. func testThatStringResponseSerializerFailsWhenErrorIsNotNil() {
  208. // Given
  209. let serializer = Request.stringResponseSerializer()
  210. // When
  211. let result = serializer.serializeResponse(nil, nil, nil, error)
  212. // Then
  213. XCTAssertTrue(result.isFailure, "result is failure should be true")
  214. XCTAssertNil(result.value, "result value should be nil")
  215. XCTAssertNotNil(result.error, "result error should not be nil")
  216. if let error = result.error {
  217. XCTAssertEqual(error.domain, Error.Domain, "error domain should match expected value")
  218. XCTAssertEqual(error.code, self.error.code, "error code should match expected value")
  219. } else {
  220. XCTFail("error should not be nil")
  221. }
  222. }
  223. func testThatStringResponseSerializerFailsWhenDataIsNilWithNon204ResponseStatusCode() {
  224. // Given
  225. let serializer = Request.stringResponseSerializer()
  226. let URL = NSURL(string: "https://httpbin.org/get")!
  227. let response = NSHTTPURLResponse(URL: URL, statusCode: 200, HTTPVersion: "HTTP/1.1", headerFields: nil)
  228. // When
  229. let result = serializer.serializeResponse(nil, response, nil, nil)
  230. // Then
  231. XCTAssertTrue(result.isFailure, "result is failure should be true")
  232. XCTAssertNil(result.value, "result value should be nil")
  233. XCTAssertNotNil(result.error, "result error should not be nil")
  234. if let error = result.error {
  235. XCTAssertEqual(error.domain, Error.Domain, "error domain should match expected value")
  236. XCTAssertEqual(error.code, Error.Code.StringSerializationFailed.rawValue, "error code should match expected value")
  237. } else {
  238. XCTFail("error should not be nil")
  239. }
  240. }
  241. func testThatStringResponseSerializerSucceedsWhenDataIsNilWith204ResponseStatusCode() {
  242. // Given
  243. let serializer = Request.stringResponseSerializer()
  244. let URL = NSURL(string: "https://httpbin.org/get")!
  245. let response = NSHTTPURLResponse(URL: URL, statusCode: 204, HTTPVersion: "HTTP/1.1", headerFields: nil)
  246. // When
  247. let result = serializer.serializeResponse(nil, response, nil, nil)
  248. // Then
  249. XCTAssertTrue(result.isSuccess, "result is success should be true")
  250. XCTAssertNotNil(result.value, "result value should not be nil")
  251. XCTAssertNil(result.error, "result error should be nil")
  252. if let string = result.value {
  253. XCTAssertEqual(string, "", "string should be equal to empty string")
  254. }
  255. }
  256. // MARK: - JSON Response Serializer Tests
  257. func testThatJSONResponseSerializerFailsWhenDataIsNil() {
  258. // Given
  259. let serializer = Request.JSONResponseSerializer()
  260. // When
  261. let result = serializer.serializeResponse(nil, nil, nil, nil)
  262. // Then
  263. XCTAssertTrue(result.isFailure, "result is failure should be true")
  264. XCTAssertNil(result.value, "result value should be nil")
  265. XCTAssertNotNil(result.error, "result error should not be nil")
  266. if let error = result.error {
  267. XCTAssertEqual(error.domain, Error.Domain, "error domain should match expected value")
  268. XCTAssertEqual(error.code, Error.Code.JSONSerializationFailed.rawValue, "error code should match expected value")
  269. } else {
  270. XCTFail("error should not be nil")
  271. }
  272. }
  273. func testThatJSONResponseSerializerFailsWhenDataIsEmpty() {
  274. // Given
  275. let serializer = Request.JSONResponseSerializer()
  276. // When
  277. let result = serializer.serializeResponse(nil, nil, NSData(), nil)
  278. // Then
  279. XCTAssertTrue(result.isFailure, "result is failure should be true")
  280. XCTAssertNil(result.value, "result value should be nil")
  281. XCTAssertNotNil(result.error, "result error should not be nil")
  282. if let error = result.error {
  283. XCTAssertEqual(error.domain, Error.Domain, "error domain should match expected value")
  284. XCTAssertEqual(error.code, Error.Code.JSONSerializationFailed.rawValue, "error code should match expected value")
  285. } else {
  286. XCTFail("error should not be nil")
  287. }
  288. }
  289. func testThatJSONResponseSerializerSucceedsWhenDataIsValidJSON() {
  290. // Given
  291. let serializer = Request.stringResponseSerializer()
  292. let data = "{\"json\": true}".dataUsingEncoding(NSUTF8StringEncoding)!
  293. // When
  294. let result = serializer.serializeResponse(nil, nil, data, nil)
  295. // Then
  296. XCTAssertTrue(result.isSuccess, "result is success should be true")
  297. XCTAssertNotNil(result.value, "result value should not be nil")
  298. XCTAssertNil(result.error, "result error should be nil")
  299. }
  300. func testThatJSONResponseSerializerFailsWhenDataIsInvalidJSON() {
  301. // Given
  302. let serializer = Request.JSONResponseSerializer()
  303. let data = "definitely not valid json".dataUsingEncoding(NSUTF8StringEncoding)!
  304. // When
  305. let result = serializer.serializeResponse(nil, nil, data, nil)
  306. // Then
  307. XCTAssertTrue(result.isFailure, "result is failure should be true")
  308. XCTAssertNil(result.value, "result value should be nil")
  309. XCTAssertNotNil(result.error, "result error should not be nil")
  310. if let error = result.error {
  311. XCTAssertEqual(error.domain, NSCocoaErrorDomain, "error domain should match expected value")
  312. XCTAssertEqual(error.code, 3840, "error code should match expected value")
  313. } else {
  314. XCTFail("error should not be nil")
  315. }
  316. }
  317. func testThatJSONResponseSerializerFailsWhenErrorIsNotNil() {
  318. // Given
  319. let serializer = Request.JSONResponseSerializer()
  320. // When
  321. let result = serializer.serializeResponse(nil, nil, nil, error)
  322. // Then
  323. XCTAssertTrue(result.isFailure, "result is failure should be true")
  324. XCTAssertNil(result.value, "result value should be nil")
  325. XCTAssertNotNil(result.error, "result error should not be nil")
  326. if let error = result.error {
  327. XCTAssertEqual(error.domain, Error.Domain, "error domain should match expected value")
  328. XCTAssertEqual(error.code, self.error.code, "error code should match expected value")
  329. } else {
  330. XCTFail("error should not be nil")
  331. }
  332. }
  333. func testThatJSONResponseSerializerFailsWhenDataIsNilWithNon204ResponseStatusCode() {
  334. // Given
  335. let serializer = Request.JSONResponseSerializer()
  336. let URL = NSURL(string: "https://httpbin.org/get")!
  337. let response = NSHTTPURLResponse(URL: URL, statusCode: 200, HTTPVersion: "HTTP/1.1", headerFields: nil)
  338. // When
  339. let result = serializer.serializeResponse(nil, response, nil, nil)
  340. // Then
  341. XCTAssertTrue(result.isFailure, "result is failure should be true")
  342. XCTAssertNil(result.value, "result value should be nil")
  343. XCTAssertNotNil(result.error, "result error should not be nil")
  344. if let error = result.error {
  345. XCTAssertEqual(error.domain, Error.Domain, "error domain should match expected value")
  346. XCTAssertEqual(error.code, Error.Code.JSONSerializationFailed.rawValue, "error code should match expected value")
  347. } else {
  348. XCTFail("error should not be nil")
  349. }
  350. }
  351. func testThatJSONResponseSerializerSucceedsWhenDataIsNilWith204ResponseStatusCode() {
  352. // Given
  353. let serializer = Request.JSONResponseSerializer()
  354. let URL = NSURL(string: "https://httpbin.org/get")!
  355. let response = NSHTTPURLResponse(URL: URL, statusCode: 204, HTTPVersion: "HTTP/1.1", headerFields: nil)
  356. // When
  357. let result = serializer.serializeResponse(nil, response, nil, nil)
  358. // Then
  359. XCTAssertTrue(result.isSuccess, "result is success should be true")
  360. XCTAssertNotNil(result.value, "result value should not be nil")
  361. XCTAssertNil(result.error, "result error should be nil")
  362. if let json = result.value as? NSNull {
  363. XCTAssertEqual(json, NSNull(), "json should be equal to NSNull")
  364. }
  365. }
  366. // MARK: - Property List Response Serializer Tests
  367. func testThatPropertyListResponseSerializerFailsWhenDataIsNil() {
  368. // Given
  369. let serializer = Request.propertyListResponseSerializer()
  370. // When
  371. let result = serializer.serializeResponse(nil, nil, nil, nil)
  372. // Then
  373. XCTAssertTrue(result.isFailure, "result is failure should be true")
  374. XCTAssertNil(result.value, "result value should be nil")
  375. XCTAssertNotNil(result.error, "result error should not be nil")
  376. if let error = result.error {
  377. XCTAssertEqual(error.domain, Error.Domain, "error domain should match expected value")
  378. XCTAssertEqual(error.code, Error.Code.PropertyListSerializationFailed.rawValue, "error code should match expected value")
  379. } else {
  380. XCTFail("error should not be nil")
  381. }
  382. }
  383. func testThatPropertyListResponseSerializerFailsWhenDataIsEmpty() {
  384. // Given
  385. let serializer = Request.propertyListResponseSerializer()
  386. // When
  387. let result = serializer.serializeResponse(nil, nil, NSData(), nil)
  388. // Then
  389. XCTAssertTrue(result.isFailure, "result is failure should be true")
  390. XCTAssertNil(result.value, "result value should be nil")
  391. XCTAssertNotNil(result.error, "result error should not be nil")
  392. if let error = result.error {
  393. XCTAssertEqual(error.domain, Error.Domain, "error domain should match expected value")
  394. XCTAssertEqual(error.code, Error.Code.PropertyListSerializationFailed.rawValue, "error code should match expected value")
  395. } else {
  396. XCTFail("error should not be nil")
  397. }
  398. }
  399. func testThatPropertyListResponseSerializerSucceedsWhenDataIsValidPropertyListData() {
  400. // Given
  401. let serializer = Request.propertyListResponseSerializer()
  402. let data = NSKeyedArchiver.archivedDataWithRootObject(["foo": "bar"])
  403. // When
  404. let result = serializer.serializeResponse(nil, nil, data, nil)
  405. // Then
  406. XCTAssertTrue(result.isSuccess, "result is success should be true")
  407. XCTAssertNotNil(result.value, "result value should not be nil")
  408. XCTAssertNil(result.error, "result error should be nil")
  409. }
  410. func testThatPropertyListResponseSerializerFailsWhenDataIsInvalidPropertyListData() {
  411. // Given
  412. let serializer = Request.propertyListResponseSerializer()
  413. let data = "definitely not valid plist data".dataUsingEncoding(NSUTF8StringEncoding)!
  414. // When
  415. let result = serializer.serializeResponse(nil, nil, data, nil)
  416. // Then
  417. XCTAssertTrue(result.isFailure, "result is failure should be true")
  418. XCTAssertNil(result.value, "result value should be nil")
  419. XCTAssertNotNil(result.error, "result error should not be nil")
  420. if let error = result.error {
  421. XCTAssertEqual(error.domain, NSCocoaErrorDomain, "error domain should match expected value")
  422. XCTAssertEqual(error.code, 3840, "error code should match expected value")
  423. } else {
  424. XCTFail("error should not be nil")
  425. }
  426. }
  427. func testThatPropertyListResponseSerializerFailsWhenErrorIsNotNil() {
  428. // Given
  429. let serializer = Request.propertyListResponseSerializer()
  430. // When
  431. let result = serializer.serializeResponse(nil, nil, nil, error)
  432. // Then
  433. XCTAssertTrue(result.isFailure, "result is failure should be true")
  434. XCTAssertNil(result.value, "result value should be nil")
  435. XCTAssertNotNil(result.error, "result error should not be nil")
  436. if let error = result.error {
  437. XCTAssertEqual(error.domain, Error.Domain, "error domain should match expected value")
  438. XCTAssertEqual(error.code, self.error.code, "error code should match expected value")
  439. } else {
  440. XCTFail("error should not be nil")
  441. }
  442. }
  443. func testThatPropertyListResponseSerializerFailsWhenDataIsNilWithNon204ResponseStatusCode() {
  444. // Given
  445. let serializer = Request.propertyListResponseSerializer()
  446. let URL = NSURL(string: "https://httpbin.org/get")!
  447. let response = NSHTTPURLResponse(URL: URL, statusCode: 200, HTTPVersion: "HTTP/1.1", headerFields: nil)
  448. // When
  449. let result = serializer.serializeResponse(nil, response, nil, nil)
  450. // Then
  451. XCTAssertTrue(result.isFailure, "result is failure should be true")
  452. XCTAssertNil(result.value, "result value should be nil")
  453. XCTAssertNotNil(result.error, "result error should not be nil")
  454. if let error = result.error {
  455. XCTAssertEqual(error.domain, Error.Domain, "error domain should match expected value")
  456. XCTAssertEqual(error.code, Error.Code.PropertyListSerializationFailed.rawValue, "error code should match expected value")
  457. } else {
  458. XCTFail("error should not be nil")
  459. }
  460. }
  461. func testThatPropertyListResponseSerializerSucceedsWhenDataIsNilWith204ResponseStatusCode() {
  462. // Given
  463. let serializer = Request.propertyListResponseSerializer()
  464. let URL = NSURL(string: "https://httpbin.org/get")!
  465. let response = NSHTTPURLResponse(URL: URL, statusCode: 204, HTTPVersion: "HTTP/1.1", headerFields: nil)
  466. // When
  467. let result = serializer.serializeResponse(nil, response, nil, nil)
  468. // Then
  469. XCTAssertTrue(result.isSuccess, "result is success should be true")
  470. XCTAssertNotNil(result.value, "result value should not be nil")
  471. XCTAssertNil(result.error, "result error should be nil")
  472. if let plist = result.value as? NSNull {
  473. XCTAssertEqual(plist, NSNull(), "plist should be equal to NSNull")
  474. }
  475. }
  476. }