field_ios

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

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 }