TeraRevisionTestBackend.swift (2530B)
1 import Foundation 2 @testable import TeraApp 3 4 extension AddBackend { 5 func saveRevisionIntent( 6 requestID: String, 7 target: TeraRevisionTarget, 8 replacement: TeraAddRuntimeInput 9 ) throws -> TeraRevisionStatus { 10 if values[requestID] != nil { 11 return try revisionStatus(operationID: requestID) 12 } 13 revisionPlans += 1 14 let id = requestID 15 let status = makeStatus( 16 id: id, 17 revision: 1, 18 kind: .add, 19 commandType: replacement.form.commandType, 20 form: replacement.form, 21 state: replacement.form.media.isEmpty ? .draft : .mediaPreparing, 22 updatedAt: 1_800_000_100_000, 23 media: [], 24 isRevision: true 25 ) 26 values[id] = status 27 if failRevisionReceipt { 28 failRevisionReceipt = false 29 throw unsupported() 30 } 31 return TeraRevisionStatus( 32 operationID: id, 33 replacement: status, 34 retraction: nil, 35 policy: target.sourceAddress == nil ? .replaceThenRetract : .addressableReplacement, 36 phase: .replacementPending 37 ) 38 } 39 40 func revisionSourceForm(card _: TeraTodayCard, sourceDraftID: String) throws -> TeraAddForm { 41 guard let form = try draftStatus(id: sourceDraftID).form else { throw unsupported() } 42 return form 43 } 44 45 func revisionStatus(operationID: String) throws -> TeraRevisionStatus { 46 let replacement = try draftStatus(id: operationID) 47 return TeraRevisionStatus( 48 operationID: operationID, 49 replacement: replacement, 50 retraction: nil, 51 policy: .addressableReplacement, 52 phase: replacement.state == .complete ? .complete : .replacementPending 53 ) 54 } 55 56 func advanceRevision(operationID: String) throws -> TeraRevisionStatus { 57 let current = try draftStatus(id: operationID) 58 let completed = replacing( 59 current, 60 revision: current.revision + 1, 61 state: .complete, 62 updatedAt: current.updatedAtUnixMilliseconds + 1 63 ) 64 values[operationID] = completed 65 return try revisionStatus(operationID: operationID) 66 } 67 68 func cancelRevision(operationID: String) throws -> TeraRevisionStatus { 69 let current = try draftStatus(id: operationID) 70 let cancelled = replacing( 71 current, 72 revision: current.revision + 1, 73 state: .cancelled, 74 updatedAt: current.updatedAtUnixMilliseconds + 1 75 ) 76 values[operationID] = cancelled 77 return TeraRevisionStatus( 78 operationID: operationID, 79 replacement: cancelled, 80 retraction: nil, 81 policy: .addressableReplacement, 82 phase: .cancelled 83 ) 84 } 85 }