diff --git a/Sources/SQLiteDataTestSupport/AssertQuery.swift b/Sources/SQLiteDataTestSupport/AssertQuery.swift index 3009db47..12cacf50 100644 --- a/Sources/SQLiteDataTestSupport/AssertQuery.swift +++ b/Sources/SQLiteDataTestSupport/AssertQuery.swift @@ -78,11 +78,16 @@ public func assertQuery< column: column ) } + let results = includeSQL ? results : sql do { @Dependency(\.defaultDatabase) var defaultDatabase let rows = try (database ?? defaultDatabase).write { try query.fetchAll($0) } var table = "" - printTable(rows, to: &table) + if rows.isEmpty { + table = "(No results)" + } else { + printTable(rows, to: &table) + } if !table.isEmpty { assertInlineSnapshot( of: table, @@ -92,7 +97,7 @@ public func assertQuery< trailingClosureLabel: "results", trailingClosureOffset: includeSQL ? 1 : 0 ), - matches: includeSQL ? results : sql, + matches: results, fileID: fileID, file: filePath, function: function, @@ -108,7 +113,7 @@ public func assertQuery< trailingClosureLabel: "results", trailingClosureOffset: includeSQL ? 1 : 0 ), - matches: includeSQL ? results : sql, + matches: results, fileID: fileID, file: filePath, function: function, @@ -125,7 +130,7 @@ public func assertQuery< trailingClosureLabel: "results", trailingClosureOffset: includeSQL ? 1 : 0 ), - matches: includeSQL ? results : sql, + matches: results, fileID: fileID, file: filePath, function: function, diff --git a/Tests/SQLiteDataTests/AssertQueryTests.swift b/Tests/SQLiteDataTests/AssertQueryTests.swift index 4dfb959a..38edc041 100644 --- a/Tests/SQLiteDataTests/AssertQueryTests.swift +++ b/Tests/SQLiteDataTests/AssertQueryTests.swift @@ -77,6 +77,30 @@ struct AssertQueryTests { } } + @available(iOS 17, macOS 14, tvOS 17, watchOS 10, *) + @Test func assertQueryEmpty() throws { + assertQuery( + Record.all.where { $0.id == -1 }.select(\.id) + ) { + """ + (No results) + """ + } + } + + @Test(.snapshots(record: .never)) + func assertQueryFailsNoResultsNonEmptySnapshot() { + withKnownIssue { + assertQuery( + Record.all.where { _ in false } + ) { + """ + XYZ + """ + } + } + } + #if DEBUG @available(iOS 17, macOS 14, tvOS 17, watchOS 10, *) @Test func assertQueryBasicIncludeSQL() throws { diff --git a/Tests/SQLiteDataTests/CloudKitTests/AccountLifecycleTests.swift b/Tests/SQLiteDataTests/CloudKitTests/AccountLifecycleTests.swift index e5865a70..cb85e7c7 100644 --- a/Tests/SQLiteDataTests/CloudKitTests/AccountLifecycleTests.swift +++ b/Tests/SQLiteDataTests/CloudKitTests/AccountLifecycleTests.swift @@ -598,7 +598,11 @@ } ) func doNotUploadExistingDataToCloudKitWhenSignedOut() { - assertQuery(SyncMetadata.all, database: userDatabase.database) + assertQuery(SyncMetadata.all, database: userDatabase.database) { + """ + (No results) + """ + } assertInlineSnapshot(of: container, as: .customDump) { """ MockCloudContainer( diff --git a/Tests/SQLiteDataTests/CloudKitTests/CloudKitTests.swift b/Tests/SQLiteDataTests/CloudKitTests/CloudKitTests.swift index 460c27da..34ad998b 100644 --- a/Tests/SQLiteDataTests/CloudKitTests/CloudKitTests.swift +++ b/Tests/SQLiteDataTests/CloudKitTests/CloudKitTests.swift @@ -683,7 +683,11 @@ record._recordChangeTag = UUID().uuidString try await syncEngine.modifyRecords(scope: .private, saving: [record]).notify() - assertQuery(Reminder.all, database: userDatabase.database) + assertQuery(Reminder.all, database: userDatabase.database) { + """ + (No results) + """ + } assertQuery( SyncMetadata.select(\.userModificationTime), database: syncEngine.metadatabase @@ -736,10 +740,12 @@ assertQuery(RemindersList.all, database: userDatabase.database) { """ + (No results) """ } assertQuery(SyncMetadata.all, database: syncEngine.metadatabase) { """ + (No results) """ } assertInlineSnapshot(of: container, as: .customDump) { diff --git a/Tests/SQLiteDataTests/CloudKitTests/ForeignKeyConstraintTests.swift b/Tests/SQLiteDataTests/CloudKitTests/ForeignKeyConstraintTests.swift index 40688a42..d9369f95 100644 --- a/Tests/SQLiteDataTests/CloudKitTests/ForeignKeyConstraintTests.swift +++ b/Tests/SQLiteDataTests/CloudKitTests/ForeignKeyConstraintTests.swift @@ -143,10 +143,12 @@ } assertQuery(ModelB.all, database: userDatabase.database) { """ + (No results) """ } assertQuery(ModelC.all, database: userDatabase.database) { """ + (No results) """ } assertQuery(UnsyncedRecordID.all, database: syncEngine.metadatabase) { @@ -180,14 +182,17 @@ } assertQuery(ModelB.all, database: userDatabase.database) { """ + (No results) """ } assertQuery(ModelC.all, database: userDatabase.database) { """ + (No results) """ } assertQuery(UnsyncedRecordID.all, database: syncEngine.metadatabase) { """ + (No results) """ } assertInlineSnapshot(of: container, as: .customDump) { @@ -335,6 +340,7 @@ assertQuery(Reminder.all, database: userDatabase.database) { """ + (No results) """ } @@ -843,7 +849,11 @@ } } try await syncEngine.processPendingRecordZoneChanges(scope: .private) - assertQuery(SyncMetadata.all, database: syncEngine.metadatabase) + assertQuery(SyncMetadata.all, database: syncEngine.metadatabase) { + """ + (No results) + """ + } assertInlineSnapshot(of: container, as: .customDump) { """ MockCloudContainer( diff --git a/Tests/SQLiteDataTests/CloudKitTests/SharingTests.swift b/Tests/SQLiteDataTests/CloudKitTests/SharingTests.swift index 7c9646e9..860b4286 100644 --- a/Tests/SQLiteDataTests/CloudKitTests/SharingTests.swift +++ b/Tests/SQLiteDataTests/CloudKitTests/SharingTests.swift @@ -1036,9 +1036,21 @@ try await syncEngine.processPendingRecordZoneChanges(scope: .shared) - assertQuery(Reminder.all, database: userDatabase.database) - assertQuery(RemindersList.all, database: userDatabase.database) - assertQuery(SyncMetadata.all, database: syncEngine.metadatabase) + assertQuery(Reminder.all, database: userDatabase.database) { + """ + (No results) + """ + } + assertQuery(RemindersList.all, database: userDatabase.database) { + """ + (No results) + """ + } + assertQuery(SyncMetadata.all, database: syncEngine.metadatabase) { + """ + (No results) + """ + } assertInlineSnapshot(of: container, as: .customDump) { """ @@ -1133,9 +1145,21 @@ try await syncEngine.modifyRecordZones(scope: .shared, deleting: [externalZone.zoneID]) .notify() - assertQuery(Reminder.all, database: userDatabase.database) - assertQuery(RemindersList.all, database: userDatabase.database) - assertQuery(SyncMetadata.all, database: syncEngine.metadatabase) + assertQuery(Reminder.all, database: userDatabase.database) { + """ + (No results) + """ + } + assertQuery(RemindersList.all, database: userDatabase.database) { + """ + (No results) + """ + } + assertQuery(SyncMetadata.all, database: syncEngine.metadatabase) { + """ + (No results) + """ + } assertInlineSnapshot(of: container, as: .customDump) { """ @@ -2148,7 +2172,11 @@ └────────────────┘ """ } - assertQuery(ModelC.all, database: userDatabase.database) + assertQuery(ModelC.all, database: userDatabase.database) { + """ + (No results) + """ + } assertQuery( SyncMetadata.order { ($0.recordType, $0.recordName) }, database: syncEngine.metadatabase diff --git a/Tests/SQLiteDataTests/CloudKitTests/SyncEngineLifecycleTests.swift b/Tests/SQLiteDataTests/CloudKitTests/SyncEngineLifecycleTests.swift index 3da22697..8bea578e 100644 --- a/Tests/SQLiteDataTests/CloudKitTests/SyncEngineLifecycleTests.swift +++ b/Tests/SQLiteDataTests/CloudKitTests/SyncEngineLifecycleTests.swift @@ -236,7 +236,11 @@ ) """ } - assertQuery(PendingRecordZoneChange.all, database: syncEngine.metadatabase) + assertQuery(PendingRecordZoneChange.all, database: syncEngine.metadatabase) { + """ + (No results) + """ + } } @available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)