Skip to content
Snippets Groups Projects
MockNetworkMonitor.swift 1.08 KiB
Newer Older
Bruno Muniz's avatar
Bruno Muniz committed
import Combine
Ahmed Shehata's avatar
Ahmed Shehata committed
import Foundation
Bruno Muniz's avatar
Bruno Muniz committed

public struct MockNetworkMonitor: NetworkMonitoring {
    private let statusRelay = PassthroughSubject<NetworkStatus, Never>()

    public var connType: AnyPublisher<ConnectionType, Never> {
        Just(.wifi).eraseToAnyPublisher()
    }
Bruno Muniz's avatar
Bruno Muniz committed

    public var statusPublisher: AnyPublisher<NetworkStatus, Never> {
        statusRelay.eraseToAnyPublisher()
    }

    public var xxStatus: NetworkStatus {
        .available
    }

    public init() {
        // TODO
    }

    public func start() {
Ahmed Shehata's avatar
Ahmed Shehata committed
        simulateOscilation(.available)
    }

    public func update(_ status: Bool) {
        // TODO
    }
Ahmed Shehata's avatar
Ahmed Shehata committed

    private func simulateOscilation(_ status: NetworkStatus) {
        statusRelay.send(status)

        if status == .available {
            DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
Ahmed Shehata's avatar
Ahmed Shehata committed
                simulateOscilation(.internetNotAvailable)
            }
        } else if status == .internetNotAvailable {
            DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
Ahmed Shehata's avatar
Ahmed Shehata committed
                simulateOscilation(.available)
            }
        }
    }
Bruno Muniz's avatar
Bruno Muniz committed
}