This repository has been archived on 2026-02-12. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
swift-duct-calc/Tests/DatabaseClientTests/EquivalentLengthTests.swift
Michael Housh 9276f88426
All checks were successful
CI / Linux Tests (push) Successful in 6m28s
feat: Updates to use swift-validations for database.
2026-02-01 00:55:44 -05:00

124 lines
3.6 KiB
Swift

import Dependencies
import Foundation
import ManualDCore
import Testing
@testable import DatabaseClient
@Suite
struct EquivalentLengthTests {
@Test
func happyPath() async throws {
try await withTestUserAndProject { user, project in
@Dependency(\.database.equivalentLengths) var equivalentLengths
let equivalentLength = try await equivalentLengths.create(
.init(
projectID: project.id,
name: "Test",
type: .supply,
straightLengths: [10],
groups: [
.init(group: 1, letter: "a", value: 20),
.init(group: 2, letter: "a", value: 30, quantity: 2),
]
)
)
let fetched = try await equivalentLengths.fetch(project.id)
#expect(fetched == [equivalentLength])
let got = try await equivalentLengths.get(equivalentLength.id)
#expect(got == equivalentLength)
var max = try await equivalentLengths.fetchMax(project.id)
#expect(max.supply == equivalentLength)
#expect(max.return == nil)
let returnLength = try await equivalentLengths.create(
.init(
projectID: project.id,
name: "Test",
type: .return,
straightLengths: [10],
groups: [
.init(group: 1, letter: "a", value: 20),
.init(group: 2, letter: "a", value: 30, quantity: 2),
]
)
)
max = try await equivalentLengths.fetchMax(project.id)
#expect(max.supply == equivalentLength)
#expect(max.return == returnLength)
let updated = try await equivalentLengths.update(
equivalentLength.id, .init(name: "Supply Test")
)
#expect(updated.name == "Supply Test")
#expect(updated.id == equivalentLength.id)
try await equivalentLengths.delete(equivalentLength.id)
}
}
@Test
func notFound() async throws {
try await withDatabase {
@Dependency(\.database.equivalentLengths) var equivalentLengths
await #expect(throws: NotFoundError.self) {
try await equivalentLengths.delete(UUID(0))
}
await #expect(throws: NotFoundError.self) {
try await equivalentLengths.update(UUID(0), .init())
}
}
}
@Test(
arguments: [
EquivalentLength.Create(
projectID: UUID(0), name: "", type: .return, straightLengths: [], groups: []
),
EquivalentLength.Create(
projectID: UUID(0), name: "Testy", type: .return, straightLengths: [-1, 1], groups: []
),
EquivalentLength.Create(
projectID: UUID(0), name: "Testy", type: .return, straightLengths: [1, -1], groups: []
),
EquivalentLength.Create(
projectID: UUID(0), name: "Testy", type: .return, straightLengths: [1, 1],
groups: [
.init(group: -1, letter: "a", value: 1.0, quantity: 1)
]
),
EquivalentLength.Create(
projectID: UUID(0), name: "Testy", type: .return, straightLengths: [1, 1],
groups: [
.init(group: 1, letter: "1", value: 1.0, quantity: 1)
]
),
EquivalentLength.Create(
projectID: UUID(0), name: "Testy", type: .return, straightLengths: [1, 1],
groups: [
.init(group: 1, letter: "a", value: -1.0, quantity: 1)
]
),
EquivalentLength.Create(
projectID: UUID(0), name: "Testy", type: .return, straightLengths: [1, 1],
groups: [
.init(group: 1, letter: "a", value: 1.0, quantity: -1)
]
),
]
)
func validations(model: EquivalentLength.Create) {
#expect(throws: (any Error).self) {
try model.toModel().validate()
}
}
}