Skip to content
Snippets Groups Projects
Select Git revision
  • baf974c1446fd4a61d529c37c99e007ce1bbb9cf
  • main default protected
  • development
  • integration
  • v1.1.5
  • v1.1.4
  • v1.1.3
  • v1.1.2
  • v1.1.1
  • v1.1.0
  • v1.0.0
11 results

run-tests.sh

Blame
  • MessengerSendFileTests.swift 6.23 KiB
    import CustomDump
    import XCTest
    import XXClient
    @testable import XXMessengerClient
    
    final class MessengerSendFileTests: XCTestCase {
      func testSendFile() throws {
        let newTransferId = "transferId".data(using: .utf8)!
    
        var didSendFile: [FileTransferSend.Params] = []
        var didCloseSend: [Data] = []
        var didReceiveCallback: [MessengerSendFile.CallbackInfo] = []
        var fileTransferProgressCallback: FileTransferProgressCallback!
    
        var env: MessengerEnvironment = .unimplemented
        env.fileTransfer.get = {
          var fileTransfer: FileTransfer = .unimplemented
          fileTransfer.send.run = { params, callback in
            didSendFile.append(params)
            fileTransferProgressCallback = callback
            return newTransferId
          }
          fileTransfer.closeSend.run = { id in
            didCloseSend.append(id)
          }
          return fileTransfer
        }
    
        let sendFile: MessengerSendFile = .live(env)
        let params = MessengerSendFile.Params.stub
    
        let transferId = try sendFile(params) { info in
          didReceiveCallback.append(info)
        }
    
        XCTAssertNoDifference(transferId, newTransferId)
        XCTAssertNoDifference(didSendFile, [
          .init(
            payload: params.file,
            recipientId: params.recipientId,
            retry: Float(params.retry),
            period: params.callbackIntervalMS
          )
        ])
    
        fileTransferProgressCallback.handle(.success(.init(
          progress: Progress(
            completed: false,
            transmitted: 1,
            total: 10,
            error: nil
          ),
          partTracker: .unimplemented
        )))
        fileTransferProgressCallback.handle(.success(.init(
          progress: Progress(
            completed: false,
            transmitted: 6,
            total: 10,
            error: nil
          ),
          partTracker: .unimplemented
        )))
        fileTransferProgressCallback.handle(.success(.init(
          progress: Progress(
            completed: true,
            transmitted: 10,
            total: 10,
            error: nil
          ),
          partTracker: .unimplemented
        )))
    
        XCTAssertNoDifference(didReceiveCallback, [
          .progress(id: transferId, transmitted: 1, total: 10),
          .progress(id: transferId, transmitted: 6, total: 10),
          .finished(id: transferId),
        ])
        XCTAssertNoDifference(didCloseSend, [transferId])
      }
    
      func testSendFileWhenNotStarted() {
        var env: MessengerEnvironment = .unimplemented
        env.fileTransfer.get = { nil }
        let sendFile: MessengerSendFile = .live(env)
    
        XCTAssertThrowsError(try sendFile(.stub) { _ in }) { error in
          XCTAssertNoDifference(
            error as? MessengerSendFile.Error,
            MessengerSendFile.Error.fileTransferNotStarted
          )
        }
      }
    
      func testSendFileCallbackFailure() throws {
        var didCloseSend: [Data] = []
        var didReceiveCallback: [MessengerSendFile.CallbackInfo] = []
        var fileTransferProgressCallback: FileTransferProgressCallback!
    
        var env: MessengerEnvironment = .unimplemented
        env.fileTransfer.get = {
          var fileTransfer: FileTransfer = .unimplemented
          fileTransfer.send.run = { _, callback in
            fileTransferProgressCallback = callback
            return "transferId".data(using: .utf8)!
          }
          fileTransfer.closeSend.run = { id in
            didCloseSend.append(id)
          }
          return fileTransfer
        }
        let sendFile: MessengerSendFile = .live(env)
    
        let transferId = try sendFile(.stub) { info in
          didReceiveCallback.append(info)
        }
    
        let error = NSError(domain: "test", code: 1234)
        fileTransferProgressCallback.handle(.failure(error))
    
        XCTAssertNoDifference(didReceiveCallback, [
          .failed(id: transferId, .error(error)),
        ])
        XCTAssertNoDifference(didCloseSend, [transferId])
      }
    
      func testSendFileProgressError() throws {
        var didCloseSend: [Data] = []
        var didReceiveCallback: [MessengerSendFile.CallbackInfo] = []
        var fileTransferProgressCallback: FileTransferProgressCallback!
    
        var env: MessengerEnvironment = .unimplemented
        env.fileTransfer.get = {
          var fileTransfer: FileTransfer = .unimplemented
          fileTransfer.send.run = { _, callback in
            fileTransferProgressCallback = callback
            return "transferId".data(using: .utf8)!
          }
          fileTransfer.closeSend.run = { id in
            didCloseSend.append(id)
          }
          return fileTransfer
        }
        let sendFile: MessengerSendFile = .live(env)
    
        let transferId = try sendFile(.stub) { info in
          didReceiveCallback.append(info)
        }
    
        let error = "something went wrong"
        fileTransferProgressCallback.handle(.success(.init(
          progress: .init(
            completed: false,
            transmitted: 0,
            total: 0,
            error: error
          ),
          partTracker: .unimplemented
        )))
    
        XCTAssertNoDifference(didReceiveCallback, [
          .failed(id: transferId, .progressError(error)),
        ])
        XCTAssertNoDifference(didCloseSend, [transferId])
      }
    
      func testSendFileCloseError() throws {
        let closeError = NSError(domain: "test", code: 1234)
    
        var didReceiveCallback: [MessengerSendFile.CallbackInfo] = []
        var fileTransferProgressCallback: FileTransferProgressCallback!
    
        var env: MessengerEnvironment = .unimplemented
        env.fileTransfer.get = {
          var fileTransfer: FileTransfer = .unimplemented
          fileTransfer.send.run = { _, callback in
            fileTransferProgressCallback = callback
            return "transferId".data(using: .utf8)!
          }
          fileTransfer.closeSend.run = { id in
            throw closeError
          }
          return fileTransfer
        }
        let sendFile: MessengerSendFile = .live(env)
    
        let transferId = try sendFile(.stub) { info in
          didReceiveCallback.append(info)
        }
    
        fileTransferProgressCallback.handle(.success(.init(
          progress: .init(
            completed: true,
            transmitted: 1,
            total: 1,
            error: nil
          ),
          partTracker: .unimplemented
        )))
    
        XCTAssertNoDifference(didReceiveCallback, [
          .finished(id: transferId),
          .failed(id: transferId, .close(closeError)),
        ])
      }
    }
    
    private extension MessengerSendFile.Params {
      static let stub = MessengerSendFile.Params(
        file: FileSend(
          name: "file-name",
          type: "file-type",
          preview: "file-preview".data(using: .utf8)!,
          contents: "file-contents".data(using: .utf8)!
        ),
        recipientId: "recipient-id".data(using: .utf8)!,
        retry: 123,
        callbackIntervalMS: 321
      )
    }