Skip to content
Snippets Groups Projects
ContactLookupComponentTests.swift 1.55 KiB
Newer Older
import ComposableArchitecture
import XCTest
Dariusz Rybicki's avatar
Dariusz Rybicki committed
import XXClient
@testable import ContactLookupFeature

final class ContactLookupComponentTests: XCTestCase {
Dariusz Rybicki's avatar
Dariusz Rybicki committed
  func testLookup() {
    let id: Data = "1234".data(using: .utf8)!
    var didLookupId: [Data] = []
    let lookedUpContact = Contact.unimplemented("123data".data(using: .utf8)!)

    let store = TestStore(
      initialState: ContactLookupComponent.State(id: id),
      reducer: ContactLookupComponent()
    store.dependencies.app.mainQueue = .immediate
    store.dependencies.app.bgQueue = .immediate
    store.dependencies.app.messenger.lookupContact.run = { id in
Dariusz Rybicki's avatar
Dariusz Rybicki committed
      didLookupId.append(id)
      return lookedUpContact
    }

    store.send(.lookupTapped) {
      $0.isLookingUp = true
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    XCTAssertEqual(didLookupId, [id])
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    store.receive(.didLookup(lookedUpContact)) {
      $0.isLookingUp = false
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
  func testLookupFailure() {
    let id: Data = "1234".data(using: .utf8)!
    let failure = NSError(domain: "test", code: 0)

    let store = TestStore(
      initialState: ContactLookupComponent.State(id: id),
      reducer: ContactLookupComponent()
    store.dependencies.app.mainQueue = .immediate
    store.dependencies.app.bgQueue = .immediate
    store.dependencies.app.messenger.lookupContact.run = { _ in throw failure }
Dariusz Rybicki's avatar
Dariusz Rybicki committed

    store.send(.lookupTapped) {
      $0.isLookingUp = true
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    }
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    store.receive(.didFail(failure)) {
      $0.isLookingUp = false
      $0.failure = failure.localizedDescription
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    }