Newer
Older
import CustomDump
import XCTest
import XXClient
@testable import XXMessengerClient
final class MessengerStartBackupTests: XCTestCase {
func testStartWithParams() throws {
struct InitBackupParams: Equatable {
var e2eId: Int
var udId: Int
var password: String
}
var didInitializeBackup: [InitBackupParams] = []
var backupCallbacks: [UpdateBackupFunc] = []
var didHandleCallback: [Data] = []
var didSetBackup: [Backup?] = []
let password = "test-password"
let e2eId = 123
let udId = 321
let dataWithoutParams = "backup-without-params".data(using: .utf8)!
let dataWithParams = "backup-with-params".data(using: .utf8)!
var env: MessengerEnvironment = .unimplemented
env.backup.get = { didSetBackup.last as? Backup }
env.backup.set = { didSetBackup.append($0) }
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getId.run = { e2eId }
return e2e
}
env.ud.get = {
var ud: UserDiscovery = .unimplemented
ud.getId.run = { udId }
return ud
}
env.backupCallbacks.registered = {
UpdateBackupFunc { didHandleCallback.append($0) }
}
env.initializeBackup.run = { e2eId, udId, password, callback in
didInitializeBackup.append(.init(e2eId: e2eId, udId: udId, password: password))
backupCallbacks.append(callback)
var backup: Backup = .unimplemented
backup.addJSON.run = { string in
didAddJSON.append(string)
}
return backup
}
let start: MessengerStartBackup = .live(env)
try start(password: password, params: params)
XCTAssertNoDifference(didInitializeBackup, [
.init(e2eId: e2eId, udId: udId, password: password)
])
XCTAssertNoDifference(didSetBackup.map { $0 != nil }, [true])
backupCallbacks.forEach { $0.handle(dataWithoutParams) }
XCTAssertNoDifference(
didHandleCallback.map(StringData.init),
[].map(StringData.init)
)
XCTAssertNoDifference(didAddJSON, [params])
backupCallbacks.forEach { $0.handle(dataWithParams) }
XCTAssertNoDifference(
didHandleCallback.map(StringData.init),
[dataWithParams].map(StringData.init)
)
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
func testStartWithoutParams() throws {
struct InitBackupParams: Equatable {
var e2eId: Int
var udId: Int
var password: String
}
var didInitializeBackup: [InitBackupParams] = []
var backupCallbacks: [UpdateBackupFunc] = []
var didHandleCallback: [Data] = []
var didSetBackup: [Backup?] = []
let password = "test-password"
let e2eId = 123
let udId = 321
let dataWithoutParams = "backup-without-params".data(using: .utf8)!
var env: MessengerEnvironment = .unimplemented
env.backup.get = { didSetBackup.last as? Backup }
env.backup.set = { didSetBackup.append($0) }
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getId.run = { e2eId }
return e2e
}
env.ud.get = {
var ud: UserDiscovery = .unimplemented
ud.getId.run = { udId }
return ud
}
env.backupCallbacks.registered = {
UpdateBackupFunc { didHandleCallback.append($0) }
}
env.initializeBackup.run = { e2eId, udId, password, callback in
didInitializeBackup.append(.init(e2eId: e2eId, udId: udId, password: password))
backupCallbacks.append(callback)
return .unimplemented
}
let start: MessengerStartBackup = .live(env)
try start(password: password)
XCTAssertNoDifference(didInitializeBackup, [
.init(e2eId: e2eId, udId: udId, password: password)
])
XCTAssertNoDifference(didSetBackup.map { $0 != nil }, [true])
backupCallbacks.forEach { $0.handle(dataWithoutParams) }
XCTAssertNoDifference(
didHandleCallback.map(StringData.init),
[dataWithoutParams].map(StringData.init)
)
}
func testStartWhenRunning() {
var env: MessengerEnvironment = .unimplemented
env.backup.get = {
var backup: Backup = .unimplemented
backup.isRunning.run = { true }
return backup
}
let start: MessengerStartBackup = .live(env)
XCTAssertThrowsError(try start(password: "")) { error in
XCTAssertNoDifference(
error as NSError,
MessengerStartBackup.Error.isRunning as NSError
)
}
}
func testStartWhenNotConnected() {
var env: MessengerEnvironment = .unimplemented
env.backup.get = { nil }
env.e2e.get = { nil }
let start: MessengerStartBackup = .live(env)
XCTAssertThrowsError(try start(password: "")) { error in
XCTAssertNoDifference(
error as NSError,
MessengerStartBackup.Error.notConnected as NSError
)
}
}
func testStartWhenNotLoggedIn() {
var env: MessengerEnvironment = .unimplemented
env.backup.get = { nil }
env.e2e.get = { .unimplemented }
env.ud.get = { nil }
let start: MessengerStartBackup = .live(env)
XCTAssertThrowsError(try start(password: "")) { error in
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
XCTAssertNoDifference(
error as NSError,
MessengerStartBackup.Error.notLoggedIn as NSError
)
}
}
func testStartFailure() {
struct Failure: Error, Equatable {}
let failure = Failure()
var env: MessengerEnvironment = .unimplemented
env.backup.get = { nil }
env.e2e.get = {
var e2e: E2E = .unimplemented
e2e.getId.run = { 123 }
return e2e
}
env.ud.get = {
var ud: UserDiscovery = .unimplemented
ud.getId.run = { 321 }
return ud
}
env.backupCallbacks.registered = { UpdateBackupFunc { _ in } }
env.initializeBackup.run = { _, _, _, _ in throw failure }
let start: MessengerStartBackup = .live(env)
XCTAssertThrowsError(try start(password: "")) { error in
XCTAssertNoDifference(error as NSError, failure as NSError)
}
}
}