Newer
Older
import CustomDump
import XXClient
import XCTest
@testable import XXMessengerClient
func testConnect() throws {
struct DidLogIn: Equatable {
var ephemeral: Bool
var cMixId: Int
var identity: ReceptionIdentity
var e2eParamsJSON: Data
}
var didMakeReceptionIdentity: [Bool] = []
var didLogInWithAuthCallbacks: [AuthCallbacks?] = []
var didHandleAuthCallbacks: [AuthCallbacks.Callback] = []
var didSetIsListeningForMessages: [Bool] = []
let cMixId = 1234
let receptionId = ReceptionIdentity.stub
let e2eParams = "e2e-params".data(using: .utf8)!
env.isListeningForMessages.set = { didSetIsListeningForMessages.append($0) }
var cMix: CMix = .unimplemented
cMix.getId.run = { cMixId }
cMix.makeReceptionIdentity.run = { legacy in
didMakeReceptionIdentity.append(legacy)
return receptionId
}
env.authCallbacks.registered = {
AuthCallbacks { callback in
didHandleAuthCallbacks.append(callback)
}
}
env.login.run = { ephemeral, cMixId, authCallbacks, identity, e2eParamsJSON in
didLogIn.append(.init(
ephemeral: ephemeral,
cMixId: cMixId,
identity: identity,
e2eParamsJSON: e2eParamsJSON
))
didLogInWithAuthCallbacks.append(authCallbacks)
XCTAssertNoDifference(didMakeReceptionIdentity, [true])
XCTAssertNoDifference(didLogIn, [
DidLogIn(
ephemeral: false,
cMixId: 1234,
XCTAssertNoDifference(didSetIsListeningForMessages, [false])
XCTAssertEqual(didLogInWithAuthCallbacks.compactMap { $0 }.count, 1)
XCTAssertEqual(didSetE2E.compactMap { $0 }.count, 1)
didLogInWithAuthCallbacks.forEach { authCallbacks in
[AuthCallbacks.Callback].stubs.forEach { callback in
authCallbacks?.handle(callback)
}
}
XCTAssertNoDifference(didHandleAuthCallbacks, .stubs)
XCTAssertThrowsError(try connect()) { error in
XCTAssertEqual(
error as? MessengerConnect.Error,
MessengerConnect.Error.notLoaded
)
}
}
func testMakeLegacyReceptionIdentityFailure() {
struct Error: Swift.Error, Equatable {}
let error = Error()
var cMix: CMix = .unimplemented
cMix.getId.run = { 1234 }
cMix.makeReceptionIdentity.run = { _ in throw error }
env.authCallbacks.registered = { .unimplemented }
XCTAssertThrowsError(try connect()) { err in
XCTAssertEqual(err as? Error, error)
}
}
func testLoginFailure() {
struct Error: Swift.Error, Equatable {}
let error = Error()
var cMix: CMix = .unimplemented
cMix.getId.run = { 1234 }
cMix.makeReceptionIdentity.run = { _ in .stub }
env.authCallbacks.registered = { .unimplemented }
env.getE2EParams.run = { "e2e-params".data(using: .utf8)! }
env.login.run = { _, _, _, _, _ in throw error }
XCTAssertThrowsError(try connect()) { err in
XCTAssertEqual(err as? Error, error)
}
}
}
private extension ReceptionIdentity {
static let stub = ReceptionIdentity(
id: "id".data(using: .utf8)!,
rsaPrivatePem: "rsaPrivatePem".data(using: .utf8)!,
salt: "salt".data(using: .utf8)!,
dhKeyPrivate: "dhKeyPrivate".data(using: .utf8)!,
e2eGrp: "e2eGrp".data(using: .utf8)!
)
}