feat: Adds view route parsing tests.

This commit is contained in:
2025-01-20 10:51:07 -05:00
parent 2de85ed758
commit affd9b5d81
14 changed files with 552 additions and 59 deletions

View File

@@ -0,0 +1,101 @@
import Dependencies
import Foundation
import SharedModels
import Testing
import URLRouting
@Suite("EmployeeViewRouteTests")
struct EmployeeViewRouteTests {
let router = ViewRoute.router
@Test
func employeeCreate() throws {
var request = URLRequestData(
method: "POST",
path: "/employees",
body: .init("firstName=Blob&lastName=Esquire&active=true".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: "/employees/\(id)"
)
let route = try router.parse(&request)
#expect(
route == .employee(.delete(id: id))
)
}
@Test
func employeeForm() throws {
var request = URLRequestData(
method: "GET",
path: "/employees/create"
)
let route = try router.parse(&request)
#expect(
route == .employee(.form)
)
}
@Test
func employeeGet() throws {
let id = UUID(0)
var request = URLRequestData(
method: "GET",
path: "/employees/\(id)"
)
let route = try router.parse(&request)
#expect(
route == .employee(.get(id: id))
)
}
@Test
func employeeIndex() throws {
var request = URLRequestData(
method: "GET",
path: "/employees"
)
let route = try router.parse(&request)
#expect(
route == .employee(.index)
)
}
@Test
func employeeUpdate() throws {
let id = UUID(0)
var request = URLRequestData(
method: "PUT",
path: "/employees/\(id)",
body: .init("firstName=Blob&lastName=Esquire&active=true".utf8)
)
let route = try router.parse(&request)
#expect(
route == .employee(.update(
id: id,
updates: .init(firstName: "Blob", lastName: "Esquire", active: true)
))
)
}
@Test
func employeeSelect() throws {
var request = URLRequestData(
method: "GET",
path: "/employees/select",
query: ["context": ["purchaseOrderForm"]]
)
let route = try router.parse(&request)
#expect(route == .employee(.select(context: .purchaseOrderForm)))
}
}

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,129 @@
import Dependencies
import Foundation
import SharedModels
import Testing
import URLRouting
@Suite("PurchaseOrderViewRouteTests")
struct PurchaseOrderViewRouteTests {
let router = ViewRoute.router
@Test
func create() throws {
let id = UUID(0)
var request = URLRequestData(
method: "POST",
path: "/purchase-orders",
body: .init("id=1&workOrder=12345&materials=some&customer=Testy&truckStock=false&createdByID=\(id)&createdForID=\(id)&vendorBranchID=\(id)".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: "/purchase-orders/\(id)"
)
let route = try router.parse(&request)
#expect(route == .purchaseOrder(.delete(id: id)))
}
@Test
func form() throws {
var request = URLRequestData(
method: "GET",
path: "/purchase-orders/create"
)
let route = try router.parse(&request)
#expect(route == .purchaseOrder(.form))
}
@Test
func get() throws {
let id = 1
var request = URLRequestData(
method: "GET",
path: "/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: "/purchase-orders"
)
let route = try router.parse(&request)
#expect(route == .purchaseOrder(.index))
}
@Test
func page() throws {
var request = URLRequestData(
method: "GET",
path: "/purchase-orders/next"
)
let route = try router.parse(&request)
#expect(route == .purchaseOrder(.page(page: 1, limit: 25)))
var request2 = URLRequestData(
method: "GET",
path: "/purchase-orders/next",
query: ["page": ["2"], "limit": ["50"]]
)
let route2 = try router.parse(&request2)
#expect(route2 == .purchaseOrder(.page(page: 2, limit: 50)))
}
@Test
func searchIndex() throws {
var request = URLRequestData(
method: "GET",
path: "/purchase-orders/search",
query: ["context": ["customer"]]
)
let route = try router.parse(&request)
#expect(route == .purchaseOrder(.search(.index(context: .customer, table: nil))))
var request2 = URLRequestData(
method: "GET",
path: "/purchase-orders/search"
)
let route2 = try router.parse(&request2)
#expect(route2 == .purchaseOrder(.search(.index(context: .employee, table: nil))))
var request3 = URLRequestData(
method: "GET",
path: "/purchase-orders/search",
query: ["context": ["vendor"], "table": ["true"]]
)
let route3 = try router.parse(&request3)
#expect(route3 == .purchaseOrder(.search(.index(context: .vendor, table: true))))
}
@Test
func searchPost() throws {
let id = UUID(0)
var request = URLRequestData(
method: "POST",
path: "/purchase-orders/search",
body: .init("context=employee&createdForID=\(id)".utf8)
)
let route = try router.parse(&request)
#expect(route == .purchaseOrder(.search(.request(.init(context: .employee, createdForID: id)))))
}
}

View File

@@ -0,0 +1,81 @@
import Dependencies
import Foundation
import SharedModels
import Testing
import URLRouting
@Suite("UserViewRouteTests")
struct UserViewRouteTests {
let router = ViewRoute.router
@Test
func create() throws {
var request = URLRequestData(
method: "POST",
path: "/users",
body: .init("username=foo&email=foo@bar.com&password=super-secret&confirmPassword=super-secret".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: "/users/\(id)"
)
let route = try router.parse(&request)
#expect(route == .user(.delete(id: id)))
}
@Test
func form() throws {
var request = URLRequestData(
method: "GET",
path: "/users/create"
)
let route = try router.parse(&request)
#expect(route == .user(.form))
}
@Test
func get() throws {
let id = UUID(0)
var request = URLRequestData(
method: "GET",
path: "/users/\(id)"
)
let route = try router.parse(&request)
#expect(route == .user(.get(id: id)))
}
@Test
func index() throws {
var request = URLRequestData(
method: "GET",
path: "/users"
)
let route = try router.parse(&request)
#expect(route == .user(.index))
}
@Test
func update() throws {
let id = UUID(0)
var request = URLRequestData(
method: "PATCH",
path: "/users/\(id)",
body: .init("username=bar&email=bar@foo.com".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,45 @@
import Dependencies
import Foundation
import SharedModels
import Testing
import URLRouting
@Suite("VendorBranchViewRouteTests")
struct VendorBranchViewRouteTests {
let router = ViewRoute.router
@Test
func create() throws {
let id = UUID(0)
var request = URLRequestData(
method: "POST",
path: "/vendors/branches",
body: .init("name=Test&vendorID=\(id)".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: "/vendors/branches/\(id)"
)
let route = try router.parse(&request)
#expect(route == .vendorBranch(.delete(id: id)))
}
@Test
func select() throws {
var request = URLRequestData(
method: "GET",
path: "/vendors/branches/select",
query: ["context": ["purchaseOrderForm"]]
)
let route = try router.parse(&request)
#expect(route == .vendorBranch(.select(context: .purchaseOrderForm)))
}
}

View File

@@ -0,0 +1,75 @@
import Dependencies
import Foundation
import SharedModels
import Testing
import URLRouting
@Suite("VendorViewRouteTests")
struct VendorViewRouteTests {
let router = ViewRoute.router
@Test
func create() throws {
var request = URLRequestData(
method: "POST",
path: "/vendors",
body: .init("name=Test".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: "/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: "/vendors/\(id)"
)
let route = try router.parse(&request)
#expect(route == .vendor(.get(id: id)))
}
@Test
func form() throws {
var request = URLRequestData(
method: "GET",
path: "/vendors/create"
)
let route = try router.parse(&request)
#expect(route == .vendor(.form))
}
@Test
func index() throws {
var request = URLRequestData(
method: "GET",
path: "/vendors"
)
let route = try router.parse(&request)
#expect(route == .vendor(.index))
}
@Test
func update() throws {
let id = UUID(0)
var request = URLRequestData(
method: "PUT",
path: "/vendors/\(id)",
body: .init("name=Test".utf8)
)
let route = try router.parse(&request)
#expect(route == .vendor(.update(id: id, updates: .init(name: "Test"))))
}
}