Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 43 additions & 63 deletions Tests/FluentTests/OperatorTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,61 @@ import Fluent
import Testing
import Vapor
import VaporTesting
import XCTFluent

@Suite
struct OperatorTests {
@Test
func customOperators() throws {
// TODO: What does this test...?
let db = DummyDatabase()

// name contains string anywhere, prefix, suffix
_ = Planet.query(on: db)
.filter(\.$name ~~ "art")
_ = Planet.query(on: db)
.filter(\.$name =~ "art")
_ = Planet.query(on: db)
.filter(\.$name ~= "art")
#expect(
Planet.query(on: db)
.filter(\.$name ~~ "art").query.description
== #"query read planets filters=[planets[name] contains "art"]"#
)
#expect(
Planet.query(on: db)
.filter(\.$name =~ "art").query.description
== #"query read planets filters=[planets[name] startswith "art"]"#
)
#expect(
Planet.query(on: db)
.filter(\.$name ~= "art").query.description
== #"query read planets filters=[planets[name] endswith "art"]"#
)

// name doesn't contain string anywhere, prefix, suffix
_ = Planet.query(on: db)
.filter(\.$name !~ "art")
_ = Planet.query(on: db)
.filter(\.$name !=~ "art")
_ = Planet.query(on: db)
.filter(\.$name !~= "art")
#expect(
Planet.query(on: db)
.filter(\.$name !~ "art").query.description
== #"query read planets filters=[planets[name] !contains "art"]"#
)
#expect(
Planet.query(on: db)
.filter(\.$name !=~ "art").query.description
== #"query read planets filters=[planets[name] !startswith "art"]"#
)
#expect(
Planet.query(on: db)
.filter(\.$name !~= "art").query.description
== #"query read planets filters=[planets[name] !endswith "art"]"#
)

// name in array
_ = Planet.query(on: db)
.filter(\.$name ~~ ["Earth", "Mars"])
#expect(
Planet.query(on: db)
.filter(\.$name ~~ ["Earth", "Mars"]).query.description
== #"query read planets filters=[planets[name] ~~ ["Earth", "Mars"]]"#
)

// name not in array
_ = Planet.query(on: db)
.filter(\.$name !~ ["Earth", "Mars"])
#expect(
Planet.query(on: db)
.filter(\.$name !~ ["Earth", "Mars"]).query.description
== #"query read planets filters=[planets[name] !~~ ["Earth", "Mars"]]"#
)
}
}

Expand All @@ -43,49 +69,3 @@ private final class Planet: Model, @unchecked Sendable {
@Field(key: "name")
var name: String
}

private struct DummyDatabase: Database {
var inTransaction: Bool {
false
}

var context: DatabaseContext {
.init(configuration: DummyDatabaseConfiguration(), logger: Logger(label: "fluent"), eventLoop: MultiThreadedEventLoopGroup.singleton.any())
}

func execute(query: DatabaseQuery, onOutput: @escaping @Sendable (any DatabaseOutput) -> Void) -> EventLoopFuture<Void> {
fatalError()
}

func execute(schema: DatabaseSchema) -> EventLoopFuture<Void> {
fatalError()
}

func execute(enum: DatabaseEnum) -> EventLoopFuture<Void> {
fatalError()
}

func withConnection<T>(_ closure: @escaping @Sendable (any Database) -> EventLoopFuture<T>) -> EventLoopFuture<T> {
fatalError()
}

func transaction<T>(_ closure: @escaping @Sendable (any Database) -> EventLoopFuture<T>) -> EventLoopFuture<T> {
fatalError()
}
}

private struct DummyDatabaseConfiguration: DatabaseConfiguration {
var middleware: [any FluentKit.AnyModelMiddleware] = []

func makeDriver(for databases: FluentKit.Databases) -> any FluentKit.DatabaseDriver {
DummyDatabaseDriver()
}
}

private struct DummyDatabaseDriver: DatabaseDriver {
func makeDatabase(with context: FluentKit.DatabaseContext) -> any FluentKit.Database {
DummyDatabase()
}

func shutdown() {}
}