import Dependencies import Foundation import SharedModels import Testing import URLRouting @Suite("UserApiRouteTests") struct UserApiRouteTests { let router = SiteRoute.Api.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 resetPassword() throws { let id = UUID(0) let json = """ { \"password\": \"super-secret\", \"confirmPassword\": \"super-secret\" } """ var request = URLRequestData( method: "PATCH", path: "/api/v1/users/\(id)/reset-password", body: .init(json.utf8) ) let route = try router.parse(&request) #expect(route == .user(.resetPassword( id: id, request: .init(password: "super-secret", confirmPassword: "super-secret") ))) } @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")))) } }