DownloadTests.swift 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. // DownloadTests.swift
  2. //
  3. // Copyright (c) 2014–2015 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 Foundation
  23. import Alamofire
  24. import XCTest
  25. class AlamofireDownloadResponseTestCase: XCTestCase {
  26. let searchPathDirectory: NSSearchPathDirectory = .DocumentDirectory
  27. let searchPathDomain: NSSearchPathDomainMask = .UserDomainMask
  28. // MARK: -
  29. func testDownloadRequest() {
  30. let numberOfLines = 100
  31. let URL = "http://httpbin.org/stream/\(numberOfLines)"
  32. let expectation = expectationWithDescription(URL)
  33. let destination = Alamofire.Request.suggestedDownloadDestination(directory: searchPathDirectory, domain: searchPathDomain)
  34. Alamofire.download(.GET, URL, destination)
  35. .response { request, response, _, error in
  36. XCTAssertNotNil(request, "request should not be nil")
  37. XCTAssertNotNil(response, "response should not be nil")
  38. XCTAssertNil(error, "error should be nil")
  39. let fileManager = NSFileManager.defaultManager()
  40. let directory = fileManager.URLsForDirectory(self.searchPathDirectory, inDomains: self.searchPathDomain)[0] as! NSURL
  41. var fileManagerError: NSError?
  42. let contents = fileManager.contentsOfDirectoryAtURL(directory, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions.SkipsHiddenFiles, error: &fileManagerError)!
  43. XCTAssertNil(fileManagerError, "fileManagerError should be nil")
  44. #if os(iOS)
  45. let suggestedFilename = "\(numberOfLines)"
  46. #elseif os(OSX)
  47. let suggestedFilename = "\(numberOfLines).json"
  48. #endif
  49. let predicate = NSPredicate(format: "lastPathComponent = '\(suggestedFilename)'")
  50. let filteredContents = (contents as NSArray).filteredArrayUsingPredicate(predicate)
  51. XCTAssertEqual(filteredContents.count, 1, "should have one file in Documents")
  52. let file = filteredContents.first as! NSURL
  53. XCTAssertEqual(file.lastPathComponent!, "\(suggestedFilename)", "filename should be \(suggestedFilename)")
  54. if let data = NSData(contentsOfURL: file) {
  55. XCTAssertGreaterThan(data.length, 0, "data length should be non-zero")
  56. } else {
  57. XCTFail("data should exist for contents of URL")
  58. }
  59. fileManager.removeItemAtURL(file, error: nil)
  60. expectation.fulfill()
  61. }
  62. waitForExpectationsWithTimeout(10) { error in
  63. XCTAssertNil(error, "\(error)")
  64. }
  65. }
  66. func testDownloadRequestWithProgress() {
  67. let numberOfLines = 100
  68. let URL = "http://httpbin.org/stream/\(numberOfLines)"
  69. let expectation = expectationWithDescription(URL)
  70. let destination = Alamofire.Request.suggestedDownloadDestination(directory: searchPathDirectory, domain: searchPathDomain)
  71. let download = Alamofire.download(.GET, URL, destination)
  72. download.progress { bytesRead, totalBytesRead, totalBytesExpectedToRead in
  73. XCTAssert(bytesRead > 0, "bytesRead should be > 0")
  74. XCTAssert(totalBytesRead > 0, "totalBytesRead should be > 0")
  75. XCTAssert(totalBytesExpectedToRead == -1, "totalBytesExpectedToRead should be -1")
  76. download.cancel()
  77. expectation.fulfill()
  78. }
  79. waitForExpectationsWithTimeout(10) { error in
  80. XCTAssertNil(error, "\(error)")
  81. }
  82. }
  83. }