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 {
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
))
}
)
}
......
......@@ -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
......
......@@ -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))
])
}
}
......
......@@ -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)),
])
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment