Skip to content
Snippets Groups Projects
MessengerLogInTests.swift 4.8 KiB
Newer Older
Dariusz Rybicki's avatar
Dariusz Rybicki committed
import CustomDump
import XCTest
import XXClient
@testable import XXMessengerClient

Dariusz Rybicki's avatar
Dariusz Rybicki committed
final class MessengerLogInTests: XCTestCase {
  func testLogin() throws {
    var didNewOrLoadUDWithParams: [NewOrLoadUd.Params] = []
    var didNewOrLoadUDWithFollower: [UdNetworkStatus] = []
    var didSetUD: [UserDiscovery?] = []

    let e2eId = 1234
    let networkFollowerStatus: NetworkFollowerStatus = .stopped
    let udEnvironmentFromNDF = UDEnvironment(
      address: "ndf-ud-address",
      cert: "ndf-ud-cert".data(using: .utf8)!,
      contact: "ndf-ud-contact".data(using: .utf8)!
    )
    
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    var env: MessengerEnvironment = .unimplemented
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    env.cMix.get = {
      var cMix: CMix = .unimplemented
      cMix.networkFollowerStatus.run = { networkFollowerStatus }
      return cMix
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    env.e2e.get = {
      var e2e: E2E = .unimplemented
      e2e.getId.run = { e2eId }
      e2e.getUdEnvironmentFromNdf.run = { udEnvironmentFromNDF }
      return e2e
    }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    env.ud.set = { didSetUD.append($0) }
    env.udEnvironment = nil
    env.newOrLoadUd.run = { params, follower in
      didNewOrLoadUDWithParams.append(params)
      didNewOrLoadUDWithFollower.append(follower)
      return .unimplemented
    }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    let logIn: MessengerLogIn = .live(env)
    try logIn()

    XCTAssertNoDifference(didNewOrLoadUDWithParams, [.init(
      e2eId: e2eId,
      username: nil,
      registrationValidationSignature: nil,
      environment: udEnvironmentFromNDF
    )])
    XCTAssertEqual(didNewOrLoadUDWithFollower.count, 1)
    XCTAssertEqual(
      didNewOrLoadUDWithFollower.first?.handle(),
    XCTAssertEqual(didSetUD.compactMap { $0 }.count, 1)
  }

  func testLoginWithAlternativeUD() throws {
    var didNewOrLoadUDWithParams: [NewOrLoadUd.Params] = []
    var didSetUD: [UserDiscovery?] = []

    let e2eId = 1234
    let udEnvironment = UDEnvironment(
      address: "alt-ud-address",
      cert: "alt-ud-cert".data(using: .utf8)!,
      contact: "alt-ud-contact".data(using: .utf8)!
    )
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    var env: MessengerEnvironment = .unimplemented
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    env.cMix.get = {
      var cMix: CMix = .unimplemented
      cMix.networkFollowerStatus.run = { .running }
      return cMix
    }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    env.e2e.get = {
      var e2e: E2E = .unimplemented
      e2e.getId.run = { e2eId }
      return e2e
    }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    env.ud.set = { didSetUD.append($0) }
    env.udEnvironment = udEnvironment
    env.newOrLoadUd.run = { params, _ in
      didNewOrLoadUDWithParams.append(params)
      return .unimplemented
    }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    let logIn: MessengerLogIn = .live(env)
    try logIn()

    XCTAssertNoDifference(didNewOrLoadUDWithParams, [.init(
      e2eId: e2eId,
      username: nil,
      registrationValidationSignature: nil,
      environment: udEnvironment
    XCTAssertEqual(didSetUD.compactMap { $0 }.count, 1)
  }

  func testLoginWithoutCMix() {
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    var env: MessengerEnvironment = .unimplemented
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    env.cMix.get = { nil }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    let logIn: MessengerLogIn = .live(env)

    XCTAssertThrowsError(try logIn()) { error in
      XCTAssertEqual(
Dariusz Rybicki's avatar
Dariusz Rybicki committed
        error as? MessengerLogIn.Error,
        MessengerLogIn.Error.notLoaded
      )
    }
  }

  func testLoginWithoutE2E() {
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    var env: MessengerEnvironment = .unimplemented
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    env.cMix.get = { .unimplemented }
    env.e2e.get = { nil }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    let logIn: MessengerLogIn = .live(env)

    XCTAssertThrowsError(try logIn()) { error in
      XCTAssertEqual(
Dariusz Rybicki's avatar
Dariusz Rybicki committed
        error as? MessengerLogIn.Error,
        MessengerLogIn.Error.notConnected
      )
    }
  }

  func testGetUdContactFromNdfFailure() {
    struct Error: Swift.Error, Equatable {}
    let error = Error()

Dariusz Rybicki's avatar
Dariusz Rybicki committed
    var env: MessengerEnvironment = .unimplemented
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    env.cMix.get = {
      var cMix: CMix = .unimplemented
      cMix.networkFollowerStatus.run = { .running }
      return cMix
    }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    env.e2e.get = {
      var e2e: E2E = .unimplemented
      e2e.getId.run = { 1234 }
      e2e.getUdEnvironmentFromNdf.run = { throw error }
      return e2e
    }
    env.udEnvironment = nil
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    let logIn: MessengerLogIn = .live(env)

    XCTAssertThrowsError(try logIn()) { err in
      XCTAssertEqual(err as? Error, error)
    }
  }

  func testNewOrLoadUdFailure() {
    struct Error: Swift.Error, Equatable {}
    let error = Error()

Dariusz Rybicki's avatar
Dariusz Rybicki committed
    var env: MessengerEnvironment = .unimplemented
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    env.cMix.get = {
      var cMix: CMix = .unimplemented
      cMix.networkFollowerStatus.run = { .running }
      return cMix
    }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    env.e2e.get = {
      var e2e: E2E = .unimplemented
      e2e.getId.run = { 1234 }
      return e2e
    }
    env.udEnvironment = UDEnvironment(
      address: "ud-address",
      cert: "ud-cert".data(using: .utf8)!,
      contact: "ud-contact".data(using: .utf8)!
    )
    env.newOrLoadUd.run = { _, _ in throw error }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    let logIn: MessengerLogIn = .live(env)

    XCTAssertThrowsError(try logIn()) { err in
      XCTAssertEqual(err as? Error, error)
    }
  }
}