TeraCoordinateAdmissionTests.swift (2686B)
1 import Foundation 2 @testable import TeraApp 3 import XCTest 4 5 @MainActor 6 final class TeraCoordinateAdmissionTests: XCTestCase { 7 func testHeldLegacyRequestRetainsEditingAndCannotResumeOrPublish() async throws { 8 let backend = try TeraScopeBackend() 9 var held = TeraScopeFixtures.draft("Retained captured form") 10 held.coordinateWritable = false 11 held.coordinateCaptured = true 12 await backend.setDrafts([held]) 13 let client = try await TeraScopeFixtures.client(backend) 14 let store = TeraAddStore(runtimeClient: client) 15 store.configure(snapshot: TeraScopeFixtures.snapshot()) 16 await store.start() 17 store.updateForm(\.content, "Current editing must survive") 18 await store.save() 19 let composer = try XCTUnwrap(store.savedComposer) 20 await store.retry(id: held.id) 21 XCTAssertEqual(store.form.content, "Current editing must survive") 22 XCTAssertEqual(store.savedComposer, composer) 23 XCTAssertEqual(store.message, TeraPublicationActionReason.coordinateChanged.explanation) 24 XCTAssertFalse(held.canAdvance) 25 XCTAssertFalse(held.canQueue) 26 XCTAssertFalse(held.isEditable) 27 var accepted: TeraDraftStatus? 28 let submission = TeraLegacySubmission( 29 runtimeClient: client, media: nil, revisionID: { nil }, initial: { held }, ensure: {}, 30 acceptDraft: { accepted = $0 }, acceptRevision: { _ in XCTFail("Held request cannot revise") }, 31 message: { XCTAssertEqual($0, held.honestSummary) }, refreshMedia: {} 32 ) 33 try await submission.submit() 34 XCTAssertEqual(accepted, held) 35 store.stop() 36 _ = try await client.stop() 37 } 38 39 func testCapturedCoordinateFreezesFormWhilePreservingTheSameRequestForContinuation() { 40 var captured = TeraScopeFixtures.draft("Captured form") 41 captured.coordinateCaptured = true 42 XCTAssertTrue(captured.coordinateWritable) 43 XCTAssertFalse(captured.isEditable) 44 XCTAssertTrue(captured.canQueue) 45 let summary = TeraLegacyDraftSummary( 46 id: captured.id, revision: captured.revision, kind: captured.kind, 47 commandType: captured.commandType, state: captured.state, hasForm: true, isRevision: false, 48 createdAtUnixMilliseconds: captured.createdAtUnixMilliseconds, 49 updatedAtUnixMilliseconds: captured.updatedAtUnixMilliseconds, mediaCount: 0, 50 verifiedMediaCount: 0, possibleOrphanCount: 0, settlement: captured.settlement, 51 coordinateWritable: false, coordinateCaptured: true 52 ) 53 XCTAssertFalse(summary.isEditable) 54 XCTAssertFalse(summary.canAdvance) 55 XCTAssertFalse(summary.canQueue) 56 XCTAssertEqual(summary.honestSummary, TeraPublicationActionReason.coordinateChanged.explanation) 57 XCTAssertEqual(summary.id, captured.id) 58 } 59 }