Skip to content

Commit 2bde3e1

Browse files
committed
Tests for find(_:key:) and find(_:id:)
1 parent 5ab7bfb commit 2bde3e1

9 files changed

+352
-0
lines changed

Tests/GRDBTests/RecordMinimalNonOptionalPrimaryKeySingleTests.swift

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,18 @@ class RecordMinimalNonOptionalPrimaryKeySingleTests: GRDBTestCase {
314314
}
315315
}
316316

317+
func testFindWithKey() throws {
318+
let dbQueue = try makeDatabaseQueue()
319+
try dbQueue.inDatabase { db in
320+
let record = MinimalNonOptionalPrimaryKeySingle(id: "theUUID")
321+
try record.insert(db)
322+
323+
let fetchedRecord = try MinimalNonOptionalPrimaryKeySingle.find(db, key: ["id": record.id])
324+
XCTAssertTrue(fetchedRecord.id == record.id)
325+
XCTAssertEqual(lastSQLQuery, "SELECT * FROM \"minimalSingles\" WHERE \"id\" = '\(record.id)'")
326+
}
327+
}
328+
317329

318330
// MARK: - Fetch With Key Request
319331

@@ -570,7 +582,40 @@ class RecordMinimalNonOptionalPrimaryKeySingleTests: GRDBTestCase {
570582
}
571583
}
572584

585+
func testFindWithPrimaryKey() throws {
586+
let dbQueue = try makeDatabaseQueue()
587+
try dbQueue.inDatabase { db in
588+
let record = MinimalNonOptionalPrimaryKeySingle(id: "theUUID")
589+
try record.insert(db)
590+
591+
do {
592+
let id: String? = nil
593+
_ = try MinimalNonOptionalPrimaryKeySingle.find(db, key: id)
594+
XCTFail("Expected RecordError")
595+
} catch RecordError.recordNotFound(databaseTableName: "minimalSingles", key: ["id": .null]) { }
596+
597+
do {
598+
let fetchedRecord = try MinimalNonOptionalPrimaryKeySingle.find(db, key: record.id)
599+
XCTAssertTrue(fetchedRecord.id == record.id)
600+
XCTAssertEqual(lastSQLQuery, "SELECT * FROM \"minimalSingles\" WHERE \"id\" = '\(record.id)'")
601+
}
602+
603+
if #available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6, *) {
604+
do {
605+
_ = try MinimalNonOptionalPrimaryKeySingle.find(db, key: "missing")
606+
XCTFail("Expected RecordError")
607+
} catch RecordError.recordNotFound(databaseTableName: "minimalSingles", key: ["id": "missing".databaseValue]) { }
608+
609+
do {
610+
let fetchedRecord = try MinimalNonOptionalPrimaryKeySingle.find(db, id: record.id)
611+
XCTAssertTrue(fetchedRecord.id == record.id)
612+
XCTAssertEqual(lastSQLQuery, "SELECT * FROM \"minimalSingles\" WHERE \"id\" = '\(record.id)'")
613+
}
614+
}
615+
}
616+
}
573617

618+
574619
// MARK: - Fetch With Primary Key Request
575620

576621
func testFetchCursorWithPrimaryKeysRequest() throws {

Tests/GRDBTests/RecordMinimalPrimaryKeyRowIDTests.swift

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,18 @@ class RecordMinimalPrimaryKeyRowIDTests : GRDBTestCase {
348348
}
349349
}
350350

351+
func testFindWithKey() throws {
352+
let dbQueue = try makeDatabaseQueue()
353+
try dbQueue.inDatabase { db in
354+
let record = MinimalRowID()
355+
try record.insert(db)
356+
357+
let fetchedRecord = try MinimalRowID.find(db, key: ["id": record.id])
358+
XCTAssertTrue(fetchedRecord.id == record.id)
359+
XCTAssertEqual(lastSQLQuery, "SELECT * FROM \"minimalRowIDs\" WHERE \"id\" = \(record.id!)")
360+
}
361+
}
362+
351363

352364
// MARK: - Fetch With Key Request
353365

@@ -607,6 +619,42 @@ class RecordMinimalPrimaryKeyRowIDTests : GRDBTestCase {
607619
}
608620
}
609621

622+
func testFindWithPrimaryKey() throws {
623+
let dbQueue = try makeDatabaseQueue()
624+
try dbQueue.inDatabase { db in
625+
let record = MinimalRowID()
626+
try record.insert(db)
627+
628+
do {
629+
let id: Int64? = nil
630+
_ = try MinimalRowID.find(db, key: id)
631+
XCTFail("Expected RecordError")
632+
} catch RecordError.recordNotFound(databaseTableName: "minimalRowIDs", key: ["id": .null]) { }
633+
634+
do {
635+
let fetchedRecord = try MinimalRowID.find(db, key: record.id)
636+
XCTAssertTrue(fetchedRecord.id == record.id)
637+
XCTAssertEqual(lastSQLQuery, "SELECT * FROM \"minimalRowIDs\" WHERE \"id\" = \(record.id!)")
638+
}
639+
640+
if #available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6, *) {
641+
do {
642+
_ = try MinimalRowID.find(db, id: -1)
643+
XCTFail("Expected RecordError")
644+
} catch RecordError.recordNotFound(databaseTableName: "minimalRowIDs", key: ["id": (-1).databaseValue]) { }
645+
646+
do {
647+
let fetchedRecord = try MinimalRowID.find(db, id: record.id!)
648+
XCTAssertTrue(fetchedRecord.id == record.id)
649+
XCTAssertEqual(lastSQLQuery, "SELECT * FROM \"minimalRowIDs\" WHERE \"id\" = \(record.id!)")
650+
}
651+
do {
652+
try XCTAssertNil(MinimalRowID.fetchOne(db, id: nil))
653+
}
654+
}
655+
}
656+
}
657+
610658

611659
// MARK: - Fetch With Primary Key Request
612660

Tests/GRDBTests/RecordMinimalPrimaryKeySingleTests.swift

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,19 @@ class RecordMinimalPrimaryKeySingleTests: GRDBTestCase {
362362
}
363363
}
364364

365+
func testFindWithKey() throws {
366+
let dbQueue = try makeDatabaseQueue()
367+
try dbQueue.inDatabase { db in
368+
let record = MinimalSingle()
369+
record.UUID = "theUUID"
370+
try record.insert(db)
371+
372+
let fetchedRecord = try MinimalSingle.find(db, key: ["UUID": record.UUID])
373+
XCTAssertTrue(fetchedRecord.UUID == record.UUID)
374+
XCTAssertEqual(lastSQLQuery, "SELECT * FROM \"minimalSingles\" WHERE \"UUID\" = '\(record.UUID!)'")
375+
}
376+
}
377+
365378

366379
// MARK: - Fetch With Key Request
367380

@@ -632,6 +645,40 @@ class RecordMinimalPrimaryKeySingleTests: GRDBTestCase {
632645
}
633646
}
634647

648+
func testFindWithPrimaryKey() throws {
649+
let dbQueue = try makeDatabaseQueue()
650+
try dbQueue.inDatabase { db in
651+
let record = MinimalSingle()
652+
record.UUID = "theUUID"
653+
try record.insert(db)
654+
655+
do {
656+
let id: String? = nil
657+
_ = try MinimalSingle.find(db, key: id)
658+
XCTFail("Expected RecordError")
659+
} catch RecordError.recordNotFound(databaseTableName: "minimalSingles", key: ["UUID": .null]) { }
660+
661+
do {
662+
let fetchedRecord = try MinimalSingle.find(db, key: record.UUID)
663+
XCTAssertTrue(fetchedRecord.UUID == record.UUID)
664+
XCTAssertEqual(lastSQLQuery, "SELECT * FROM \"minimalSingles\" WHERE \"UUID\" = '\(record.UUID!)'")
665+
}
666+
667+
if #available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6, *) {
668+
do {
669+
_ = try MinimalSingle.find(db, id: "missing")
670+
XCTFail("Expected RecordError")
671+
} catch RecordError.recordNotFound(databaseTableName: "minimalSingles", key: ["UUID": "missing".databaseValue]) { }
672+
673+
do {
674+
let fetchedRecord = try MinimalSingle.find(db, id: record.UUID!)
675+
XCTAssertTrue(fetchedRecord.UUID == record.UUID)
676+
XCTAssertEqual(lastSQLQuery, "SELECT * FROM \"minimalSingles\" WHERE \"UUID\" = '\(record.UUID!)'")
677+
}
678+
}
679+
}
680+
}
681+
635682

636683
// MARK: - Fetch With Primary Key Request
637684

Tests/GRDBTests/RecordPrimaryKeyHiddenRowIDTests.swift

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,21 @@ class RecordPrimaryKeyHiddenRowIDTests : GRDBTestCase {
434434
}
435435
}
436436

437+
func testFindWithKey() throws {
438+
let dbQueue = try makeDatabaseQueue()
439+
try dbQueue.inDatabase { db in
440+
let record = Person(name: "Arthur")
441+
try record.insert(db)
442+
443+
let fetchedRecord = try Person.find(db, key: ["rowid": record.id])
444+
XCTAssertTrue(fetchedRecord.id == record.id)
445+
XCTAssertTrue(fetchedRecord.name == record.name)
446+
XCTAssertTrue(fetchedRecord.age == record.age)
447+
XCTAssertTrue(abs(fetchedRecord.creationDate.timeIntervalSince(record.creationDate)) < 1e-3) // ISO-8601 is precise to the millisecond.
448+
XCTAssertEqual(lastSQLQuery, "SELECT *, \"rowid\" FROM \"persons\" WHERE \"rowid\" = \(record.id!)")
449+
}
450+
}
451+
437452

438453
// MARK: - Fetch With Key Request
439454

@@ -702,6 +717,48 @@ class RecordPrimaryKeyHiddenRowIDTests : GRDBTestCase {
702717
}
703718
}
704719

720+
func testFindWithPrimaryKey() throws {
721+
let dbQueue = try makeDatabaseQueue()
722+
try dbQueue.inDatabase { db in
723+
let record = Person(name: "Arthur")
724+
try record.insert(db)
725+
726+
do {
727+
let id: Int64? = nil
728+
_ = try Person.find(db, key: id)
729+
XCTFail("Expected RecordError")
730+
} catch RecordError.recordNotFound(databaseTableName: "persons", key: ["rowid": .null]) { }
731+
732+
do {
733+
let fetchedRecord = try Person.find(db, key: record.id)
734+
XCTAssertTrue(fetchedRecord.id == record.id)
735+
XCTAssertTrue(fetchedRecord.name == record.name)
736+
XCTAssertTrue(fetchedRecord.age == record.age)
737+
XCTAssertTrue(abs(fetchedRecord.creationDate.timeIntervalSince(record.creationDate)) < 1e-3) // ISO-8601 is precise to the millisecond.
738+
XCTAssertEqual(lastSQLQuery, "SELECT *, \"rowid\" FROM \"persons\" WHERE \"rowid\" = \(record.id!)")
739+
}
740+
741+
if #available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6, *) {
742+
do {
743+
_ = try Person.find(db, id: -1)
744+
XCTFail("Expected RecordError")
745+
} catch RecordError.recordNotFound(databaseTableName: "persons", key: ["rowid": (-1).databaseValue]) { }
746+
747+
do {
748+
let fetchedRecord = try Person.find(db, id: record.id!)
749+
XCTAssertTrue(fetchedRecord.id == record.id)
750+
XCTAssertTrue(fetchedRecord.name == record.name)
751+
XCTAssertTrue(fetchedRecord.age == record.age)
752+
XCTAssertTrue(abs(fetchedRecord.creationDate.timeIntervalSince(record.creationDate)) < 1e-3) // ISO-8601 is precise to the millisecond.
753+
XCTAssertEqual(lastSQLQuery, "SELECT *, \"rowid\" FROM \"persons\" WHERE \"rowid\" = \(record.id!)")
754+
}
755+
do {
756+
try XCTAssertNil(Person.fetchOne(db, id: nil))
757+
}
758+
}
759+
}
760+
}
761+
705762

706763
// MARK: - Fetch With Primary Key Request
707764

@@ -915,6 +972,8 @@ class RecordPrimaryKeyHiddenRowIDTests : GRDBTestCase {
915972
XCTAssertTrue(try Person.fetchOne(db)!.id != nil)
916973
XCTAssertTrue(try Person.fetchOne(db, key: 1)!.id != nil)
917974
XCTAssertTrue(try Person.fetchOne(db, key: ["rowid": 1])!.id != nil)
975+
XCTAssertTrue(try Person.find(db, key: 1).id != nil)
976+
XCTAssertTrue(try Person.find(db, key: ["rowid": 1]).id != nil)
918977
XCTAssertTrue(try Person.fetchAll(db).first!.id != nil)
919978
XCTAssertTrue(try Person.fetchAll(db, keys: [1]).first!.id != nil)
920979
XCTAssertTrue(try Person.fetchAll(db, keys: [["rowid": 1]]).first!.id != nil)

Tests/GRDBTests/RecordPrimaryKeyMultipleTests.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,20 @@ class RecordPrimaryKeyMultipleTests: GRDBTestCase {
384384
}
385385
}
386386

387+
func testFindWithKey() throws {
388+
let dbQueue = try makeDatabaseQueue()
389+
try dbQueue.inDatabase { db in
390+
let record = Citizenship(personName: "Arthur", countryName: "France", native: true)
391+
try record.insert(db)
392+
393+
let fetchedRecord = try Citizenship.find(db, key: ["personName": record.personName, "countryName": record.countryName])
394+
XCTAssertTrue(fetchedRecord.personName == record.personName)
395+
XCTAssertTrue(fetchedRecord.countryName == record.countryName)
396+
XCTAssertTrue(fetchedRecord.native == record.native)
397+
XCTAssertEqual(lastSQLQuery, "SELECT * FROM \"citizenships\" WHERE (\"personName\" = '\(record.personName!)') AND (\"countryName\" = '\(record.countryName!)')")
398+
}
399+
}
400+
387401

388402
// MARK: - Fetch With Key Request
389403

Tests/GRDBTests/RecordPrimaryKeyNoneTests.swift

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,18 @@ class RecordPrimaryKeyNoneTests: GRDBTestCase {
108108
}
109109
}
110110

111+
func testFindWithKey() throws {
112+
let dbQueue = try makeDatabaseQueue()
113+
try dbQueue.inDatabase { db in
114+
let record = Item(email: "[email protected]")
115+
try record.insert(db)
116+
117+
let fetchedRecord = try Item.find(db, key: ["email": record.email])
118+
XCTAssertTrue(fetchedRecord.email == record.email)
119+
XCTAssertEqual(lastSQLQuery, "SELECT * FROM \"items\" WHERE \"email\" = '[email protected]'")
120+
}
121+
}
122+
111123

112124
// MARK: - Fetch With Key Request
113125

@@ -240,6 +252,27 @@ class RecordPrimaryKeyNoneTests: GRDBTestCase {
240252
}
241253
}
242254

255+
func testFindWithPrimaryKey() throws {
256+
let dbQueue = try makeDatabaseQueue()
257+
try dbQueue.inDatabase { db in
258+
let record = Item(name: "Table")
259+
try record.insert(db)
260+
let id = db.lastInsertedRowID
261+
262+
do {
263+
let id: Int64? = nil
264+
_ = try Item.find(db, key: id)
265+
XCTFail("Expected RecordError")
266+
} catch RecordError.recordNotFound(databaseTableName: "items", key: ["rowid": .null]) { }
267+
268+
do {
269+
let fetchedRecord = try Item.find(db, key: id)
270+
XCTAssertTrue(fetchedRecord.name == record.name)
271+
XCTAssertEqual(lastSQLQuery, "SELECT * FROM \"items\" WHERE \"rowid\" = \(id)")
272+
}
273+
}
274+
}
275+
243276

244277
// MARK: - Fetch With Primary Key Request
245278

Tests/GRDBTests/RecordPrimaryKeyRowIDTests.swift

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,21 @@ class RecordPrimaryKeyRowIDTests: GRDBTestCase {
427427
}
428428
}
429429

430+
func testFindWithKey() throws {
431+
let dbQueue = try makeDatabaseQueue()
432+
try dbQueue.inDatabase { db in
433+
let record = Person(name: "Arthur")
434+
try record.insert(db)
435+
436+
let fetchedRecord = try Person.find(db, key: ["id": record.id])
437+
XCTAssertTrue(fetchedRecord.id == record.id)
438+
XCTAssertTrue(fetchedRecord.name == record.name)
439+
XCTAssertTrue(fetchedRecord.age == record.age)
440+
XCTAssertTrue(abs(fetchedRecord.creationDate.timeIntervalSince(record.creationDate)) < 1e-3) // ISO-8601 is precise to the millisecond.
441+
XCTAssertEqual(lastSQLQuery, "SELECT * FROM \"persons\" WHERE \"id\" = \(record.id!)")
442+
}
443+
}
444+
430445

431446
// MARK: - Fetch With Key Request
432447

@@ -635,6 +650,29 @@ class RecordPrimaryKeyRowIDTests: GRDBTestCase {
635650
}
636651
}
637652

653+
func testFindWithPrimaryKey() throws {
654+
let dbQueue = try makeDatabaseQueue()
655+
try dbQueue.inDatabase { db in
656+
let record = Person(name: "Arthur")
657+
try record.insert(db)
658+
659+
do {
660+
let id: Int64? = nil
661+
_ = try Person.find(db, key: id)
662+
XCTFail("Expected RecordError")
663+
} catch RecordError.recordNotFound(databaseTableName: "persons", key: ["id": .null]) { }
664+
665+
do {
666+
let fetchedRecord = try Person.find(db, key: record.id)
667+
XCTAssertTrue(fetchedRecord.id == record.id)
668+
XCTAssertTrue(fetchedRecord.name == record.name)
669+
XCTAssertTrue(fetchedRecord.age == record.age)
670+
XCTAssertTrue(abs(fetchedRecord.creationDate.timeIntervalSince(record.creationDate)) < 1e-3) // ISO-8601 is precise to the millisecond.
671+
XCTAssertEqual(lastSQLQuery, "SELECT * FROM \"persons\" WHERE \"id\" = \(record.id!)")
672+
}
673+
}
674+
}
675+
638676

639677
// MARK: - Fetch With Primary Key Request
640678

0 commit comments

Comments
 (0)