field_ios

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

TeraCapacityRecoveryTests.swift (3452B)


      1 import RadrootsKit
      2 @testable import TeraApp
      3 import XCTest
      4 
      5 final class TeraCapacityRecoveryTests: XCTestCase {
      6   func testTypedNativeCapacityAndReceiptQuotaRemainDistinctAndNeverPromiseSavedEditing() {
      7     let capacity: [Error] = [RadrootsAppleFileError.spaceInsufficient, RadrootsCaptureIntakeError.spaceInsufficient, RadrootsBackgroundTransferError.spaceInsufficient]
      8     for error in capacity {
      9       XCTAssertEqual(TeraUserMessages.key(for: error, fallback: .fileOperationFailed), .storageFull)
     10       XCTAssertEqual(TeraNativeRecoveryClassification.pause(error), .quota)
     11     }
     12     let quota = RadrootsBackgroundTransferError.receiptCapacityExceeded
     13     XCTAssertEqual(TeraUserMessages.key(for: quota, fallback: .fileOperationFailed), .receiptCapacityExceeded)
     14     XCTAssertEqual(TeraNativeRecoveryClassification.pause(quota), .receiptQuota)
     15     XCTAssertTrue(TeraUserMessages.text(.receiptCapacityExceeded).contains("does not resolve"))
     16     XCTAssertTrue(TeraUserMessages.text(.storageFull).contains("check the original work before retrying"))
     17     XCTAssertTrue(TeraUserMessages.text(.storageFull).contains("Saving may be unavailable"))
     18     for pause in [TeraNativeRecoveryPause.quota, .receiptQuota, .storageUnavailable] {
     19       XCTAssertFalse(pause.message.contains("Saved editing is still available"))
     20       XCTAssertTrue(pause.message.contains("new saves may be unavailable"))
     21     }
     22   }
     23 
     24   @MainActor
     25   func testCacheCleanupAdmissionSurvivesStopAndLateResultsCannotOverwritePresentation() async throws {
     26     let backend = try TeraScopeBackend()
     27     let client = try await TeraScopeFixtures.client(backend)
     28     let store = TeraSettingsStore(runtimeClient: client)
     29     let context = TeraLocalNetwork.defaultContext(snapshot: TeraScopeFixtures.snapshot())
     30     let pause = await backend.pause(.cacheCleanup)
     31     let owner = Task { await store.cleanupMediaCache(context: context) }
     32     await pause.entered.wait()
     33     store.stop()
     34     await store.cleanupMediaCache(context: context)
     35     let firstCount = await backend.counts[.cacheCleanup]
     36     XCTAssertEqual(firstCount, 1)
     37     await pause.resume.open()
     38     await owner.value
     39     XCTAssertNil(store.message)
     40     await store.cleanupMediaCache(context: context)
     41     let secondCount = await backend.counts[.cacheCleanup]
     42     XCTAssertEqual(secondCount, 2)
     43     XCTAssertTrue(store.message?.contains("1 shared or unverified") == true)
     44     XCTAssertFalse(store.message?.contains("bytes freed") == true)
     45     _ = try await client.stop()
     46   }
     47 
     48   @MainActor
     49   func testFailedCacheCleanupDoesNotReportSuccessOrDiscardEditing() async throws {
     50     let backend = try TeraScopeBackend()
     51     let client = try await TeraScopeFixtures.client(backend)
     52     let store = TeraSettingsStore(runtimeClient: client)
     53     store.profileName = "Unsaved profile"
     54     let context = TeraLocalNetwork.defaultContext(snapshot: TeraScopeFixtures.snapshot())
     55     let failure = TeraRuntimeFailure.local(operation: "test", code: "storage_space_insufficient", safeMessage: "space")
     56     let pause = await backend.pause(.cacheCleanup, failure: failure)
     57     let owner = Task { await store.cleanupMediaCache(context: context) }
     58     await pause.entered.wait()
     59     await pause.resume.open()
     60     await owner.value
     61     XCTAssertEqual(store.profileName, "Unsaved profile")
     62     XCTAssertEqual(store.failureCode, "storage_space_insufficient")
     63     XCTAssertEqual(store.message, TeraUserMessages.text(.storageFull))
     64     _ = try await client.stop()
     65   }
     66 }