feat: Working on mocks and mock storage.
This commit is contained in:
@@ -22,3 +22,74 @@ extension PurchaseOrder.Create: Content {}
|
||||
extension DatabaseClient.PurchaseOrders: TestDependencyKey {
|
||||
public static let testValue: DatabaseClient.PurchaseOrders = Self()
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
typealias PurchaseOrderMockStorage = MockStorage<
|
||||
PurchaseOrder,
|
||||
PurchaseOrder.Create,
|
||||
Void,
|
||||
Void,
|
||||
Void
|
||||
>
|
||||
|
||||
public extension DependencyValues {
|
||||
var purchaseOrderID: PurchaseOrderIDGenerator {
|
||||
get { self[PurchaseOrderIDGenerator.self] }
|
||||
set { self[PurchaseOrderIDGenerator.self] = newValue }
|
||||
}
|
||||
}
|
||||
|
||||
@DependencyClient
|
||||
public struct PurchaseOrderIDGenerator: Sendable {
|
||||
var nextID: @Sendable () async throws -> Int
|
||||
}
|
||||
|
||||
extension PurchaseOrderIDGenerator: DependencyKey {
|
||||
public static let testValue: PurchaseOrderIDGenerator = .liveValue
|
||||
|
||||
public static var liveValue: Self {
|
||||
let counter = Counter()
|
||||
return .init(nextID: { await counter.nextID() })
|
||||
}
|
||||
|
||||
actor Counter {
|
||||
private var count: Int
|
||||
|
||||
init(starting: Int = 1) {
|
||||
self.count = starting
|
||||
}
|
||||
|
||||
func nextID() async -> Int {
|
||||
count += 1
|
||||
return count
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// private extension PurchaseOrderMockStorage {
|
||||
// static func make(_ mocks: [PurchaseOrder]) -> Self {
|
||||
// @Dependency(\.date.now) var now
|
||||
// @Dependency(\.purchaseOrderID) var purchaseOrderID
|
||||
//
|
||||
// return .init(
|
||||
// mocks,
|
||||
// create: { model in
|
||||
// try await PurchaseOrder(
|
||||
// id: purchaseOrderID.nextID(),
|
||||
// workOrder: model.workOrder,
|
||||
// materials: model.materials,
|
||||
// customer: model.customer,
|
||||
// truckStock: model.truckStock,
|
||||
// createdBy: model.createdForID,
|
||||
// createdFor: model.createdForID,
|
||||
// vendorBranch: .i
|
||||
//
|
||||
// )
|
||||
// },
|
||||
// update: { _, _ in
|
||||
// fatalError()
|
||||
// }
|
||||
// )
|
||||
// }
|
||||
// }
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user