Skip to content
Snippets Groups Projects
Commit 1a39609e authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Update MessengerReceiveFile and MessengerSendFile

parent 581c1b0d
No related branches found
No related tags found
2 merge requests!132Update Bindings,!102Release 1.0.0
This commit is part of merge request !132. Comments created here will be created in the context of that merge request.
...@@ -18,8 +18,8 @@ public struct MessengerReceiveFile { ...@@ -18,8 +18,8 @@ public struct MessengerReceiveFile {
public enum CallbackInfo: Equatable { public enum CallbackInfo: Equatable {
public enum Failure: Equatable { public enum Failure: Equatable {
case callbackError(NSError) case callback(NSError)
case receiveError(NSError) case receive(NSError)
} }
case progress(transmitted: Int, total: Int) case progress(transmitted: Int, total: Int)
...@@ -53,25 +53,23 @@ extension MessengerReceiveFile { ...@@ -53,25 +53,23 @@ extension MessengerReceiveFile {
transferId: params.transferId, transferId: params.transferId,
period: params.callbackIntervalMS, period: params.callbackIntervalMS,
callback: FileTransferProgressCallback { result in callback: FileTransferProgressCallback { result in
switch result { if let error = result.error {
case .success(let info): callback(.failed(.callback(error as NSError)))
if info.progress.completed { return
}
if result.progress.completed {
do { do {
callback(.finished(try fileTransfer.receive(transferId: params.transferId))) callback(.finished(try fileTransfer.receive(transferId: params.transferId)))
} catch { } catch {
callback(.failed(.receiveError(error as NSError))) callback(.failed(.receive(error as NSError)))
}
return
} }
} else {
callback(.progress( callback(.progress(
transmitted: info.progress.transmitted, transmitted: result.progress.transmitted,
total: info.progress.total total: result.progress.total
)) ))
} }
case .failure(let error):
callback(.failed(.callbackError(error)))
}
}
) )
} }
} }
......
...@@ -24,7 +24,7 @@ public struct MessengerSendFile { ...@@ -24,7 +24,7 @@ public struct MessengerSendFile {
public enum CallbackInfo: Equatable { public enum CallbackInfo: Equatable {
public enum Failure: Equatable { public enum Failure: Equatable {
case error(NSError) case callback(NSError)
case close(NSError) case close(NSError)
} }
...@@ -62,8 +62,7 @@ extension MessengerSendFile { ...@@ -62,8 +62,7 @@ extension MessengerSendFile {
callback(.failed(id: id, .close(error as NSError))) callback(.failed(id: id, .close(error as NSError)))
} }
} }
var transferId: Data! let transferId = try fileTransfer.send(
transferId = try fileTransfer.send(
params: FileTransferSend.Params( params: FileTransferSend.Params(
payload: params.file, payload: params.file,
recipientId: params.recipientId, recipientId: params.recipientId,
...@@ -71,27 +70,22 @@ extension MessengerSendFile { ...@@ -71,27 +70,22 @@ extension MessengerSendFile {
period: params.callbackIntervalMS period: params.callbackIntervalMS
), ),
callback: FileTransferProgressCallback { result in callback: FileTransferProgressCallback { result in
guard let transferId else { if let error = result.error {
fatalError("Bindings issue: file transfer progress callback was called before send function returned transfer id.") callback(.failed(id: result.progress.transferId, .callback(error as NSError)))
close(id: result.progress.transferId)
return
}
if result.progress.completed {
callback(.finished(id: result.progress.transferId))
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( callback(.progress(
id: transferId, id: result.progress.transferId,
transmitted: cb.progress.transmitted, transmitted: result.progress.transmitted,
total: cb.progress.total total: result.progress.total
)) ))
} }
}
}
) )
return transferId return transferId
} }
......
...@@ -43,15 +43,15 @@ final class MessengerReceiveFileTests: XCTestCase { ...@@ -43,15 +43,15 @@ final class MessengerReceiveFileTests: XCTestCase {
XCTAssertNoDifference(didReceiveCallback, []) XCTAssertNoDifference(didReceiveCallback, [])
didReceiveCallback = [] didReceiveCallback = []
didRegisterReceivedProgressCallbackWithCallback.first?.handle(.success( didRegisterReceivedProgressCallbackWithCallback.first?.handle(.init(
FileTransferProgressCallback.Callback( progress: .init(
progress: Progress( transferId: params.transferId,
completed: false, completed: false,
transmitted: 1, transmitted: 1,
total: 3 total: 3
), ),
partTracker: .unimplemented partTracker: .unimplemented,
) error: nil
)) ))
XCTAssertNoDifference(didReceiveCallback, [ XCTAssertNoDifference(didReceiveCallback, [
...@@ -59,15 +59,15 @@ final class MessengerReceiveFileTests: XCTestCase { ...@@ -59,15 +59,15 @@ final class MessengerReceiveFileTests: XCTestCase {
]) ])
didReceiveCallback = [] didReceiveCallback = []
didRegisterReceivedProgressCallbackWithCallback.first?.handle(.success( didRegisterReceivedProgressCallbackWithCallback.first?.handle(.init(
FileTransferProgressCallback.Callback( progress: .init(
progress: Progress( transferId: params.transferId,
completed: false, completed: false,
transmitted: 2, transmitted: 2,
total: 3 total: 3
), ),
partTracker: .unimplemented partTracker: .unimplemented,
) error: nil
)) ))
XCTAssertNoDifference(didReceiveCallback, [ XCTAssertNoDifference(didReceiveCallback, [
...@@ -75,15 +75,15 @@ final class MessengerReceiveFileTests: XCTestCase { ...@@ -75,15 +75,15 @@ final class MessengerReceiveFileTests: XCTestCase {
]) ])
didReceiveCallback = [] didReceiveCallback = []
didRegisterReceivedProgressCallbackWithCallback.first?.handle(.success( didRegisterReceivedProgressCallbackWithCallback.first?.handle(.init(
FileTransferProgressCallback.Callback(
progress: Progress( progress: Progress(
transferId: params.transferId,
completed: true, completed: true,
transmitted: 3, transmitted: 3,
total: 3 total: 3
), ),
partTracker: .unimplemented partTracker: .unimplemented,
) error: nil
)) ))
XCTAssertNoDifference(didReceiveTransferId, [ XCTAssertNoDifference(didReceiveTransferId, [
...@@ -127,14 +127,19 @@ final class MessengerReceiveFileTests: XCTestCase { ...@@ -127,14 +127,19 @@ final class MessengerReceiveFileTests: XCTestCase {
didReceiveCallback.append(info) 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, [ XCTAssertNoDifference(didReceiveCallback, [
.failed(.callbackError(error)) .failed(.callback(error))
]) ])
} }
func testReceiveFileReceiveError() throws { func testReceiveFileReceiveError() throws {
let params: MessengerReceiveFile.Params = .stub
let error = NSError(domain: "test", code: 123) let error = NSError(domain: "test", code: 123)
var receivedProgressCallback: FileTransferProgressCallback? var receivedProgressCallback: FileTransferProgressCallback?
...@@ -153,23 +158,23 @@ final class MessengerReceiveFileTests: XCTestCase { ...@@ -153,23 +158,23 @@ final class MessengerReceiveFileTests: XCTestCase {
} }
let receiveFile: MessengerReceiveFile = .live(env) let receiveFile: MessengerReceiveFile = .live(env)
try receiveFile(.stub) { info in try receiveFile(params) { info in
didReceiveCallback.append(info) didReceiveCallback.append(info)
} }
receivedProgressCallback?.handle(.success( receivedProgressCallback?.handle(.init(
FileTransferProgressCallback.Callback(
progress: Progress( progress: Progress(
transferId: params.transferId,
completed: true, completed: true,
transmitted: 3, transmitted: 3,
total: 3 total: 3
), ),
partTracker: .unimplemented partTracker: .unimplemented,
) error: nil
)) ))
XCTAssertNoDifference(didReceiveCallback, [ XCTAssertNoDifference(didReceiveCallback, [
.failed(.receiveError(error)) .failed(.receive(error))
]) ])
} }
} }
......
...@@ -43,30 +43,36 @@ final class MessengerSendFileTests: XCTestCase { ...@@ -43,30 +43,36 @@ final class MessengerSendFileTests: XCTestCase {
) )
]) ])
fileTransferProgressCallback.handle(.success(.init( fileTransferProgressCallback.handle(.init(
progress: Progress( progress: Progress(
transferId: newTransferId,
completed: false, completed: false,
transmitted: 1, transmitted: 1,
total: 10 total: 10
), ),
partTracker: .unimplemented partTracker: .unimplemented,
))) error: nil
fileTransferProgressCallback.handle(.success(.init( ))
fileTransferProgressCallback.handle(.init(
progress: Progress( progress: Progress(
transferId: newTransferId,
completed: false, completed: false,
transmitted: 6, transmitted: 6,
total: 10 total: 10
), ),
partTracker: .unimplemented partTracker: .unimplemented,
))) error: nil
fileTransferProgressCallback.handle(.success(.init( ))
fileTransferProgressCallback.handle(.init(
progress: Progress( progress: Progress(
transferId: newTransferId,
completed: true, completed: true,
transmitted: 10, transmitted: 10,
total: 10 total: 10
), ),
partTracker: .unimplemented partTracker: .unimplemented,
))) error: nil
))
XCTAssertNoDifference(didReceiveCallback, [ XCTAssertNoDifference(didReceiveCallback, [
.progress(id: transferId, transmitted: 1, total: 10), .progress(id: transferId, transmitted: 1, total: 10),
...@@ -90,6 +96,9 @@ final class MessengerSendFileTests: XCTestCase { ...@@ -90,6 +96,9 @@ final class MessengerSendFileTests: XCTestCase {
} }
func testSendFileCallbackFailure() throws { func testSendFileCallbackFailure() throws {
let newTransferId = "transferId".data(using: .utf8)!
let error = NSError(domain: "test", code: 1234)
var didCloseSend: [Data] = [] var didCloseSend: [Data] = []
var didReceiveCallback: [MessengerSendFile.CallbackInfo] = [] var didReceiveCallback: [MessengerSendFile.CallbackInfo] = []
var fileTransferProgressCallback: FileTransferProgressCallback! var fileTransferProgressCallback: FileTransferProgressCallback!
...@@ -99,7 +108,7 @@ final class MessengerSendFileTests: XCTestCase { ...@@ -99,7 +108,7 @@ final class MessengerSendFileTests: XCTestCase {
var fileTransfer: FileTransfer = .unimplemented var fileTransfer: FileTransfer = .unimplemented
fileTransfer.send.run = { _, callback in fileTransfer.send.run = { _, callback in
fileTransferProgressCallback = callback fileTransferProgressCallback = callback
return "transferId".data(using: .utf8)! return newTransferId
} }
fileTransfer.closeSend.run = { id in fileTransfer.closeSend.run = { id in
didCloseSend.append(id) didCloseSend.append(id)
...@@ -111,18 +120,26 @@ final class MessengerSendFileTests: XCTestCase { ...@@ -111,18 +120,26 @@ final class MessengerSendFileTests: XCTestCase {
let transferId = try sendFile(.stub) { info in let transferId = try sendFile(.stub) { info in
didReceiveCallback.append(info) didReceiveCallback.append(info)
} }
fileTransferProgressCallback.handle(.init(
let error = NSError(domain: "test", code: 1234) progress: .init(
fileTransferProgressCallback.handle(.failure(error)) transferId: newTransferId,
completed: false,
transmitted: 0,
total: 0
),
partTracker: .unimplemented,
error: error
))
XCTAssertNoDifference(didReceiveCallback, [ XCTAssertNoDifference(didReceiveCallback, [
.failed(id: transferId, .error(error)), .failed(id: newTransferId, .callback(error)),
]) ])
XCTAssertNoDifference(didCloseSend, [transferId]) XCTAssertNoDifference(didCloseSend, [newTransferId])
} }
func testSendFileCloseError() throws { func testSendFileCloseError() throws {
let closeError = NSError(domain: "test", code: 1234) let closeError = NSError(domain: "test", code: 1234)
let newTransferId = "transferId".data(using: .utf8)!
var didReceiveCallback: [MessengerSendFile.CallbackInfo] = [] var didReceiveCallback: [MessengerSendFile.CallbackInfo] = []
var fileTransferProgressCallback: FileTransferProgressCallback! var fileTransferProgressCallback: FileTransferProgressCallback!
...@@ -132,7 +149,7 @@ final class MessengerSendFileTests: XCTestCase { ...@@ -132,7 +149,7 @@ final class MessengerSendFileTests: XCTestCase {
var fileTransfer: FileTransfer = .unimplemented var fileTransfer: FileTransfer = .unimplemented
fileTransfer.send.run = { _, callback in fileTransfer.send.run = { _, callback in
fileTransferProgressCallback = callback fileTransferProgressCallback = callback
return "transferId".data(using: .utf8)! return newTransferId
} }
fileTransfer.closeSend.run = { id in fileTransfer.closeSend.run = { id in
throw closeError throw closeError
...@@ -145,18 +162,20 @@ final class MessengerSendFileTests: XCTestCase { ...@@ -145,18 +162,20 @@ final class MessengerSendFileTests: XCTestCase {
didReceiveCallback.append(info) didReceiveCallback.append(info)
} }
fileTransferProgressCallback.handle(.success(.init( fileTransferProgressCallback.handle(.init(
progress: .init( progress: .init(
transferId: newTransferId,
completed: true, completed: true,
transmitted: 1, transmitted: 1,
total: 1 total: 1
), ),
partTracker: .unimplemented partTracker: .unimplemented,
))) error: nil
))
XCTAssertNoDifference(didReceiveCallback, [ XCTAssertNoDifference(didReceiveCallback, [
.finished(id: transferId), .finished(id: newTransferId),
.failed(id: transferId, .close(closeError)), .failed(id: newTransferId, .close(closeError)),
]) ])
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment