// // ProviderManagerTests.swift // Passepartout // // Created by Davide De Rosa on 3/13/22. // Copyright (c) 2024 Davide De Rosa. All rights reserved. // // https://github.com/passepartoutvpn // // This file is part of Passepartout. // // Passepartout is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Passepartout is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Passepartout. If not, see . // //import Combine //import CoreData //import PassepartoutCore //import PassepartoutProviders //@testable import PassepartoutProvidersImpl //import XCTest // //@MainActor //final class ProvidersTests: XCTestCase { // private var persistence: ProvidersPersistence! // // private var manager: ProviderManager! // // private var cancellables: Set = [] // // override func setUp() { // persistence = ProvidersPersistence(withName: "ProvidersTests", cloudKit: false, author: nil) // // let remoteStrategy = APIRemoteProvidersStrategy( // appBuild: 10000, // bundleServices: APIWebServices.bundledServices(withVersion: "v5"), // remoteServices: APIWebServices("v5", URL(string: "https://passepartoutvpn.app/api/")!, timeout: nil), // webServicesRepository: persistence.webServicesRepository() // ) // manager = ProviderManager( // localProvidersRepository: persistence.localProvidersRepository(), // remoteProvidersStrategy: remoteStrategy // ) //// persistence.truncate() // } // // override func tearDown() { //// persistence.truncate() // } // // func testFetchLocalIndex() throws { // let exp = expectation(description: "Local index") // // manager.fetchProvidersIndexPublisher(priority: .bundle) // .sink { // switch $0 { // case .finished: // exp.fulfill() // // case .failure(let error): // pp_log.error("Unable to load remote provider: \(error)") // exp.fulfill() // } // } receiveValue: { // pp_log.debug("Loaded index") // }.store(in: &cancellables) // // waitForExpectations(timeout: 10.0, handler: nil) // } // // func testFetchRemoteIndex() throws { // let exp = expectation(description: "Remote index") // // manager.fetchProvidersIndexPublisher(priority: .remote) // .sink { // switch $0 { // case .finished: // exp.fulfill() // // case .failure(let error): // pp_log.error("Unable to load remote provider: \(error)") // exp.fulfill() // } // } receiveValue: { // pp_log.debug("Loaded index") // }.store(in: &cancellables) // // waitForExpectations(timeout: 10.0, handler: nil) // } // // func testFetchRemoteProvider() async { // do { // try await manager.fetchProviderPublisher(withName: .hideme, vpnProtocol: .openVPN, priority: .remote).async() // pp_log.debug("Loaded provider") // } catch { // XCTFail("Unable to load remote provider: \(error)") // } // } // // func testListProviders() { // let providers = manager.allProviders() // providers.forEach { // pp_log.debug("\($0.name) -> \($0.fullName)") // } // } // // func testListCategories() async { // await fetchProvider(.surfshark) // let categories = manager.categories(.surfshark, vpnProtocol: .openVPN) // categories.forEach { // pp_log.debug("Category: \($0.name)") // $0.locations.forEach { // pp_log.debug("\t\($0)") // } // } // } // // func testListServers() async { // await fetchProvider(.nordvpn) // manager.allProviders().filter({ $0.name == .nordvpn }).forEach { // let location = ProviderLocation( // providerMetadata: $0, // vpnProtocol: .openVPN, // categoryName: "", // countryCode: "ES", // servers: nil // ) // // let servers = manager.servers(forLocation: location) // pp_log.debug("\($0.fullName): Servers [\(location.countryCode)] (\(servers.count)): \(servers)") // } // } // // func testServerId() async { // await fetchProvider(.nordvpn) // guard let server = manager.server(.nordvpn, vpnProtocol: .openVPN, apiId: "es143") else { // return // } // pp_log.debug(server) // } // // func testDefaultServer() async { // await fetchProvider(.protonvpn) // guard let server = manager.anyDefaultServer(.protonvpn, vpnProtocol: .openVPN) else { // return // } // pp_log.debug(server) // } // // func testServerUniqueId() async { // await fetchProvider(.nordvpn) // guard let server = manager.server(withId: "BEA03D24A5854DD17395057DEFBE7D6BEEA981227ACF8949E487443E6B5EF9C7") else { // return // } // pp_log.debug(server) // XCTAssertEqual(server.apiId, "es143") // } // // private func fetchProvider(_ name: ProviderName) async { // try? await manager.fetchProvidersIndexPublisher(priority: .bundle).async() // try? await manager.fetchProviderPublisher(withName: name, vpnProtocol: .openVPN, priority: .bundle).async() // } //}