@@ -11,99 +11,44 @@ import Testing
1111
1212@Suite
1313struct QueryTests {
14- @Test func testQuery ( ) async throws {
15- let pool = try createDatabase ( )
16- let insert = insertQuery ( database : pool )
14+ @Test func testInsertAndGetQuery ( ) async throws {
15+ let db = try TestDB . inTempDir ( )
16+ try await db . insertFoo . execute ( with : 1 )
1717
18- let foo1 = Foo ( bar: 1 , baz: " bar1 " )
19- let foo2 = Foo ( bar: 2 , baz: " bar2 " )
20- let foo3 = Foo ( bar: 3 , baz: " bar3 " )
18+ let foos = try await db. selectFoos. execute ( )
19+ #expect( foos == [ TestDB . Foo ( bar: 1 ) ] )
2120
22- try await insert. execute ( with: foo1)
23- try await insert. execute ( with: foo2)
24- try await insert. execute ( with: foo3)
25-
26- let foos = try await selectAllFooQuery ( database: pool) . execute ( )
27-
28- #expect( foos. count == 3 )
21+ let foo = try await db. selectFoo. execute ( with: 1 )
22+ #expect( foo == TestDB . Foo ( bar: 1 ) )
2923 }
3024
31- // @Test func testMacroQuery() async throws {
32- // let pool = try ConnectionPool(path: ":memory:", limit: 1, migrations: TestDB.migrations)
33- //
34- // try await TestDB.insertFoo.execute(with: .init(bar: 1, baz: "one"), in: pool)
35- // try await TestDB.insertFoo.execute(with: .init(bar: 2, baz: "two"), in: pool)
36- //
37- // let foos = try await TestDB.fetchFoos.execute(in: pool)
38- // #expect(foos.count == 2)
39- // }
25+ @Test func selectManyWithEmptyDbReturnsEmpty( ) async throws {
26+ let db = try TestDB . inTempDir ( )
27+ let foos = try await db. selectFoos. execute ( )
28+ #expect( foos == [ ] )
29+ }
4030
41- struct Foo : RowDecodable {
42- let bar : Int
43- let baz : String ?
44-
45- init ( bar: Int , baz: String ? ) {
46- self . bar = bar
47- self . baz = baz
48- }
49-
50- init ( row: borrowing Row , startingAt start: Int32 ) throws ( FeatherError) {
51- self . bar = try row. value ( at: 0 )
52- self . baz = try row. value ( at: 1 )
53- }
31+ @Test func selectManyCanReturnManyItems( ) async throws {
32+ let db = try TestDB . inTempDir ( )
33+ try await db. insertFoo. execute ( with: 1 )
34+ try await db. insertFoo. execute ( with: 2 )
35+ let foos = try await db. selectFoos. execute ( )
36+ #expect( foos == [ TestDB . Foo ( bar: 1 ) , TestDB . Foo ( bar: 2 ) ] )
5437 }
5538
56- private func selectAllFooQuery( database: any Connection ) -> any DatabaseQuery < ( ) , [ Foo ] > {
57- return AnyDatabaseQuery < ( ) , [ Foo ] > ( . read, in: database, watchingTables: [ ] ) { input, transaction in
58- let statement = try Statement ( in: transaction) {
59- " SELECT * FROM foo; "
60- }
61-
62- return try statement. fetchAll ( of: Foo . self)
63- }
39+ @Test func selectSingleWithEmptyDbReturnsNil( ) async throws {
40+ let db = try TestDB . inTempDir ( )
41+ let foo = try await db. selectFoo. execute ( with: 1 )
42+ #expect( foo == nil )
6443 }
6544
66- private func insertQuery( database: any Connection ) -> any DatabaseQuery < Foo , ( ) > {
67- return AnyDatabaseQuery < Foo , ( ) > ( . write, in: database, watchingTables: [ ] ) { input, transaction in
68- let statement = try Statement ( in: transaction) {
69- " INSERT INTO foo (bar, baz) VALUES (?, ?) "
70- } bind: { statement in
71- try statement. bind ( value: input. bar, to: 1 )
72- try statement. bind ( value: input. baz, to: 2 )
45+ @Test func errorIsThrownWhenAttemptingToWriteToReadTx( ) async throws {
46+ let db = try TestDB . inTempDir ( )
47+
48+ await #expect( throws: FeatherError . cannotWriteInAReadTransaction) {
49+ _ = try await db. connection. begin ( . read) { tx in
50+ try db. insertFoo. execute ( with: 1 , tx: tx)
7351 }
74-
75- _ = try statement. step ( )
7652 }
7753 }
78-
79- private func createDatabase( ) throws -> ConnectionPool {
80- return try ConnectionPool (
81- path: " :memory: " ,
82- limit: 1 ,
83- migrations: [
84- " CREATE TABLE foo (bar INTEGER PRIMARY KEY, baz TEXT) "
85- ]
86- )
87- }
88- //
89- // @Database
90- // struct TestDB: Database {
91- // static var migrations: [String] {
92- // return [
93- // "CREATE TABLE foo (bar INTEGER PRIMARY KEY, baz TEXT)"
94- // ]
95- // }
96- //
97- // static var queries: [String] {
98- // return [
99- // """
100- // DEFINE QUERY fetchFoos AS
101- // SELECT * FROM foo;
102- //
103- // DEFINE QUERY insertFoo AS
104- // INSERT INTO foo (bar, baz) VALUES (?, ?);
105- // """,
106- // ]
107- // }
108- // }
10954}
0 commit comments