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

final class ContactLookupFeatureTests: 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(
Dariusz Rybicki's avatar
Dariusz Rybicki committed
      initialState: ContactLookupState(id: id),
      reducer: contactLookupReducer,
      environment: .unimplemented
    )
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    store.environment.mainQueue = .immediate
    store.environment.bgQueue = .immediate
    store.environment.messenger.lookupContact.run = { id in
      didLookupId.append(id)
      return lookedUpContact
    }

    store.send(.lookupTapped) {
      $0.isLookingUp = true
    }
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
  func testLookupFailure() {
    let id: Data = "1234".data(using: .utf8)!
    let failure = NSError(domain: "test", code: 0)

    let store = TestStore(
Dariusz Rybicki's avatar
Dariusz Rybicki committed
      initialState: ContactLookupState(id: id),
      reducer: contactLookupReducer,
      environment: .unimplemented
    )
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    store.environment.mainQueue = .immediate
    store.environment.bgQueue = .immediate
    store.environment.messenger.lookupContact.run = { _ in throw failure }

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