1- import FluentKit
21import FluentBenchmark
2+ import FluentKit
33import Foundation
44import SQLKit
55import XCTFluent
@@ -27,7 +27,7 @@ final class AsyncQueryBuilderTests: XCTestCase {
2727 TestOutput ( [
2828 " id " : planet. id as any Sendable ,
2929 " name " : planet. name,
30- " star_id " : UUID ( )
30+ " star_id " : UUID ( ) ,
3131 ] )
3232 ] )
3333
@@ -44,13 +44,13 @@ final class AsyncQueryBuilderTests: XCTestCase {
4444 TestOutput ( [
4545 " id " : planet. id as any Sendable ,
4646 " name " : planet. name,
47- " star_id " : UUID ( )
47+ " star_id " : UUID ( ) ,
4848 ] ) ,
4949 TestOutput ( [
5050 " id " : UUID ( ) ,
5151 " name " : " Nupeter " ,
52- " star_id " : UUID ( )
53- ] )
52+ " star_id " : UUID ( ) ,
53+ ] ) ,
5454 ] )
5555
5656 let retrievedPlanet = try await Planet . query ( on: test. db) . first ( )
@@ -64,7 +64,7 @@ final class AsyncQueryBuilderTests: XCTestCase {
6464 let planets = [
6565 Planet ( id: UUID ( ) , name: " P1 " , starId: starId) ,
6666 Planet ( id: UUID ( ) , name: " P2 " , starId: starId) ,
67- Planet ( id: UUID ( ) , name: " P3 " , starId: starId)
67+ Planet ( id: UUID ( ) , name: " P3 " , starId: starId) ,
6868 ]
6969 let test = ArrayTestDatabase ( )
7070 test. append ( planets. map ( TestOutput . init) )
@@ -80,10 +80,11 @@ final class AsyncQueryBuilderTests: XCTestCase {
8080 let planets = [
8181 Planet ( id: UUID ( ) , name: " P1 " , starId: starId) ,
8282 Planet ( id: UUID ( ) , name: " P2 " , starId: starId) ,
83- Planet ( id: UUID ( ) , name: " P3 " , starId: starId)
83+ Planet ( id: UUID ( ) , name: " P3 " , starId: starId) ,
8484 ]
8585 let test = ArrayTestDatabase ( )
86- let db = test. database ( context: . init( configuration: test. configuration, logger: test. db. logger, eventLoop: test. db. eventLoop, history: . init( ) ) )
86+ let db = test. database (
87+ context: . init( configuration: test. configuration, logger: test. db. logger, eventLoop: test. db. eventLoop, history: . init( ) ) )
8788 test. append ( planets. map ( TestOutput . init) )
8889
8990 let retrievedPlanets = try await Planet . query ( on: db) . all ( )
@@ -105,11 +106,10 @@ final class AsyncQueryBuilderTests: XCTestCase {
105106 let test = CallbackTestDatabase { query in
106107 XCTAssertEqual ( query. schema, " planets " )
107108 let result : [ TestOutput ]
108- if
109- let limit = query. limits. first,
110- case let DatabaseQuery . Limit . count( limitValue) = limit,
109+ if let limit = query. limits. first,
110+ case DatabaseQuery . Limit . count( let limitValue) = limit,
111111 let offset = query. offsets. first,
112- case let DatabaseQuery . Offset . count( offsetValue) = offset
112+ case DatabaseQuery . Offset . count( let offsetValue) = offset
113113 {
114114 result = [ TestOutput] ( rows [ min ( offsetValue, rows. count - 1 ) ..< min ( offsetValue + limitValue, rows. count) ] )
115115 } else {
@@ -140,9 +140,9 @@ final class AsyncQueryBuilderTests: XCTestCase {
140140 XCTAssertEqual ( retrievedPlanets. items. count, pageSizeLimit, " Page size limit should be respected. " )
141141 XCTAssertEqual ( retrievedPlanets. items. first? . name, " c " , " Page size limit should determine offset " )
142142 }
143-
143+
144144 func testPaginationInvalidLowerPageBoundary( ) async throws {
145-
145+
146146 // Given - a dataset with 5 items
147147 let starId = UUID ( )
148148 let rows = [
@@ -156,11 +156,10 @@ final class AsyncQueryBuilderTests: XCTestCase {
156156 let test = CallbackTestDatabase { query in
157157 XCTAssertEqual ( query. schema, " planets " )
158158 let result : [ TestOutput ]
159- if
160- let limit = query. limits. first,
161- case let DatabaseQuery . Limit . count( limitValue) = limit,
159+ if let limit = query. limits. first,
160+ case DatabaseQuery . Limit . count( let limitValue) = limit,
162161 let offset = query. offsets. first,
163- case let DatabaseQuery . Offset . count( offsetValue) = offset
162+ case DatabaseQuery . Offset . count( let offsetValue) = offset
164163 {
165164 result = [ TestOutput] ( rows [ min ( offsetValue, rows. count - 1 ) ..< min ( offsetValue + limitValue, rows. count) ] )
166165 } else {
@@ -186,17 +185,17 @@ final class AsyncQueryBuilderTests: XCTestCase {
186185 pageSizeLimit: pageSizeLimit
187186 )
188187 )
189-
188+
190189 // When - query for invalid lower boundary page index
191190 let retrievedPlanets = try await Planet . query ( on: db) . page ( withIndex: - 1 , size: 2 )
192-
191+
193192 // Then - the first page should be retrieved
194193 XCTAssertEqual ( retrievedPlanets. items. first? . name, " a " , " First page should be minimum. " )
195194 XCTAssertEqual ( retrievedPlanets. items. count, 2 , " Expecting first page to have a two items. " )
196195 }
197-
196+
198197 func testPaginationInvalidUpperPageBoundary( ) async throws {
199-
198+
200199 // Given - a dataset with 5 items
201200 let starId = UUID ( )
202201 let rows = [
@@ -210,11 +209,10 @@ final class AsyncQueryBuilderTests: XCTestCase {
210209 let test = CallbackTestDatabase { query in
211210 XCTAssertEqual ( query. schema, " planets " )
212211 let result : [ TestOutput ]
213- if
214- let limit = query. limits. first,
215- case let DatabaseQuery . Limit . count( limitValue) = limit,
212+ if let limit = query. limits. first,
213+ case DatabaseQuery . Limit . count( let limitValue) = limit,
216214 let offset = query. offsets. first,
217- case let DatabaseQuery . Offset . count( offsetValue) = offset
215+ case DatabaseQuery . Offset . count( let offsetValue) = offset
218216 {
219217 result = [ TestOutput] ( rows [ min ( offsetValue, rows. count - 1 ) ..< min ( offsetValue + limitValue, rows. count) ] )
220218 } else {
@@ -240,25 +238,20 @@ final class AsyncQueryBuilderTests: XCTestCase {
240238 pageSizeLimit: pageSizeLimit
241239 )
242240 )
243-
241+
244242 // When - query for invalid upper boundary page index
245243 let retrievedPlanets = try await Planet . query ( on: db) . page ( withIndex: 4 , size: 2 )
246-
244+
247245 // Then - the last page should be retrieved
248246 XCTAssertEqual ( retrievedPlanets. items. first? . name, " e " , " Last page should be maximum. " )
249247 XCTAssertEqual ( retrievedPlanets. items. count, 1 , " Expecting last page to have a single item. " )
250248 }
251249
252250 // https://github.com/vapor/fluent-kit/issues/310
253251 func testJoinOverloads( ) async throws {
254- final class UnsafeMutableTransferBox < Wrapped> : @unchecked Sendable {
255- var wrappedValue : Wrapped
256- init ( _ wrappedValue: Wrapped ) { self . wrappedValue = wrappedValue }
257- }
258-
259- let query = UnsafeMutableTransferBox < DatabaseQuery ? > ( nil )
252+ nonisolated ( unsafe) var query : DatabaseQuery ? = nil
260253 let test = CallbackTestDatabase {
261- query. wrappedValue = $0
254+ query = $0
262255 return [ ]
263256 }
264257 let planets = try await Planet . query ( on: test. db)
@@ -267,8 +260,8 @@ final class AsyncQueryBuilderTests: XCTestCase {
267260 . filter ( Star . self, \. $name, . custom( " ilike " ) , " Sol " )
268261 . all ( )
269262 XCTAssertEqual ( planets. count, 0 )
270- XCTAssertNotNil ( query. wrappedValue ? . filters [ 1 ] )
271- switch query. wrappedValue ? . filters [ 1 ] {
263+ XCTAssertNotNil ( query? . filters [ 1 ] )
264+ switch query? . filters [ 1 ] {
272265 case . value( let field, let method, let value) :
273266 switch field {
274267 case . path( let path, let schema) :
@@ -300,11 +293,14 @@ final class AsyncQueryBuilderTests: XCTestCase {
300293
301294 func testComplexJoinOperators( ) async throws {
302295 let db = DummyDatabaseForTestSQLSerializer ( )
303-
296+
304297 _ = try await Planet . query ( on: db)
305298 . join ( Star . self, on: \Star . $id == \Planet . $star. $id && \Star . $name != \Planet . $name)
306299 . all ( )
307300 XCTAssertEqual ( db. sqlSerializers. count, 1 )
308- XCTAssertEqual ( try db. sqlSerializers. xctAt ( 0 ) . sql, #"SELECT "planets"."id" AS "planets_id", "planets"."name" AS "planets_name", "planets"."star_id" AS "planets_star_id", "planets"."possible_star_id" AS "planets_possible_star_id", "planets"."deleted_at" AS "planets_deleted_at", "stars"."id" AS "stars_id", "stars"."name" AS "stars_name", "stars"."galaxy_id" AS "stars_galaxy_id", "stars"."deleted_at" AS "stars_deleted_at" FROM "planets" INNER JOIN "stars" ON "stars"."id" = "planets"."star_id" AND "stars"."name" <> "planets"."name" WHERE ("planets"."deleted_at" IS NULL OR "planets"."deleted_at" > $1) AND ("stars"."deleted_at" IS NULL OR "stars"."deleted_at" > $2)"# )
301+ XCTAssertEqual (
302+ try db. sqlSerializers. xctAt ( 0 ) . sql,
303+ #"SELECT "planets"."id" AS "planets_id", "planets"."name" AS "planets_name", "planets"."star_id" AS "planets_star_id", "planets"."possible_star_id" AS "planets_possible_star_id", "planets"."deleted_at" AS "planets_deleted_at", "stars"."id" AS "stars_id", "stars"."name" AS "stars_name", "stars"."galaxy_id" AS "stars_galaxy_id", "stars"."deleted_at" AS "stars_deleted_at" FROM "planets" INNER JOIN "stars" ON "stars"."id" = "planets"."star_id" AND "stars"."name" <> "planets"."name" WHERE ("planets"."deleted_at" IS NULL OR "planets"."deleted_at" > $1) AND ("stars"."deleted_at" IS NULL OR "stars"."deleted_at" > $2)"#
304+ )
309305 }
310306}
0 commit comments