Skip to content
Snippets Groups Projects
WelcomeComponentTests.swift 1.83 KiB
Newer Older
import ComposableArchitecture
import XCTest
@testable import WelcomeFeature

final class WelcomeComponentTests: XCTestCase {
  func testNewAccountTapped() {
Dariusz Rybicki's avatar
Dariusz Rybicki committed
    let mainQueue = DispatchQueue.test
    let bgQueue = DispatchQueue.test

    var didCreateMessenger = 0

    let store = TestStore(
      initialState: WelcomeComponent.State(),
      reducer: WelcomeComponent()
    store.dependencies.app.mainQueue = mainQueue.eraseToAnyScheduler()
    store.dependencies.app.bgQueue = bgQueue.eraseToAnyScheduler()
    store.dependencies.app.messenger.create.run = { didCreateMessenger += 1 }

    store.send(.newAccountTapped) {
      $0.isCreatingAccount = true
      $0.failure = nil
    }

    bgQueue.advance()

Dariusz Rybicki's avatar
Dariusz Rybicki committed
    XCTAssertNoDifference(didCreateMessenger, 1)

    mainQueue.advance()

    store.receive(.finished) {
      $0.isCreatingAccount = false
      $0.failure = nil
    }
  }

  func testNewAccountTappedMessengerCreateFailure() {
    struct Failure: Error {}
    let failure = Failure()
    let mainQueue = DispatchQueue.test
    let bgQueue = DispatchQueue.test

    let store = TestStore(
      initialState: WelcomeComponent.State(),
      reducer: WelcomeComponent()
    store.dependencies.app.mainQueue = mainQueue.eraseToAnyScheduler()
    store.dependencies.app.bgQueue = bgQueue.eraseToAnyScheduler()
    store.dependencies.app.messenger.create.run = { throw failure }

    store.send(.newAccountTapped) {
      $0.isCreatingAccount = true
      $0.failure = nil
    }

    bgQueue.advance()
    mainQueue.advance()

    store.receive(.failed(failure.localizedDescription)) {
      $0.isCreatingAccount = false
      $0.failure = failure.localizedDescription
    }
  }

  func testRestore() {
    let store = TestStore(
      initialState: WelcomeComponent.State(),
      reducer: WelcomeComponent()
    )

    store.send(.restoreTapped)
  }
}