2023-03-15 04:17:43 -07:00
|
|
|
//
|
|
|
|
// SDKSynchronizerStateHandler.swift
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// Created by Michal Fousek on 15.03.2023.
|
|
|
|
//
|
|
|
|
|
|
|
|
import Combine
|
|
|
|
import Foundation
|
|
|
|
import XCTest
|
|
|
|
@testable import ZcashLightClientKit
|
|
|
|
|
2023-04-28 10:13:21 -07:00
|
|
|
class SDKSynchronizerInternalSyncStatusHandler {
|
2023-03-15 04:17:43 -07:00
|
|
|
enum StatusIdentifier: String {
|
|
|
|
case unprepared
|
|
|
|
case syncing
|
|
|
|
case enhancing
|
|
|
|
case fetching
|
|
|
|
case synced
|
|
|
|
case stopped
|
|
|
|
case disconnected
|
|
|
|
case error
|
|
|
|
}
|
|
|
|
|
2023-04-28 10:13:21 -07:00
|
|
|
private let queue = DispatchQueue(label: "SDKSynchronizerInternalSyncStatusHandler")
|
2023-03-15 04:17:43 -07:00
|
|
|
private var cancellables: [AnyCancellable] = []
|
|
|
|
|
|
|
|
func subscribe(to stateStream: AnyPublisher<SynchronizerState, Never>, expectations: [StatusIdentifier: XCTestExpectation]) {
|
|
|
|
stateStream
|
|
|
|
.receive(on: queue)
|
2023-04-28 10:13:21 -07:00
|
|
|
.map { $0.internalSyncStatus }
|
2023-03-15 04:17:43 -07:00
|
|
|
.sink { status in expectations[status.identifier]?.fulfill() }
|
|
|
|
.store(in: &cancellables)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-04-28 10:13:21 -07:00
|
|
|
extension InternalSyncStatus {
|
|
|
|
var identifier: SDKSynchronizerInternalSyncStatusHandler.StatusIdentifier {
|
2023-03-15 04:17:43 -07:00
|
|
|
switch self {
|
|
|
|
case .unprepared: return .unprepared
|
|
|
|
case .syncing: return .syncing
|
|
|
|
case .synced: return .synced
|
|
|
|
case .stopped: return .stopped
|
|
|
|
case .disconnected: return .disconnected
|
|
|
|
case .error: return .error
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|