77 lines
1.9 KiB
Swift
77 lines
1.9 KiB
Swift
import DatabaseClient
|
|
import Dependencies
|
|
import Foundation
|
|
import ManualDCore
|
|
import Testing
|
|
|
|
@testable import DatabaseClient
|
|
|
|
@Suite
|
|
struct UserDatabaseTests {
|
|
|
|
@Test
|
|
func createUser() async throws {
|
|
try await withDatabase {
|
|
@Dependency(\.database.users) var users
|
|
|
|
let user = try await users.create(
|
|
.init(email: "testy@example.com", password: "super-secret", confirmPassword: "super-secret")
|
|
)
|
|
|
|
#expect(user.email == "testy@example.com")
|
|
|
|
// Test login the user in
|
|
let token = try await users.login(
|
|
.init(email: "testy@example.com", password: "super-secret")
|
|
)
|
|
// Test logging out
|
|
try await users.logout(token.id)
|
|
|
|
try await users.delete(user.id)
|
|
|
|
let shouldBeNilUser = try await users.get(user.id)
|
|
#expect(shouldBeNilUser == nil)
|
|
|
|
}
|
|
}
|
|
|
|
@Test
|
|
func createUserFails() async throws {
|
|
try await withDatabase {
|
|
@Dependency(\.database.users) var users
|
|
|
|
await #expect(throws: ValidationError.self) {
|
|
try await users.create(.init(email: "", password: "", confirmPassword: ""))
|
|
}
|
|
|
|
await #expect(throws: ValidationError.self) {
|
|
try await users.create(.init(email: "testy@example.com", password: "", confirmPassword: ""))
|
|
}
|
|
|
|
await #expect(throws: ValidationError.self) {
|
|
try await users.create(
|
|
.init(email: "testy@example.com", password: "super-secret", confirmPassword: ""))
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
func deleteFailsWithInvalidUserID() async throws {
|
|
try await withDatabase {
|
|
@Dependency(\.database.users) var users
|
|
await #expect(throws: NotFoundError.self) {
|
|
try await users.delete(UUID(0))
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
func logoutIgnoresUnfoundTokenID() async throws {
|
|
try await withDatabase {
|
|
@Dependency(\.database.users) var users
|
|
try await users.logout(UUID(0))
|
|
}
|
|
}
|
|
|
|
}
|