TeraSubmissionFormTests.swift (1894B)
1 import Foundation 2 @testable import TeraApp 3 import XCTest 4 5 extension TeraAddStoreTests { 6 @MainActor 7 func testAllFiveFormsCompleteWithFrozenSubmissionsAndContinuedEditing() async throws { 8 let backend = AddBackend() 9 let client = try await Self.startedClient(backend) 10 let store = TeraAddStore( 11 runtimeClient: client, 12 media: AddMediaHarness() 13 ) 14 await store.configure(snapshot: backend.snapshot()) 15 await store.start() 16 17 for type in TeraAddCommandType.allCases { 18 store.newDraft(type: type) 19 await TeraScopeFixtures.eventually { !store.protection.isWorking } 20 configure(store, type: type) 21 if type == .createPhotoUpdate { 22 await store.importPhotos() 23 XCTAssertEqual(store.form.media.count, 1) 24 XCTAssertNil(store.form.media.first?.remoteURL) 25 } 26 await store.submit() 27 XCTAssertEqual(store.submissions.status?.captured.form.commandType, type) 28 XCTAssertEqual(store.submissions.status?.state, .complete) 29 XCTAssertEqual(store.submissions.status?.captured.form.editingValue, store.form) 30 if type == .createPhotoUpdate { 31 XCTAssertEqual( 32 store.submissions.status?.preparedMedia.first?.remoteURL, 33 "http://127.0.0.1:3000/\(String(repeating: "0", count: 64)).png" 34 ) 35 let didUpload = await backend.submissionBackend.uploadCount > 0 36 XCTAssertTrue(didUpload) 37 } 38 } 39 40 let frozen = try XCTUnwrap(store.submissions.status) 41 store.updateForm(\.content, "mutated after submit") 42 XCTAssertEqual(store.form.content, "mutated after submit") 43 XCTAssertEqual(store.submissions.status, frozen) 44 XCTAssertTrue(store.isFormEditable) 45 XCTAssertNil(store.activeDraft) 46 XCTAssertTrue(store.drafts.isEmpty) 47 let count = await backend.submissionBackend.prepareCount 48 XCTAssertEqual(count, 5) 49 _ = try await client.stop() 50 } 51 }