Skip to content

Commit 4bd37e8

Browse files
committed
Complete test matrix for merge conflict sequences
Makes timing sequences explicit in test names and adds missing test case for server record edited *after* client and processed *after* client.
1 parent e5411fa commit 4bd37e8

File tree

1 file changed

+82
-3
lines changed

1 file changed

+82
-3
lines changed

Tests/SQLiteDataTests/CloudKitTests/MergeConflictTests.swift

Lines changed: 82 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@
349349
}
350350

351351
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
352-
@Test func serverRecordEditedAfterClientButProcessedBeforeClient() async throws {
352+
@Test func serverRecordEditedAfterClientAndProcessedBeforeClient() async throws {
353353
try await userDatabase.userWrite { db in
354354
try db.seed {
355355
RemindersList(id: 1, title: "")
@@ -427,7 +427,86 @@
427427
}
428428

429429
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
430-
@Test func serverRecordEditedAndProcessedBeforeClient() async throws {
430+
@Test func serverRecordEditedAfterClientAndProcessedAfterClient() async throws {
431+
try await userDatabase.userWrite { db in
432+
try db.seed {
433+
RemindersList(id: 1, title: "")
434+
Reminder(id: 1, title: "", remindersListID: 1)
435+
}
436+
}
437+
try await syncEngine.processPendingRecordZoneChanges(scope: .private)
438+
439+
try await withDependencies {
440+
$0.currentTime.now = 30
441+
} operation: {
442+
try await userDatabase.userWrite { db in
443+
try Reminder.find(1).update { $0.title = "Get milk" }.execute(db)
444+
}
445+
}
446+
447+
let record = try syncEngine.private.database.record(for: Reminder.recordID(for: 1))
448+
record.setValue("Buy milk", forKey: "title", at: 60)
449+
let modificationCallback = try {
450+
try syncEngine.modifyRecords(scope: .private, saving: [record])
451+
}()
452+
453+
try await syncEngine.processPendingRecordZoneChanges(scope: .private)
454+
await modificationCallback.notify()
455+
try await syncEngine.processPendingRecordZoneChanges(scope: .private)
456+
457+
assertQuery(Reminder.all, database: userDatabase.database) {
458+
"""
459+
┌───────────────────────┐
460+
│ Reminder( │
461+
│ id: 1, │
462+
│ dueDate: nil, │
463+
│ isCompleted: false, │
464+
│ priority: nil, │
465+
│ title: "Buy milk", │
466+
│ remindersListID: 1 │
467+
│ ) │
468+
└───────────────────────┘
469+
"""
470+
}
471+
assertInlineSnapshot(of: container.privateCloudDatabase, as: .customDump) {
472+
"""
473+
MockCloudDatabase(
474+
databaseScope: .private,
475+
storage: [
476+
[0]: CKRecord(
477+
recordID: CKRecord.ID(1:reminders/zone/__defaultOwner__),
478+
recordType: "reminders",
479+
parent: CKReference(recordID: CKRecord.ID(1:remindersLists/zone/__defaultOwner__)),
480+
share: nil,
481+
id: 1,
482+
id🗓️: 0,
483+
isCompleted: 0,
484+
isCompleted🗓️: 0,
485+
remindersListID: 1,
486+
remindersListID🗓️: 0,
487+
title: "Buy milk",
488+
title🗓️: 60,
489+
🗓️: 60
490+
),
491+
[1]: CKRecord(
492+
recordID: CKRecord.ID(1:remindersLists/zone/__defaultOwner__),
493+
recordType: "remindersLists",
494+
parent: nil,
495+
share: nil,
496+
id: 1,
497+
id🗓️: 0,
498+
title: "",
499+
title🗓️: 0,
500+
🗓️: 0
501+
)
502+
]
503+
)
504+
"""
505+
}
506+
}
507+
508+
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
509+
@Test func serverRecordEditedBeforeClientAndProcessedBeforeClient() async throws {
431510
try await userDatabase.userWrite { db in
432511
try db.seed {
433512
RemindersList(id: 1, title: "")
@@ -490,7 +569,7 @@
490569
}
491570

492571
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
493-
@Test func serverRecordEditedBeforeClientButProcessedAfterClient() async throws {
572+
@Test func serverRecordEditedBeforeClientAndProcessedAfterClient() async throws {
494573
try await userDatabase.userWrite { db in
495574
try db.seed {
496575
RemindersList(id: 1, title: "")

0 commit comments

Comments
 (0)