91 lines
2.9 KiB
Swift
91 lines
2.9 KiB
Swift
//
|
|
// HomeTests.swift
|
|
// secantTests
|
|
//
|
|
// Created by Lukáš Korba on 02.06.2022.
|
|
//
|
|
|
|
import XCTest
|
|
@testable import secant_testnet
|
|
import ComposableArchitecture
|
|
import ZcashLightClientKit
|
|
|
|
class HomeTests: XCTestCase {
|
|
func testSynchronizerStateChanged_AnyButSynced() throws {
|
|
let store = TestStore(
|
|
initialState: .placeholder,
|
|
reducer: HomeReducer()
|
|
)
|
|
|
|
store.send(.synchronizerStateChanged(.progressUpdated))
|
|
|
|
store.receive(.updateSynchronizerStatus)
|
|
}
|
|
|
|
/// When the synchronizer status change to .synced, the .updateSynchronizerStatus is called
|
|
func testSynchronizerStateChanged_Synced() throws {
|
|
// setup the store and environment to be fully mocked
|
|
let testScheduler = DispatchQueue.test
|
|
|
|
let store = TestStore(
|
|
initialState: .placeholder,
|
|
reducer: HomeReducer()
|
|
) { dependencies in
|
|
dependencies.mainQueue = testScheduler.eraseToAnyScheduler()
|
|
dependencies.sdkSynchronizer = SDKSynchronizerDependency.mock
|
|
}
|
|
|
|
store.send(.synchronizerStateChanged(.synced))
|
|
|
|
testScheduler.advance(by: 0.01)
|
|
|
|
store.receive(.updateSynchronizerStatus)
|
|
}
|
|
|
|
/// The .onAppear action is important to register for the synchronizer state updates.
|
|
/// The integration tests make sure registrations and side effects are properly implemented.
|
|
func testOnAppear() throws {
|
|
let store = TestStore(
|
|
initialState: .placeholder,
|
|
reducer: HomeReducer()
|
|
) {
|
|
$0.diskSpaceChecker = .mockEmptyDisk
|
|
}
|
|
|
|
store.send(.onAppear) { state in
|
|
state.requiredTransactionConfirmations = 10
|
|
}
|
|
|
|
// expected side effects as a result of .onAppear registration
|
|
store.receive(.updateDestination(nil))
|
|
store.receive(.synchronizerStateChanged(.unknown))
|
|
store.receive(.updateSynchronizerStatus)
|
|
|
|
// long-living (cancelable) effects need to be properly canceled.
|
|
// the .onDisappear action cancles the observer of the synchronizer status change.
|
|
store.send(.onDisappear)
|
|
}
|
|
|
|
func testOnAppear_notEnoughSpaceOnDisk() throws {
|
|
let store = TestStore(
|
|
initialState: .placeholder,
|
|
reducer: HomeReducer()
|
|
) {
|
|
$0.diskSpaceChecker = .mockFullDisk
|
|
}
|
|
|
|
store.send(.onAppear) { state in
|
|
state.requiredTransactionConfirmations = 10
|
|
}
|
|
|
|
// expected side effects as a result of .onAppear registration
|
|
store.receive(.updateDestination(.notEnoughFreeDiskSpace)) { state in
|
|
state.destination = .notEnoughFreeDiskSpace
|
|
}
|
|
|
|
// long-living (cancelable) effects need to be properly canceled.
|
|
// the .onDisappear action cancles the observer of the synchronizer status change.
|
|
store.send(.onDisappear)
|
|
}
|
|
}
|