From e378d3add5eaf42c48dc7933938d0dde742c81aa Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Sun, 16 Oct 2022 23:09:28 +0200 Subject: [PATCH] Add MessengerStartFileTransfer function --- .../MessengerStartFileTransfer.swift | 41 ++++++++++++ .../Messenger/Messenger.swift | 3 + .../MessengerStartFileTransferTests.swift | 63 +++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 Sources/XXMessengerClient/Messenger/Functions/MessengerStartFileTransfer.swift create mode 100644 Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerStartFileTransfer.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerStartFileTransfer.swift new file mode 100644 index 00000000..4a8e460d --- /dev/null +++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerStartFileTransfer.swift @@ -0,0 +1,41 @@ +import XCTestDynamicOverlay +import XXClient + +public struct MessengerStartFileTransfer { + public enum Error: Swift.Error, Equatable { + case notConnected + } + + public var run: () throws -> Void + + public func callAsFunction() throws -> Void { + try run() + } +} + +extension MessengerStartFileTransfer { + public static func live(_ env: MessengerEnvironment) -> MessengerStartFileTransfer { + MessengerStartFileTransfer { + guard let e2e = env.e2e() else { + throw Error.notConnected + } + let fileTransfer = try env.initFileTransfer( + params: InitFileTransfer.Params( + e2eId: e2e.getId(), + e2eFileTransferParamsJSON: env.getE2EFileTransferParams(), + fileTransferParamsJSON: env.getFileTransferParams() + ), + callback: ReceiveFileCallback { result in + // TODO: + } + ) + env.fileTransfer.set(fileTransfer) + } + } +} + +extension MessengerStartFileTransfer { + public static let unimplemented = MessengerStartFileTransfer( + run: XCTUnimplemented("\(Self.self)") + ) +} diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift index 0dce7ff2..793daab0 100644 --- a/Sources/XXMessengerClient/Messenger/Messenger.swift +++ b/Sources/XXMessengerClient/Messenger/Messenger.swift @@ -40,6 +40,7 @@ public struct Messenger { public var stopBackup: MessengerStopBackup public var setLogLevel: MessengerSetLogLevel public var startLogging: MessengerStartLogging + public var startFileTransfer: MessengerStartFileTransfer public var sendFile: MessengerSendFile public var receiveFile: MessengerReceiveFile } @@ -86,6 +87,7 @@ extension Messenger { stopBackup: .live(env), setLogLevel: .live(env), startLogging: .live(env), + startFileTransfer: .live(env), sendFile: .live(env), receiveFile: .live(env) ) @@ -133,6 +135,7 @@ extension Messenger { stopBackup: .unimplemented, setLogLevel: .unimplemented, startLogging: .unimplemented, + startFileTransfer: .unimplemented, sendFile: .unimplemented, receiveFile: .unimplemented ) diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift new file mode 100644 index 00000000..56195f23 --- /dev/null +++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift @@ -0,0 +1,63 @@ +import CustomDump +import XCTest +import XXClient +@testable import XXMessengerClient + +final class MessengerStartFileTransferTests: XCTestCase { + func testStart() throws { + let e2eId = 123 + let e2eFileTransferParams = "e2eFileTransferParams".data(using: .utf8)! + let fileTransferParams = "fileTransferParams".data(using: .utf8)! + + var didInitFileTransfer: [InitFileTransfer.Params] = [] + var receiveFileCallback: ReceiveFileCallback? + var didSetFileTransfer: [FileTransfer?] = [] + + var env: MessengerEnvironment = .unimplemented + env.e2e.get = { + var e2e: E2E = .unimplemented + e2e.getId.run = { e2eId } + return e2e + } + env.getE2EFileTransferParams.run = { + e2eFileTransferParams + } + env.getFileTransferParams.run = { + fileTransferParams + } + env.initFileTransfer.run = { params, callback in + didInitFileTransfer.append(params) + receiveFileCallback = callback + var fileTransfer: FileTransfer = .unimplemented + return fileTransfer + } + env.fileTransfer.set = { + didSetFileTransfer.append($0) + } + + let start: MessengerStartFileTransfer = .live(env) + + try start() + + XCTAssertNoDifference(didInitFileTransfer, [.init( + e2eId: e2eId, + e2eFileTransferParamsJSON: e2eFileTransferParams, + fileTransferParamsJSON: fileTransferParams + )]) + XCTAssertNotNil(receiveFileCallback) + XCTAssertNoDifference(didSetFileTransfer.map { $0 != nil }, [true]) + } + + func testStartWhenNotConnected() { + var env: MessengerEnvironment = .unimplemented + env.e2e.get = { nil } + let start: MessengerStartFileTransfer = .live(env) + + XCTAssertThrowsError(try start()) { error in + XCTAssertNoDifference( + error as NSError, + MessengerStartFileTransfer.Error.notConnected as NSError + ) + } + } +} -- GitLab