field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | README | LICENSE

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 }