From 2b1b049c3a5720ba18dc7542c59ff42f70397b14 Mon Sep 17 00:00:00 2001 From: Ryan Carver Date: Tue, 16 Sep 2025 13:21:06 -0700 Subject: [PATCH 1/4] Fix assertQuery changing to empty results after snapshot contains results --- Sources/SharingGRDBTestSupport/AssertQuery.swift | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Sources/SharingGRDBTestSupport/AssertQuery.swift b/Sources/SharingGRDBTestSupport/AssertQuery.swift index 86ca41f7..cd937e4e 100644 --- a/Sources/SharingGRDBTestSupport/AssertQuery.swift +++ b/Sources/SharingGRDBTestSupport/AssertQuery.swift @@ -51,8 +51,8 @@ public func assertQuery String)? = nil, - results: (() -> String)? = nil, + sql sqlSnapshot: (() -> String)? = nil, + results resultsSnapshot: (() -> String)? = nil, fileID: StaticString = #fileID, filePath: StaticString = #filePath, function: StaticString = #function, @@ -68,7 +68,7 @@ public func assertQuery Date: Tue, 16 Sep 2025 17:58:00 -0700 Subject: [PATCH 2/4] make the no results case more clear --- Sources/SharingGRDBTestSupport/AssertQuery.swift | 6 +++++- Tests/SharingGRDBTests/AssertQueryTests.swift | 9 +++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Sources/SharingGRDBTestSupport/AssertQuery.swift b/Sources/SharingGRDBTestSupport/AssertQuery.swift index cd937e4e..c45c54c9 100644 --- a/Sources/SharingGRDBTestSupport/AssertQuery.swift +++ b/Sources/SharingGRDBTestSupport/AssertQuery.swift @@ -81,7 +81,11 @@ public func assertQuery Date: Tue, 16 Sep 2025 21:06:23 -0500 Subject: [PATCH 3/4] Fixes --- Tests/SQLiteDataTests/AssertQueryTests.swift | 44 ++++++++++--------- .../CloudKitTests/AccountLifecycleTests.swift | 6 ++- .../CloudKitTests/CloudKitTests.swift | 8 +++- .../ForeignKeyConstraintTests.swift | 12 ++++- .../CloudKitTests/SharingTests.swift | 42 +++++++++++++++--- .../SyncEngineLifecycleTests.swift | 6 ++- 6 files changed, 87 insertions(+), 31 deletions(-) diff --git a/Tests/SQLiteDataTests/AssertQueryTests.swift b/Tests/SQLiteDataTests/AssertQueryTests.swift index 5c1577c2..38edc041 100644 --- a/Tests/SQLiteDataTests/AssertQueryTests.swift +++ b/Tests/SQLiteDataTests/AssertQueryTests.swift @@ -11,26 +11,6 @@ import Testing ) 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) - """ - } - } - - @available(iOS 17, macOS 14, tvOS 17, watchOS 10, *) - @Test func assertQueryBasic() throws { - assertQuery( - Record.all.where { $0.id == -1 }.select(\.id) - ) { - """ - (No results) - """ - } - } @Test func assertQueryBasic() throws { assertQuery( Record.all.select(\.id) @@ -97,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, *) From 031982b5612b65ad1e1ec9e0871274d50d5a3d84 Mon Sep 17 00:00:00 2001 From: Brandon Williams Date: Wed, 17 Sep 2025 12:34:16 -0500 Subject: [PATCH 4/4] rename --- Sources/SQLiteDataTestSupport/AssertQuery.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Sources/SQLiteDataTestSupport/AssertQuery.swift b/Sources/SQLiteDataTestSupport/AssertQuery.swift index 6eb953b1..12cacf50 100644 --- a/Sources/SQLiteDataTestSupport/AssertQuery.swift +++ b/Sources/SQLiteDataTestSupport/AssertQuery.swift @@ -53,8 +53,8 @@ public func assertQuery< includeSQL: Bool = false, _ query: S, database: (any DatabaseWriter)? = nil, - sql sqlSnapshot: (() -> String)? = nil, - results resultsSnapshot: (() -> String)? = nil, + sql: (() -> String)? = nil, + results: (() -> String)? = nil, fileID: StaticString = #fileID, filePath: StaticString = #filePath, function: StaticString = #function, @@ -70,7 +70,7 @@ public func assertQuery< trailingClosureLabel: "sql", trailingClosureOffset: 0 ), - matches: sqlSnapshot, + matches: sql, fileID: fileID, file: filePath, function: function, @@ -78,7 +78,7 @@ public func assertQuery< column: column ) } - let results = includeSQL ? resultsSnapshot : sqlSnapshot + let results = includeSQL ? results : sql do { @Dependency(\.defaultDatabase) var defaultDatabase let rows = try (database ?? defaultDatabase).write { try query.fetchAll($0) }