Skip to content
Snippets Groups Projects
MessengerLoadTests.swift 2.13 KiB
Newer Older
import CustomDump
import XCTest
import XXClient
@testable import XXMessengerClient

Dariusz Rybicki's avatar
Dariusz Rybicki committed
final class MessengerLoadTests: XCTestCase {
  func testLoad() throws {
    struct DidLoadCMix: Equatable {
      var storageDir: String
      var password: Data
      var cMixParamsJSON: Data
    }
    var didLoadCMix: [DidLoadCMix] = []
    var didSetCMix: [CMix?] = []

    let storageDir = "test-storage-dir"
    let password = "password".data(using: .utf8)!
    let cMixParams = "cmix-params".data(using: .utf8)!

Dariusz Rybicki's avatar
Dariusz Rybicki committed
    var env: MessengerEnvironment = .unimplemented
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    env.cMix.set = { didSetCMix.append($0) }
    env.storageDir = storageDir
    env.passwordStorage.load = { password }
    env.getCMixParams.run = { cMixParams }
    env.loadCMix.run = { storageDir, password, cMixParamsJSON in
      didLoadCMix.append(.init(
        storageDir: storageDir,
        password: password,
        cMixParamsJSON: cMixParamsJSON
      ))
      return .unimplemented
    }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    let load: MessengerLoad = .live(env)

    try load()

    XCTAssertNoDifference(didLoadCMix, [
      DidLoadCMix(
        storageDir: storageDir,
        password: password,
        cMixParamsJSON: cMixParams
      )
    ])
    XCTAssertEqual(didSetCMix.compactMap{ $0 }.count, 1)
  }

  func testMissingPassword() {
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    var env: MessengerEnvironment = .unimplemented
    env.storageDir = "storage-dir"
    env.passwordStorage.load = { throw PasswordStorage.MissingPasswordError() }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    let load: MessengerLoad = .live(env)

    XCTAssertThrowsError(try load()) { err in
      XCTAssertEqual(
        err as? PasswordStorage.MissingPasswordError,
        PasswordStorage.MissingPasswordError()
      )
    }
  }

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

Dariusz Rybicki's avatar
Dariusz Rybicki committed
    var env: MessengerEnvironment = .unimplemented
    env.storageDir = "storage-dir"
    env.passwordStorage.load = { "password".data(using: .utf8)! }
    env.getCMixParams.run = { "cmix-params".data(using: .utf8)! }
    env.loadCMix.run = { _, _, _ in throw error }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    let load: MessengerLoad = .live(env)

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