ResponseSerializationTests.swift 24 KB

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