TeraTodayReconciliationTaskTests.swift (2004B)
1 @testable import TeraApp 2 import XCTest 3 4 @MainActor 5 final class TeraTodayReconciliationTaskTests: XCTestCase { 6 func testCancelledPageWaiterCannotCancelMandatoryVisibilityRefresh() async { 7 let owner = TeraTodayReconciliationTask() 8 let pause = ResourceTestPause() 9 var refreshWasCancelled: Bool? 10 let refresh = Task { 11 await owner.run { 12 await pause.wait() 13 refreshWasCancelled = Task.isCancelled 14 } 15 } 16 await pause.entered.wait() 17 var waiting = false 18 let page = Task { waiting = true; await owner.wait() } 19 await TeraScopeFixtures.eventually { waiting } 20 page.cancel() 21 await pause.resume.open() 22 await refresh.value 23 await page.value 24 XCTAssertEqual(refreshWasCancelled, false) 25 } 26 27 func testPagingWaitsUntilReconciliationHasInstalledItsResult() async { 28 let owner = TeraTodayReconciliationTask() 29 let pause = ResourceTestPause() 30 var visible = "old" 31 let refresh = Task { await owner.run { await pause.wait(); visible = "current" } } 32 await pause.entered.wait() 33 var pageValue: String? 34 let page = Task { await owner.wait(); pageValue = visible } 35 XCTAssertNil(pageValue) 36 await pause.resume.open() 37 await refresh.value 38 await page.value 39 XCTAssertEqual(pageValue, "current") 40 } 41 42 func testOldCancellationCannotClearReplacementReconciliation() async { 43 let owner = TeraTodayReconciliationTask() 44 let old = ResourceTestPause() 45 let current = ResourceTestPause() 46 let oldTask = Task { await owner.run { await old.wait() } } 47 await old.entered.wait() 48 let newTask = Task { await owner.run { await current.wait() } } 49 await current.entered.wait() 50 await old.resume.open() 51 await oldTask.value 52 var completed = false 53 let waiting = Task { await owner.wait(); completed = true } 54 XCTAssertFalse(completed) 55 await current.resume.open() 56 await newTask.value 57 await waiting.value 58 XCTAssertTrue(completed) 59 owner.cancel() 60 await owner.wait() 61 } 62 }