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

Update MessengerReceiveFile and MessengerSendFile

parent 581c1b0d
Branches
Tags
2 merge requests!132Update Bindings,!102Release 1.0.0
...@@ -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