From b5d8fe50336bc758020067bf0081ebea393f5b80 Mon Sep 17 00:00:00 2001 From: Laurent Date: Thu, 15 May 2025 09:39:13 +0200 Subject: [PATCH] update tests --- PadelClubDataTests/SyncDataAccessTests.swift | 186 ++++++++++-------- PadelClubDataTests/SynchronizationTests.swift | 1 + 2 files changed, 105 insertions(+), 82 deletions(-) diff --git a/PadelClubDataTests/SyncDataAccessTests.swift b/PadelClubDataTests/SyncDataAccessTests.swift index 17eb576..bce239a 100644 --- a/PadelClubDataTests/SyncDataAccessTests.swift +++ b/PadelClubDataTests/SyncDataAccessTests.swift @@ -9,6 +9,15 @@ import Testing @testable import PadelClubData @testable import LeStorage +extension String { + + static func random(length: Int = 10) -> String { + let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + return String((0.. = await StoreCenter.main.mainStore.asyncLoadingSynchronizedCollection() - let tournamentColA: SyncedCollection = await StoreCenter.main.mainStore.asyncLoadingSynchronizedCollection() - let eventColB: SyncedCollection = await self.secondStoreCenter.mainStore.asyncLoadingSynchronizedCollection() - let tournamentColB: SyncedCollection = await self.secondStoreCenter.mainStore.asyncLoadingSynchronizedCollection() - - if let dataAccessCollection = StoreCenter.main.dataAccessCollection { - try await dataAccessCollection.deleteAsync(contentOfs: Array(dataAccessCollection)) + let eventColA: SyncedCollection = await self.storeCenterA.mainStore.asyncLoadingSynchronizedCollection() + let tournamentColA: SyncedCollection = await self.storeCenterA.mainStore.asyncLoadingSynchronizedCollection() + let eventColB: SyncedCollection = await self.storeCenterB.mainStore.asyncLoadingSynchronizedCollection() + let tournamentColB: SyncedCollection = await self.storeCenterB.mainStore.asyncLoadingSynchronizedCollection() + + var dataAccesses: [DataAccess] = try await self.storeCenterA.service().get() + if let dataAccessCollection = self.storeCenterA.dataAccessCollection { + try await dataAccessCollection.deleteAsync(contentOfs: dataAccesses) + } else { + Issue.record("dataAccessCollection should not be nil") } try await eventColA.deleteAsync(contentOfs: Array(eventColA)) try await tournamentColA.deleteAsync(contentOfs: Array(tournamentColA)) - let _ = try await self.secondStoreCenter.testSynchronizeOnceAsync() + let _ = try await self.storeCenterB.testSynchronizeOnceAsync() #expect(eventColB.count == 0) #expect(tournamentColB.count == 0) @@ -104,27 +126,27 @@ struct SyncDataAccessTests { try await tournamentColA.addOrUpdateAsync(instance: tournamentA) // Share with user2 - try await StoreCenter.main.setAuthorizedUsersAsync(for: tournamentA, users: [userId2]) + try await self.storeCenterA.setAuthorizedUsersAsync(for: tournamentA, users: [userId2]) - var dataB = try await self.secondStoreCenter.testSynchronizeOnceAsync() - var syncDataB = try SyncData(data: dataB, storeCenter: self.secondStoreCenter) + var dataB = try await self.storeCenterB.testSynchronizeOnceAsync() + var syncDataB = try SyncData(data: dataB, storeCenter: self.storeCenterB) #expect(syncDataB.grants.count == 2) #expect(eventColB.count == 1) #expect(tournamentColB.count == 1) // Remove sharing from user2 - try await StoreCenter.main.setAuthorizedUsersAsync(for: tournamentA, users: []) + try await self.storeCenterA.setAuthorizedUsersAsync(for: tournamentA, users: []) - dataB = try await self.secondStoreCenter.testSynchronizeOnceAsync() - syncDataB = try SyncData(data: dataB, storeCenter: self.secondStoreCenter) + dataB = try await self.storeCenterB.testSynchronizeOnceAsync() + syncDataB = try SyncData(data: dataB, storeCenter: self.storeCenterB) #expect(syncDataB.revocations.count == 1) #expect(syncDataB.revocationParents.count == 1) #expect(eventColB.count == 0) #expect(tournamentColB.count == 0) - let dataAccesses: [DataAccess] = try await StoreCenter.main.service().get() + dataAccesses = try await self.storeCenterA.service().get() #expect(dataAccesses.count == 0) } @@ -135,27 +157,27 @@ struct SyncDataAccessTests { /// Here we want to test that the Club instance remains even if one event is removed from the second user @Test func testSharedRelationship() async throws { - guard let userId1 = StoreCenter.main.userId else { + guard let userId1 = self.storeCenterA.userId else { throw TestError.notAuthenticated } - guard let userId2 = self.secondStoreCenter.userId else { + guard let userId2 = self.storeCenterB.userId else { throw TestError.notAuthenticated } // Setup - let eventColA: SyncedCollection = await StoreCenter.main.mainStore.asyncLoadingSynchronizedCollection() - let clubColA: SyncedCollection = await StoreCenter.main.mainStore.asyncLoadingSynchronizedCollection() - let eventColB: SyncedCollection = await self.secondStoreCenter.mainStore.asyncLoadingSynchronizedCollection() - let clubColB: SyncedCollection = await self.secondStoreCenter.mainStore.asyncLoadingSynchronizedCollection() + let eventColA: SyncedCollection = await self.storeCenterA.mainStore.asyncLoadingSynchronizedCollection() + let clubColA: SyncedCollection = await self.storeCenterA.mainStore.asyncLoadingSynchronizedCollection() + let eventColB: SyncedCollection = await self.storeCenterB.mainStore.asyncLoadingSynchronizedCollection() + let clubColB: SyncedCollection = await self.storeCenterB.mainStore.asyncLoadingSynchronizedCollection() - if let dataAccessCollection = StoreCenter.main.dataAccessCollection { + if let dataAccessCollection = self.storeCenterA.dataAccessCollection { try await dataAccessCollection.deleteAsync(contentOfs: Array(dataAccessCollection)) } try await eventColA.deleteAsync(contentOfs: Array(eventColA)) try await clubColA.deleteAsync(contentOfs: Array(clubColA)) - let _ = try await self.secondStoreCenter.testSynchronizeOnceAsync() + let _ = try await self.storeCenterB.testSynchronizeOnceAsync() #expect(eventColB.count == 0) #expect(clubColB.count == 0) @@ -169,11 +191,11 @@ struct SyncDataAccessTests { try await eventColA.addOrUpdateAsync(contentOfs: [event1A, event2A]) // Share with user2 - try await StoreCenter.main.setAuthorizedUsersAsync(for: event1A, users: [userId2]) - try await StoreCenter.main.setAuthorizedUsersAsync(for: event2A, users: [userId2]) + try await self.storeCenterA.setAuthorizedUsersAsync(for: event1A, users: [userId2]) + try await self.storeCenterA.setAuthorizedUsersAsync(for: event2A, users: [userId2]) - var dataB = try await self.secondStoreCenter.testSynchronizeOnceAsync() - var syncDataB = try SyncData(data: dataB, storeCenter: self.secondStoreCenter) + var dataB = try await self.storeCenterB.testSynchronizeOnceAsync() + var syncDataB = try SyncData(data: dataB, storeCenter: self.storeCenterB) #expect(syncDataB.grants.count == 2) @@ -186,10 +208,10 @@ struct SyncDataAccessTests { #expect(clubColB.count == 1) // Remove sharing from user2 - try await StoreCenter.main.setAuthorizedUsersAsync(for: event1A, users: []) + try await self.storeCenterA.setAuthorizedUsersAsync(for: event1A, users: []) - dataB = try await self.secondStoreCenter.testSynchronizeOnceAsync() - syncDataB = try SyncData(data: dataB, storeCenter: self.secondStoreCenter) + dataB = try await self.storeCenterB.testSynchronizeOnceAsync() + syncDataB = try SyncData(data: dataB, storeCenter: self.storeCenterB) #expect(syncDataB.revocations.count == 1) #expect(syncDataB.revocationParents.count == 1) @@ -204,27 +226,27 @@ struct SyncDataAccessTests { /// Here we want to test that the first Club is removed and the second one is received @Test func testRelationshipChange() async throws { - guard let userId1 = StoreCenter.main.userId else { + guard let userId1 = self.storeCenterA.userId else { throw TestError.notAuthenticated } - guard let userId2 = self.secondStoreCenter.userId else { + guard let userId2 = self.storeCenterB.userId else { throw TestError.notAuthenticated } // Setup - let eventColA: SyncedCollection = await StoreCenter.main.mainStore.asyncLoadingSynchronizedCollection() - let clubColA: SyncedCollection = await StoreCenter.main.mainStore.asyncLoadingSynchronizedCollection() - let eventColB: SyncedCollection = await self.secondStoreCenter.mainStore.asyncLoadingSynchronizedCollection() - let clubColB: SyncedCollection = await self.secondStoreCenter.mainStore.asyncLoadingSynchronizedCollection() + let eventColA: SyncedCollection = await self.storeCenterA.mainStore.asyncLoadingSynchronizedCollection() + let clubColA: SyncedCollection = await self.storeCenterA.mainStore.asyncLoadingSynchronizedCollection() + let eventColB: SyncedCollection = await self.storeCenterB.mainStore.asyncLoadingSynchronizedCollection() + let clubColB: SyncedCollection = await self.storeCenterB.mainStore.asyncLoadingSynchronizedCollection() - if let dataAccessCollection = StoreCenter.main.dataAccessCollection { + if let dataAccessCollection = self.storeCenterA.dataAccessCollection { try await dataAccessCollection.deleteAsync(contentOfs: Array(dataAccessCollection)) } try await eventColA.deleteAsync(contentOfs: Array(eventColA)) try await clubColA.deleteAsync(contentOfs: Array(clubColA)) - let _ = try await self.secondStoreCenter.testSynchronizeOnceAsync() + let _ = try await self.storeCenterB.testSynchronizeOnceAsync() #expect(eventColB.count == 0) #expect(clubColB.count == 0) @@ -239,17 +261,17 @@ struct SyncDataAccessTests { try await eventColA.addOrUpdateAsync(instance: eventA) // Share with user2 - try await StoreCenter.main.setAuthorizedUsersAsync(for: eventA, users: [userId2]) - let _ = try await self.secondStoreCenter.testSynchronizeOnceAsync() + try await self.storeCenterA.setAuthorizedUsersAsync(for: eventA, users: [userId2]) + let _ = try await self.storeCenterB.testSynchronizeOnceAsync() #expect(eventColB.count == 1) #expect(clubColB.count == 1) // Change the club eventA.club = club2A.id try await eventColA.addOrUpdateAsync(instance: eventA) - let dataB = try await self.secondStoreCenter.testSynchronizeOnceAsync() + let dataB = try await self.storeCenterB.testSynchronizeOnceAsync() - let syncDataB = try SyncData(data: dataB, storeCenter: self.secondStoreCenter) + let syncDataB = try SyncData(data: dataB, storeCenter: self.storeCenterB) #expect(syncDataB.sharedRelationshipSets.count == 1) #expect(syncDataB.sharedRelationshipRemovals.count == 1) @@ -265,29 +287,29 @@ struct SyncDataAccessTests { /// Here we want to test that the first Club is removed and the second one is received @Test func testRelationshipChangesByAgent() async throws { - guard let userId1 = StoreCenter.main.userId else { + guard let userId1 = self.storeCenterA.userId else { throw TestError.notAuthenticated } - guard let userId2 = self.secondStoreCenter.userId else { + guard let userId2 = self.storeCenterB.userId else { throw TestError.notAuthenticated } // Setup - let eventColA: SyncedCollection = await StoreCenter.main.mainStore.asyncLoadingSynchronizedCollection() - let clubColA: SyncedCollection = await StoreCenter.main.mainStore.asyncLoadingSynchronizedCollection() - let courtsColA: SyncedCollection = await StoreCenter.main.mainStore.asyncLoadingSynchronizedCollection() - let eventColB: SyncedCollection = await self.secondStoreCenter.mainStore.asyncLoadingSynchronizedCollection() - let clubColB: SyncedCollection = await self.secondStoreCenter.mainStore.asyncLoadingSynchronizedCollection() - let courtsColB: SyncedCollection = await self.secondStoreCenter.mainStore.asyncLoadingSynchronizedCollection() + let eventColA: SyncedCollection = await self.storeCenterA.mainStore.asyncLoadingSynchronizedCollection() + let clubColA: SyncedCollection = await self.storeCenterA.mainStore.asyncLoadingSynchronizedCollection() + let courtsColA: SyncedCollection = await self.storeCenterA.mainStore.asyncLoadingSynchronizedCollection() + let eventColB: SyncedCollection = await self.storeCenterB.mainStore.asyncLoadingSynchronizedCollection() + let clubColB: SyncedCollection = await self.storeCenterB.mainStore.asyncLoadingSynchronizedCollection() + let courtsColB: SyncedCollection = await self.storeCenterB.mainStore.asyncLoadingSynchronizedCollection() - if let dataAccessCollection = StoreCenter.main.dataAccessCollection { + if let dataAccessCollection = self.storeCenterA.dataAccessCollection { try await dataAccessCollection.deleteAsync(contentOfs: Array(dataAccessCollection)) } try await eventColA.deleteAsync(contentOfs: Array(eventColA)) try await clubColA.deleteAsync(contentOfs: Array(clubColA)) - let _ = try await self.secondStoreCenter.testSynchronizeOnceAsync() + let _ = try await self.storeCenterB.testSynchronizeOnceAsync() #expect(eventColB.count == 0) #expect(clubColB.count == 0) @@ -304,8 +326,8 @@ struct SyncDataAccessTests { try await courtsColA.addOrUpdateAsync(contentOfs: [court1A, court2A]) // Share with user2 - try await StoreCenter.main.setAuthorizedUsersAsync(for: eventA, users: [userId2]) - let _ = try await self.secondStoreCenter.testSynchronizeOnceAsync() + try await self.storeCenterA.setAuthorizedUsersAsync(for: eventA, users: [userId2]) + let _ = try await self.storeCenterB.testSynchronizeOnceAsync() guard let eventB = eventColB.first else { throw TestError.missingEvent @@ -319,7 +341,7 @@ struct SyncDataAccessTests { eventB.club = club2B.id try await eventColB.addOrUpdateAsync(instance: eventB) - let _ = try await StoreCenter.main.testSynchronizeOnceAsync() + let _ = try await self.storeCenterA.testSynchronizeOnceAsync() #expect(eventA.club == club2B.id) #expect(clubColB.count == 1) diff --git a/PadelClubDataTests/SynchronizationTests.swift b/PadelClubDataTests/SynchronizationTests.swift index 45b8bf6..7edbaec 100644 --- a/PadelClubDataTests/SynchronizationTests.swift +++ b/PadelClubDataTests/SynchronizationTests.swift @@ -73,6 +73,7 @@ struct SynchronizationTests { // Cleanup let eventCollection1: SyncedCollection = await StoreCenter.main.mainStore.asyncLoadingSynchronizedCollection() + try await eventCollection1.loadOnceAsync() #expect(eventCollection1.hasLoaded == true) try await eventCollection1.deleteAsync(contentOfs: Array(eventCollection1))