From 1a39609ed0e0d2aa6b5bfeb8b49dba68fc1681bc Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Tue, 1 Nov 2022 22:11:47 +0100 Subject: [PATCH] Update MessengerReceiveFile and MessengerSendFile --- .../Functions/MessengerReceiveFile.swift | 34 ++++---- .../Functions/MessengerSendFile.swift | 36 ++++---- .../Functions/MessengerReceiveFileTests.swift | 85 ++++++++++--------- .../Functions/MessengerSendFileTests.swift | 61 ++++++++----- 4 files changed, 116 insertions(+), 100 deletions(-) diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift index 399de8c0..9c3bda14 100644 --- a/Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift +++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift @@ -18,8 +18,8 @@ public struct MessengerReceiveFile { public enum CallbackInfo: Equatable { public enum Failure: Equatable { - case callbackError(NSError) - case receiveError(NSError) + case callback(NSError) + case receive(NSError) } case progress(transmitted: Int, total: Int) @@ -53,24 +53,22 @@ extension MessengerReceiveFile { transferId: params.transferId, period: params.callbackIntervalMS, callback: FileTransferProgressCallback { result in - switch result { - case .success(let info): - if info.progress.completed { - do { - callback(.finished(try fileTransfer.receive(transferId: params.transferId))) - } catch { - callback(.failed(.receiveError(error as NSError))) - } - } else { - callback(.progress( - transmitted: info.progress.transmitted, - total: info.progress.total - )) + if let error = result.error { + callback(.failed(.callback(error as NSError))) + return + } + if result.progress.completed { + do { + callback(.finished(try fileTransfer.receive(transferId: params.transferId))) + } catch { + callback(.failed(.receive(error as NSError))) } - - case .failure(let error): - callback(.failed(.callbackError(error))) + return } + callback(.progress( + transmitted: result.progress.transmitted, + total: result.progress.total + )) } ) } diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerSendFile.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerSendFile.swift index 8a0b1776..35158ecb 100644 --- a/Sources/XXMessengerClient/Messenger/Functions/MessengerSendFile.swift +++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerSendFile.swift @@ -24,7 +24,7 @@ public struct MessengerSendFile { public enum CallbackInfo: Equatable { public enum Failure: Equatable { - case error(NSError) + case callback(NSError) case close(NSError) } @@ -62,8 +62,7 @@ extension MessengerSendFile { callback(.failed(id: id, .close(error as NSError))) } } - var transferId: Data! - transferId = try fileTransfer.send( + let transferId = try fileTransfer.send( params: FileTransferSend.Params( payload: params.file, recipientId: params.recipientId, @@ -71,26 +70,21 @@ extension MessengerSendFile { period: params.callbackIntervalMS ), callback: FileTransferProgressCallback { result in - guard let transferId else { - fatalError("Bindings issue: file transfer progress callback was called before send function returned transfer id.") + if let error = result.error { + callback(.failed(id: result.progress.transferId, .callback(error as NSError))) + close(id: result.progress.transferId) + return } - switch result { - case .failure(let error): - callback(.failed(id: transferId, .error(error))) - close(id: transferId) - - case .success(let cb): - if cb.progress.completed { - callback(.finished(id: transferId)) - close(id: transferId) - } else { - callback(.progress( - id: transferId, - transmitted: cb.progress.transmitted, - total: cb.progress.total - )) - } + if result.progress.completed { + callback(.finished(id: result.progress.transferId)) + close(id: result.progress.transferId) + return } + callback(.progress( + id: result.progress.transferId, + transmitted: result.progress.transmitted, + total: result.progress.total + )) } ) return transferId diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift index b2fcefd8..39d641fb 100644 --- a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift +++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift @@ -43,15 +43,15 @@ final class MessengerReceiveFileTests: XCTestCase { XCTAssertNoDifference(didReceiveCallback, []) didReceiveCallback = [] - didRegisterReceivedProgressCallbackWithCallback.first?.handle(.success( - FileTransferProgressCallback.Callback( - progress: Progress( - completed: false, - transmitted: 1, - total: 3 - ), - partTracker: .unimplemented - ) + didRegisterReceivedProgressCallbackWithCallback.first?.handle(.init( + progress: .init( + transferId: params.transferId, + completed: false, + transmitted: 1, + total: 3 + ), + partTracker: .unimplemented, + error: nil )) XCTAssertNoDifference(didReceiveCallback, [ @@ -59,15 +59,15 @@ final class MessengerReceiveFileTests: XCTestCase { ]) didReceiveCallback = [] - didRegisterReceivedProgressCallbackWithCallback.first?.handle(.success( - FileTransferProgressCallback.Callback( - progress: Progress( - completed: false, - transmitted: 2, - total: 3 - ), - partTracker: .unimplemented - ) + didRegisterReceivedProgressCallbackWithCallback.first?.handle(.init( + progress: .init( + transferId: params.transferId, + completed: false, + transmitted: 2, + total: 3 + ), + partTracker: .unimplemented, + error: nil )) XCTAssertNoDifference(didReceiveCallback, [ @@ -75,15 +75,15 @@ final class MessengerReceiveFileTests: XCTestCase { ]) didReceiveCallback = [] - didRegisterReceivedProgressCallbackWithCallback.first?.handle(.success( - FileTransferProgressCallback.Callback( - progress: Progress( - completed: true, - transmitted: 3, - total: 3 - ), - partTracker: .unimplemented - ) + didRegisterReceivedProgressCallbackWithCallback.first?.handle(.init( + progress: Progress( + transferId: params.transferId, + completed: true, + transmitted: 3, + total: 3 + ), + partTracker: .unimplemented, + error: nil )) XCTAssertNoDifference(didReceiveTransferId, [ @@ -127,14 +127,19 @@ final class MessengerReceiveFileTests: XCTestCase { didReceiveCallback.append(info) } - receivedProgressCallback?.handle(.failure(error)) + receivedProgressCallback?.handle(.init( + progress: Progress(transferId: Data(), completed: false, transmitted: 0, total: 0), + partTracker: .unimplemented, + error: error + )) XCTAssertNoDifference(didReceiveCallback, [ - .failed(.callbackError(error)) + .failed(.callback(error)) ]) } func testReceiveFileReceiveError() throws { + let params: MessengerReceiveFile.Params = .stub let error = NSError(domain: "test", code: 123) var receivedProgressCallback: FileTransferProgressCallback? @@ -153,23 +158,23 @@ final class MessengerReceiveFileTests: XCTestCase { } let receiveFile: MessengerReceiveFile = .live(env) - try receiveFile(.stub) { info in + try receiveFile(params) { info in didReceiveCallback.append(info) } - receivedProgressCallback?.handle(.success( - FileTransferProgressCallback.Callback( - progress: Progress( - completed: true, - transmitted: 3, - total: 3 - ), - partTracker: .unimplemented - ) + receivedProgressCallback?.handle(.init( + progress: Progress( + transferId: params.transferId, + completed: true, + transmitted: 3, + total: 3 + ), + partTracker: .unimplemented, + error: nil )) XCTAssertNoDifference(didReceiveCallback, [ - .failed(.receiveError(error)) + .failed(.receive(error)) ]) } } diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSendFileTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSendFileTests.swift index 54823eb8..2a0b74dc 100644 --- a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSendFileTests.swift +++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSendFileTests.swift @@ -43,30 +43,36 @@ final class MessengerSendFileTests: XCTestCase { ) ]) - fileTransferProgressCallback.handle(.success(.init( + fileTransferProgressCallback.handle(.init( progress: Progress( + transferId: newTransferId, completed: false, transmitted: 1, total: 10 ), - partTracker: .unimplemented - ))) - fileTransferProgressCallback.handle(.success(.init( + partTracker: .unimplemented, + error: nil + )) + fileTransferProgressCallback.handle(.init( progress: Progress( + transferId: newTransferId, completed: false, transmitted: 6, total: 10 ), - partTracker: .unimplemented - ))) - fileTransferProgressCallback.handle(.success(.init( + partTracker: .unimplemented, + error: nil + )) + fileTransferProgressCallback.handle(.init( progress: Progress( + transferId: newTransferId, completed: true, transmitted: 10, total: 10 ), - partTracker: .unimplemented - ))) + partTracker: .unimplemented, + error: nil + )) XCTAssertNoDifference(didReceiveCallback, [ .progress(id: transferId, transmitted: 1, total: 10), @@ -90,6 +96,9 @@ final class MessengerSendFileTests: XCTestCase { } func testSendFileCallbackFailure() throws { + let newTransferId = "transferId".data(using: .utf8)! + let error = NSError(domain: "test", code: 1234) + var didCloseSend: [Data] = [] var didReceiveCallback: [MessengerSendFile.CallbackInfo] = [] var fileTransferProgressCallback: FileTransferProgressCallback! @@ -99,7 +108,7 @@ final class MessengerSendFileTests: XCTestCase { var fileTransfer: FileTransfer = .unimplemented fileTransfer.send.run = { _, callback in fileTransferProgressCallback = callback - return "transferId".data(using: .utf8)! + return newTransferId } fileTransfer.closeSend.run = { id in didCloseSend.append(id) @@ -111,18 +120,26 @@ final class MessengerSendFileTests: XCTestCase { let transferId = try sendFile(.stub) { info in didReceiveCallback.append(info) } - - let error = NSError(domain: "test", code: 1234) - fileTransferProgressCallback.handle(.failure(error)) + fileTransferProgressCallback.handle(.init( + progress: .init( + transferId: newTransferId, + completed: false, + transmitted: 0, + total: 0 + ), + partTracker: .unimplemented, + error: error + )) XCTAssertNoDifference(didReceiveCallback, [ - .failed(id: transferId, .error(error)), + .failed(id: newTransferId, .callback(error)), ]) - XCTAssertNoDifference(didCloseSend, [transferId]) + XCTAssertNoDifference(didCloseSend, [newTransferId]) } func testSendFileCloseError() throws { let closeError = NSError(domain: "test", code: 1234) + let newTransferId = "transferId".data(using: .utf8)! var didReceiveCallback: [MessengerSendFile.CallbackInfo] = [] var fileTransferProgressCallback: FileTransferProgressCallback! @@ -132,7 +149,7 @@ final class MessengerSendFileTests: XCTestCase { var fileTransfer: FileTransfer = .unimplemented fileTransfer.send.run = { _, callback in fileTransferProgressCallback = callback - return "transferId".data(using: .utf8)! + return newTransferId } fileTransfer.closeSend.run = { id in throw closeError @@ -145,18 +162,20 @@ final class MessengerSendFileTests: XCTestCase { didReceiveCallback.append(info) } - fileTransferProgressCallback.handle(.success(.init( + fileTransferProgressCallback.handle(.init( progress: .init( + transferId: newTransferId, completed: true, transmitted: 1, total: 1 ), - partTracker: .unimplemented - ))) + partTracker: .unimplemented, + error: nil + )) XCTAssertNoDifference(didReceiveCallback, [ - .finished(id: transferId), - .failed(id: transferId, .close(closeError)), + .finished(id: newTransferId), + .failed(id: newTransferId, .close(closeError)), ]) } } -- GitLab