@@ -14,6 +14,9 @@ final class GroupStorageTests: XCTestCase {
1414 private var syncDefaults : UserDefaults !
1515 private var syncSuiteName : String !
1616 private var storage : GroupStorage !
17+ private var tracker : SyncChangeTracker !
18+ private var connectionStorage : ConnectionStorage !
19+ private var connectionFileURL : URL !
1720
1821 override func setUp( ) {
1922 super. setUp ( )
@@ -23,18 +26,38 @@ final class GroupStorageTests: XCTestCase {
2326 syncSuiteName = " com.TablePro.tests.Sync. \( unique) "
2427 syncDefaults = UserDefaults ( suiteName: syncSuiteName) !
2528 let metadata = SyncMetadataStorage ( userDefaults: syncDefaults)
26- let tracker = SyncChangeTracker ( metadataStorage: metadata)
27- storage = GroupStorage ( userDefaults: defaults, syncTracker: tracker)
29+ tracker = SyncChangeTracker ( metadataStorage: metadata)
30+ connectionFileURL = FileManager . default. temporaryDirectory
31+ . appendingPathComponent ( " tablepro-tests " )
32+ . appendingPathComponent ( " group-connections_ \( unique) .json " )
33+ try ? FileManager . default. createDirectory (
34+ at: connectionFileURL. deletingLastPathComponent ( ) ,
35+ withIntermediateDirectories: true
36+ )
37+ connectionStorage = ConnectionStorage (
38+ fileURL: connectionFileURL,
39+ userDefaults: defaults,
40+ syncTracker: tracker
41+ )
42+ storage = GroupStorage (
43+ userDefaults: defaults,
44+ syncTracker: tracker,
45+ connectionStorage: connectionStorage
46+ )
2847 }
2948
3049 override func tearDown( ) {
3150 defaults. removePersistentDomain ( forName: suiteName)
3251 syncDefaults. removePersistentDomain ( forName: syncSuiteName)
52+ try ? FileManager . default. removeItem ( at: connectionFileURL)
3353 defaults = nil
3454 suiteName = nil
3555 syncDefaults = nil
3656 syncSuiteName = nil
3757 storage = nil
58+ tracker = nil
59+ connectionStorage = nil
60+ connectionFileURL = nil
3861 super. tearDown ( )
3962 }
4063
@@ -129,6 +152,22 @@ final class GroupStorageTests: XCTestCase {
129152 XCTAssertEqual ( loaded [ 0 ] . name, " Prod " )
130153 }
131154
155+ func testDeleteGroupClearsMembershipAndMarksConnectionDirtyForSync( ) {
156+ let group = ConnectionGroup ( name: " Dev " , color: . green)
157+ storage. saveGroups ( [ group] )
158+
159+ let connection = DatabaseConnection ( name: " Grouped " , groupId: group. id)
160+ connectionStorage. addConnection ( connection)
161+ tracker. clearAllDirty ( . connection)
162+
163+ storage. deleteGroup ( group)
164+
165+ let reloaded = connectionStorage. loadConnections ( )
166+ XCTAssertEqual ( reloaded. count, 1 )
167+ XCTAssertNil ( reloaded [ 0 ] . groupId)
168+ XCTAssertTrue ( tracker. dirtyRecords ( for: . connection) . contains ( connection. id. uuidString) )
169+ }
170+
132171 // MARK: - Lookup
133172
134173 func testGroupForId( ) {
0 commit comments