feat: Adds api route tests. Tested user interface works as expected, still needs some work on vendors form.

This commit is contained in:
2025-01-20 16:44:12 -05:00
parent affd9b5d81
commit 410bbae1c8
23 changed files with 537 additions and 121 deletions

View File

@@ -0,0 +1,93 @@
import Dependencies
import Foundation
import SharedModels
import Testing
import URLRouting
@Suite("EmployeeApiRouteTests")
struct EmployeeApiRouteTests {
let router = ApiRoute.router
@Test
func employeeCreate() throws {
let json = """
{
\"firstName\": \"Blob\",
\"lastName\": \"Esquire\",
\"active\": true
}
"""
var request = URLRequestData(
method: "POST",
path: "/api/v1/employees",
body: .init(json.utf8)
)
let route = try router.parse(&request)
#expect(
route == .employee(.create(.init(firstName: "Blob", lastName: "Esquire", active: true)))
)
}
@Test
func employeeDelete() throws {
let id = UUID(0)
var request = URLRequestData(
method: "DELETE",
path: "/api/v1/employees/\(id)"
)
let route = try router.parse(&request)
#expect(
route == .employee(.delete(id: id))
)
}
@Test
func employeeGet() throws {
let id = UUID(0)
var request = URLRequestData(
method: "GET",
path: "/api/v1/employees/\(id)"
)
let route = try router.parse(&request)
#expect(
route == .employee(.get(id: id))
)
}
@Test
func employeeIndex() throws {
var request = URLRequestData(
method: "GET",
path: "/api/v1/employees"
)
let route = try router.parse(&request)
#expect(
route == .employee(.index)
)
}
@Test
func employeeUpdate() throws {
let id = UUID(0)
let json = """
{
\"firstName\": \"Blob\",
\"lastName\": \"Esquire\",
\"active\": true
}
"""
var request = URLRequestData(
method: "PUT",
path: "/api/v1/employees/\(id)",
body: .init(json.utf8)
)
let route = try router.parse(&request)
#expect(
route == .employee(.update(
id: id,
updates: .init(firstName: "Blob", lastName: "Esquire", active: true)
))
)
}
}

View File

@@ -0,0 +1,32 @@
import Dependencies
import Foundation
import SharedModels
import Testing
import URLRouting
// @Suite("LoginViewRouteTests")
// struct LoginViewRouteTests {
// let router = ViewRoute.router
//
// @Test
// func get() throws {
// var request = URLRequestData(
// method: "GET",
// path: "/login",
// query: ["next": ["/users"]]
// )
// let route = try router.parse(&request)
// #expect(route == .login(.index(next: "/users")))
// }
//
// @Test
// func post() throws {
// var request = URLRequestData(
// method: "POST",
// path: "/login",
// body: .init("username=foo&password=super-secret&next=/users".utf8)
// )
// let route = try router.parse(&request)
// #expect(route == .login(.post(.init(username: "foo", password: "super-secret", next: "/users"))))
// }
// }

View File

@@ -0,0 +1,93 @@
import Dependencies
import Foundation
import SharedModels
import Testing
import URLRouting
@Suite("PurchaseOrderApiRouteTests")
struct PurchaseOrderApiRouteTests {
let router = ApiRoute.router
@Test
func create() throws {
let id = UUID(0)
let json = """
{
\"id\": 1,
\"workOrder\": 12345,
\"materials\": \"some\",
\"customer\": \"Testy\",
\"truckStock\": false,
\"createdByID\": \"\(id)\",
"createdForID\": \"\(id)\",
"vendorBranchID\": \"\(id)\"
}
"""
var request = URLRequestData(
method: "POST",
path: "/api/v1/purchase-orders",
body: .init(json.utf8)
)
let route = try router.parse(&request)
#expect(route == .purchaseOrder(.create(.init(
id: 1,
workOrder: 12345,
materials: "some",
customer: "Testy",
truckStock: false,
createdByID: id,
createdForID: id,
vendorBranchID: id
))))
}
@Test
func delete() throws {
let id = 1
var request = URLRequestData(
method: "DELETE",
path: "/api/v1/purchase-orders/\(id)"
)
let route = try router.parse(&request)
#expect(route == .purchaseOrder(.delete(id: id)))
}
@Test
func get() throws {
let id = 1
var request = URLRequestData(
method: "GET",
path: "/api/v1/purchase-orders/\(id)"
)
let route = try router.parse(&request)
#expect(route == .purchaseOrder(.get(id: id)))
}
@Test
func index() throws {
var request = URLRequestData(
method: "GET",
path: "/api/v1/purchase-orders"
)
let route = try router.parse(&request)
#expect(route == .purchaseOrder(.index))
}
@Test
func page() throws {
var request = URLRequestData(
method: "GET",
path: "/api/v1/purchase-orders/next"
)
let route = try router.parse(&request)
#expect(route == .purchaseOrder(.page(page: 1, limit: 25)))
var request2 = URLRequestData(
method: "GET",
path: "/api/v1/purchase-orders/next",
query: ["page": ["2"], "limit": ["50"]]
)
let route2 = try router.parse(&request2)
#expect(route2 == .purchaseOrder(.page(page: 2, limit: 50)))
}
}

View File

@@ -0,0 +1,85 @@
import Dependencies
import Foundation
import SharedModels
import Testing
import URLRouting
@Suite("UserApiRouteTests")
struct UserApiRouteTests {
let router = ApiRoute.router
@Test
func create() throws {
let json = """
{
\"username\": \"foo\",
\"email\": \"foo@bar.com\",
\"password\": \"super-secret\",
\"confirmPassword\": \"super-secret\"
}
"""
var request = URLRequestData(
method: "POST",
path: "/api/v1/users",
body: .init(json.utf8)
)
let route = try router.parse(&request)
#expect(
route == .user(.create(.init(
username: "foo",
email: "foo@bar.com",
password: "super-secret",
confirmPassword: "super-secret"
))))
}
@Test
func delete() throws {
let id = UUID(0)
var request = URLRequestData(
method: "DELETE",
path: "/api/v1/users/\(id)"
)
let route = try router.parse(&request)
#expect(route == .user(.delete(id: id)))
}
@Test
func get() throws {
let id = UUID(0)
var request = URLRequestData(
method: "GET",
path: "/api/v1/users/\(id)"
)
let route = try router.parse(&request)
#expect(route == .user(.get(id: id)))
}
@Test
func index() throws {
var request = URLRequestData(
method: "GET",
path: "/api/v1/users"
)
let route = try router.parse(&request)
#expect(route == .user(.index))
}
@Test
func update() throws {
let id = UUID(0)
let json = """
{
\"username\": \"bar\",
\"email\": \"bar@foo.com\"
}
"""
var request = URLRequestData(
method: "PATCH",
path: "/api/v1/users/\(id)",
body: .init(json.utf8)
)
let route = try router.parse(&request)
#expect(route == .user(.update(id: id, updates: .init(username: "bar", email: "bar@foo.com"))))
}
}

View File

@@ -0,0 +1,83 @@
import Dependencies
import Foundation
import SharedModels
import Testing
import URLRouting
@Suite("VendorApiRouteTests")
struct VendorApiRouteTests {
let router = ApiRoute.router
@Test
func create() throws {
let json = """
{
\"name\": \"Test\"
}
"""
var request = URLRequestData(
method: "POST",
path: "/api/v1/vendors",
body: .init(json.utf8)
)
let route = try router.parse(&request)
#expect(route == .vendor(.create(.init(name: "Test"))))
}
@Test
func delete() throws {
let id = UUID(0)
var request = URLRequestData(
method: "DELETE",
path: "/api/v1/vendors/\(id)"
)
let route = try router.parse(&request)
#expect(route == .vendor(.delete(id: id)))
}
@Test
func get() throws {
let id = UUID(0)
var request = URLRequestData(
method: "GET",
path: "/api/v1/vendors/\(id)"
)
let route = try router.parse(&request)
#expect(route == .vendor(.get(id: id)))
}
@Test
func index() throws {
var request = URLRequestData(
method: "GET",
path: "/api/v1/vendors"
)
let route = try router.parse(&request)
#expect(route == .vendor(.index()))
var request2 = URLRequestData(
method: "GET",
path: "/api/v1/vendors",
query: ["branches": ["true"]]
)
let route2 = try router.parse(&request2)
#expect(route2 == .vendor(.index(withBranches: true)))
}
@Test
func update() throws {
let id = UUID(0)
let json = """
{
\"name\": \"Test\"
}
"""
var request = URLRequestData(
method: "PUT",
path: "/api/v1/vendors/\(id)",
body: .init(json.utf8)
)
let route = try router.parse(&request)
#expect(route == .vendor(.update(id: id, updates: .init(name: "Test"))))
}
}

View File

@@ -0,0 +1,87 @@
import Dependencies
import Foundation
import SharedModels
import Testing
import URLRouting
@Suite("VendorBranchApiRouteTests")
struct VendorBranchApiRouteTests {
let router = ApiRoute.router
@Test
func create() throws {
let id = UUID(0)
let json = """
{
\"name\": \"Test\",
\"vendorID\": \"\(id)\"
}
"""
var request = URLRequestData(
method: "POST",
path: "/api/v1/vendors/branches",
body: .init(json.utf8)
)
let route = try router.parse(&request)
#expect(route == .vendorBranch(.create(.init(name: "Test", vendorID: id))))
}
@Test
func delete() throws {
let id = UUID(0)
var request = URLRequestData(
method: "DELETE",
path: "/api/v1/vendors/branches/\(id)"
)
let route = try router.parse(&request)
#expect(route == .vendorBranch(.delete(id: id)))
}
@Test
func get() throws {
let id = UUID(0)
var request = URLRequestData(
method: "GET",
path: "/api/v1/vendors/branches/\(id)"
)
let route = try router.parse(&request)
#expect(route == .vendorBranch(.get(id: id)))
}
@Test
func index() throws {
let id = UUID(0)
var request = URLRequestData(
method: "GET",
path: "/api/v1/vendors/branches"
)
let route = try router.parse(&request)
#expect(route == .vendorBranch(.index()))
var request2 = URLRequestData(
method: "GET",
path: "/api/v1/vendors/branches",
query: ["vendorID": ["\(id)"]]
)
let route2 = try router.parse(&request2)
#expect(route2 == .vendorBranch(.index(for: id)))
}
@Test
func update() throws {
let id = UUID(0)
let json = """
{
\"name\": \"Test\"
}
"""
var request = URLRequestData(
method: "PUT",
path: "/api/v1/vendors/branches/\(id)",
body: .init(json.utf8)
)
let route = try router.parse(&request)
#expect(route == .vendorBranch(.update(id: id, updates: .init(name: "Test"))))
}
}