field_ios

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

TeraEditingReplacementFFITests.swift (3231B)


      1 import Foundation
      2 @testable import TeraApp
      3 import XCTest
      4 
      5 @MainActor
      6 final class TeraEditingReplacementFFITests: XCTestCase {
      7   func testNewAndTypeReplacementPreserveAcknowledgedIncompleteEditingAcrossProductionRelaunch() async throws {
      8     let fixture = try MediaOwnershipFixture()
      9     defer { fixture.remove() }
     10     let signer = ComposerForbiddenSigner()
     11     let configuration = configuration(fixture, signer: signer)
     12     let client = TeraRuntimeClient.production()
     13     let snapshot = try await client.start(configuration: configuration)
     14     let store = TeraAddStore(runtimeClient: client)
     15     store.configure(snapshot: snapshot)
     16     await store.start()
     17     store.selectType(.createEvent)
     18     store.updateForm(\.eventStartDate, "2026-09-")
     19     store.updateForm(\.content, "  unfinished event  ")
     20     await store.save()
     21     let original = try XCTUnwrap(store.savedComposer)
     22     store.updateForm(\.content, "  final incomplete event  ")
     23     let exact = TeraComposerForm(editing: store.form)
     24     store.selectType(.createFoodAvailability)
     25     await TeraScopeFixtures.eventually { !store.protection.isWorking }
     26     XCTAssertFalse(store.protection.failed)
     27     XCTAssertEqual(store.form.commandType, .createFoodAvailability)
     28     let saved = try await client.loadComposer(scope: original.scope, id: original.id)
     29     XCTAssertEqual(saved.form, exact)
     30     XCTAssertGreaterThan(saved.revision, original.revision)
     31     store.updateForm(\.priceAmount, "1.")
     32     store.updateForm(\.quantity, "unfinished")
     33     await store.save()
     34     let second = try XCTUnwrap(store.savedComposer)
     35     XCTAssertNotEqual(second.id, original.id)
     36     store.updateForm(\.content, "incomplete availability")
     37     let availability = TeraComposerForm(editing: store.form)
     38     store.newDraft()
     39     await TeraScopeFixtures.eventually { !store.protection.isWorking }
     40     XCTAssertEqual(store.form.content, "")
     41     store.stop()
     42     _ = try await client.stop()
     43     _ = try await client.start(configuration: configuration)
     44     let firstRecovered = try await client.loadComposer(scope: saved.scope, id: saved.id)
     45     let secondRecovered = try await client.loadComposer(scope: second.scope, id: second.id)
     46     XCTAssertEqual(firstRecovered, saved)
     47     XCTAssertEqual(secondRecovered.form, availability)
     48     let operations = try await client.legacyDraftPage()
     49     XCTAssertTrue(operations.entries.isEmpty)
     50     let signingRequests = await signer.requests
     51     XCTAssertEqual(signingRequests, 0)
     52     _ = try await client.stop()
     53   }
     54 
     55   private func configuration(_ fixture: MediaOwnershipFixture, signer: ComposerForbiddenSigner) -> TeraRuntimeLaunchConfiguration {
     56     TeraRuntimeLaunchConfiguration(
     57       applicationSupportDirectory: fixture.root.path,
     58       publicKeyHex: "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
     59       sourceGenerationHex: String(repeating: "04", count: 32), sourceGenerationCreatedAtUnixMilliseconds: 1_800_000_000_000,
     60       protectedData: .available, networkProfile: .publicNetwork, writableRelays: [], blossom: nil,
     61       app: TeraRuntimeAppMetadata(bundleIdentifier: "test.editing", version: "1", buildNumber: "1", buildSHA: nil),
     62       signerGeneration: "editing-test", signer: signer, adoptBootstrapSettings: false
     63     )
     64   }
     65 }