From 560330d70ec433977e6d3e65036568a566eee497 Mon Sep 17 00:00:00 2001 From: Balazs Perlaki-Horvath Date: Sun, 15 Jun 2025 20:13:17 +0200 Subject: [PATCH] Add timeout expectations to LibraryRefreshViewModelTest --- Tests/LibraryRefreshViewModelTest.swift | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Tests/LibraryRefreshViewModelTest.swift b/Tests/LibraryRefreshViewModelTest.swift index e6af8b35..8db82fd6 100644 --- a/Tests/LibraryRefreshViewModelTest.swift +++ b/Tests/LibraryRefreshViewModelTest.swift @@ -17,6 +17,7 @@ import CoreData import XCTest import Defaults +import Combine @testable import Kiwix private class HTTPTestingURLProtocol: URLProtocol { @@ -37,6 +38,7 @@ private class HTTPTestingURLProtocol: URLProtocol { final class LibraryRefreshViewModelTest: XCTestCase { private var urlSession: URLSession? + private var cancellables = Set() override func setUpWithError() throws { let config = URLSessionConfiguration.ephemeral @@ -254,11 +256,34 @@ final class LibraryRefreshViewModelTest: XCTestCase { processFactory: { LibraryProcess(defaultState: .initial) }, defaults: testDefaults, categories: CategoriesToLanguages(withDefaults: testDefaults)) + + let expectationVMComplete = XCTestExpectation(description: "viewModel completed") + viewModel.$state.sink { value in + switch value { + case .complete: + expectationVMComplete.fulfill() + default: + break; + } + }.store(in: &cancellables) await viewModel.start(isUserInitiated: true) + await fulfillment(of: [expectationVMComplete], timeout: 2) + let zimFile1 = try XCTUnwrap(try context.fetch(ZimFile.fetchRequest()).first) // refresh library for the second time, which should replace the old zim file with a new one + let expectationVMComplete2 = XCTestExpectation(description: "viewModel completed") + viewModel.$state.sink { value in + switch value { + case .complete: + expectationVMComplete2.fulfill() + default: + break; + } + }.store(in: &cancellables) await viewModel.start(isUserInitiated: true) + await fulfillment(of: [expectationVMComplete2], timeout: 2) + var zimFiles = try context.fetch(ZimFile.fetchRequest()) XCTAssertEqual(zimFiles.count, 1) let zimFile2 = try XCTUnwrap(zimFiles.first)