2022-06-03 04:27:18 -07:00
|
|
|
//
|
|
|
|
// HomeTests.swift
|
|
|
|
// secantTests
|
|
|
|
//
|
|
|
|
// Created by Lukáš Korba on 02.06.2022.
|
|
|
|
//
|
|
|
|
|
|
|
|
import XCTest
|
|
|
|
@testable import secant_testnet
|
|
|
|
import ComposableArchitecture
|
2022-07-19 11:56:46 -07:00
|
|
|
import ZcashLightClientKit
|
2022-06-03 04:27:18 -07:00
|
|
|
|
|
|
|
class HomeTests: XCTestCase {
|
|
|
|
func testSynchronizerStateChanged_AnyButSynced() throws {
|
|
|
|
let store = TestStore(
|
|
|
|
initialState: .placeholder,
|
2022-11-09 01:30:40 -08:00
|
|
|
reducer: HomeReducer()
|
2022-06-03 04:27:18 -07:00
|
|
|
)
|
|
|
|
|
2023-02-27 13:43:38 -08:00
|
|
|
store.send(.synchronizerStateChanged(.progressUpdated))
|
2022-06-03 04:27:18 -07:00
|
|
|
|
|
|
|
store.receive(.updateSynchronizerStatus)
|
|
|
|
}
|
|
|
|
|
2023-02-22 05:50:59 -08:00
|
|
|
/// When the synchronizer status change to .synced, the .updateSynchronizerStatus is called
|
2022-06-03 04:27:18 -07:00
|
|
|
func testSynchronizerStateChanged_Synced() throws {
|
|
|
|
// setup the store and environment to be fully mocked
|
|
|
|
let testScheduler = DispatchQueue.test
|
|
|
|
|
|
|
|
let store = TestStore(
|
|
|
|
initialState: .placeholder,
|
2022-11-09 01:30:40 -08:00
|
|
|
reducer: HomeReducer()
|
2022-11-18 02:34:33 -08:00
|
|
|
) { dependencies in
|
|
|
|
dependencies.mainQueue = testScheduler.eraseToAnyScheduler()
|
|
|
|
dependencies.sdkSynchronizer = SDKSynchronizerDependency.mock
|
|
|
|
}
|
2022-11-17 03:25:55 -08:00
|
|
|
|
2022-06-03 04:27:18 -07:00
|
|
|
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,
|
2022-11-09 01:30:40 -08:00
|
|
|
reducer: HomeReducer()
|
2022-11-18 02:34:33 -08:00
|
|
|
) {
|
|
|
|
$0.diskSpaceChecker = .mockEmptyDisk
|
|
|
|
}
|
2022-11-14 10:36:51 -08:00
|
|
|
|
2022-07-08 07:49:31 -07:00
|
|
|
store.send(.onAppear) { state in
|
|
|
|
state.requiredTransactionConfirmations = 10
|
|
|
|
}
|
2022-06-03 04:27:18 -07:00
|
|
|
|
|
|
|
// expected side effects as a result of .onAppear registration
|
2022-12-01 06:31:30 -08:00
|
|
|
store.receive(.updateDestination(nil))
|
2022-06-03 04:27:18 -07:00
|
|
|
store.receive(.synchronizerStateChanged(.unknown))
|
|
|
|
store.receive(.updateSynchronizerStatus)
|
2022-07-08 07:49:31 -07:00
|
|
|
|
2022-06-03 04:27:18 -07:00
|
|
|
// long-living (cancelable) effects need to be properly canceled.
|
|
|
|
// the .onDisappear action cancles the observer of the synchronizer status change.
|
|
|
|
store.send(.onDisappear)
|
|
|
|
}
|
2022-09-30 06:49:07 -07:00
|
|
|
|
|
|
|
func testOnAppear_notEnoughSpaceOnDisk() throws {
|
|
|
|
let store = TestStore(
|
|
|
|
initialState: .placeholder,
|
2022-11-09 01:30:40 -08:00
|
|
|
reducer: HomeReducer()
|
2022-11-18 02:34:33 -08:00
|
|
|
) {
|
|
|
|
$0.diskSpaceChecker = .mockFullDisk
|
|
|
|
}
|
2022-11-14 10:36:51 -08:00
|
|
|
|
2022-09-30 06:49:07 -07:00
|
|
|
store.send(.onAppear) { state in
|
|
|
|
state.requiredTransactionConfirmations = 10
|
|
|
|
}
|
|
|
|
|
|
|
|
// expected side effects as a result of .onAppear registration
|
2022-12-01 06:31:30 -08:00
|
|
|
store.receive(.updateDestination(.notEnoughFreeDiskSpace)) { state in
|
|
|
|
state.destination = .notEnoughFreeDiskSpace
|
2022-09-30 06:49:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
// long-living (cancelable) effects need to be properly canceled.
|
|
|
|
// the .onDisappear action cancles the observer of the synchronizer status change.
|
|
|
|
store.send(.onDisappear)
|
|
|
|
}
|
2022-06-03 04:27:18 -07:00
|
|
|
}
|