feat: Adds api route tests.

This commit is contained in:
2025-12-29 10:36:31 -05:00
parent 6bc6a7d7fa
commit dce358d85e
7 changed files with 202 additions and 10 deletions

View File

@@ -0,0 +1,53 @@
import Foundation
public struct Project: Codable, Equatable, Identifiable, Sendable {
public let id: UUID
public let name: String
public let streetAddress: String
public let city: String
public let state: String
public let zipCode: String
public init(
id: UUID,
name: String,
streetAddress: String,
city: String,
state: String,
zipCode: String
) {
self.id = id
self.name = name
self.streetAddress = streetAddress
self.city = city
self.state = state
self.zipCode = zipCode
}
}
extension Project {
public struct Create: Codable, Equatable, Sendable {
public let name: String
public let streetAddress: String
public let city: String
public let state: String
public let zipCode: String
public init(
name: String,
streetAddress: String,
city: String,
state: String,
zipCode: String
) {
self.name = name
self.streetAddress = streetAddress
self.city = city
self.state = state
self.zipCode = zipCode
}
}
}

View File

@@ -6,12 +6,60 @@ extension SiteRoute {
/// Represents api routes.
///
/// The routes return json as opposed to view routes that return html.
public enum Api {
public enum Api: Sendable, Equatable {
case project(Self.ProjectRoute)
public static let rootPath = Path {
"api"
"v1"
}
public static let router = OneOf {
Route(.case(Self.project)) {
rootPath
ProjectRoute.router
}
}
}
}
extension SiteRoute.Api {
public enum ProjectRoute: Sendable, Equatable {
case create(Project.Create)
case delete(id: Project.ID)
case get(id: Project.ID)
case index
static let rootPath = "projects"
public static let router = OneOf {
Route(.case(Self.create)) {
Path { rootPath }
Method.post
Body(.json(Project.Create.self))
}
Route(.case(Self.delete(id:))) {
Path {
rootPath
Project.ID.parser()
}
Method.delete
}
Route(.case(Self.get(id:))) {
Path {
rootPath
Project.ID.parser()
}
Method.get
}
Route(.case(Self.index)) {
Path { rootPath }
Method.get
}
}
}
}

View File

@@ -2,5 +2,13 @@ import CasePathsCore
import Foundation
@preconcurrency import URLRouting
public enum SiteRoute {
public enum SiteRoute: Equatable, Sendable {
case api(Self.Api)
public static let router = OneOf {
Route(.case(Self.api)) {
SiteRoute.Api.router
}
}
}

View File

@@ -0,0 +1,12 @@
import CasePathsCore
import Foundation
@preconcurrency import URLRouting
extension SiteRoute {
/// Represents view routes.
///
/// The routes return html.
public enum View {
}
}