// // StoredCollectionTests.swift // LeStorageTests // // Created by Laurent Morvillier on 16/10/2024. // import Testing @testable import LeStorage struct Error: Swift.Error, CustomStringConvertible { let description: String init(_ description: String) { self.description = description } } struct StoredCollectionTests { var collection: StoredCollection init() async { collection = await StoreCenter.main.mainStore.asyncLoadingStoredCollection(inMemory: true) collection.reset() } @Test func testInitialization() async throws { #expect(self.collection.hasLoaded) #expect(collection.items.count == 0) } @Test func testAddOrUpdate() async throws { let item = MockStorable(id: "1", name: "Test") collection.addOrUpdate(instance: item) #expect(collection.items.count == 1) if let first = collection.items.first { #expect(first.id == "1") } else { Issue.record("missing record") } } @Test func testDelete() async throws { let item = MockStorable(id: "1", name: "Test") collection.addOrUpdate(instance: item) #expect(collection.items.count == 1) collection.delete(instance: item) #expect(collection.items.isEmpty) } @Test func testFindById() async throws { let item = MockStorable(id: "1", name: "Test") collection.addOrUpdate(instance: item) if let foundItem = collection.findById("1") { #expect(foundItem.id == "1") } else { Issue.record("missing item") } } @Test func testDeleteById() async throws { let item = MockStorable(id: "1", name: "Test") collection.addOrUpdate(instance: item) collection.deleteByStringId("1") let search = collection.findById("1") #expect(search == nil) } @Test func testAddOrUpdateMultiple() async throws { let items = [ MockStorable(id: "1", name: "Test1"), MockStorable(id: "2", name: "Test2"), ] collection.addOrUpdate(contentOfs: items) #expect(collection.items.count == 2) } @Test func testDeleteAll() async throws { let items = [ MockStorable(id: "1", name: "Test1"), MockStorable(id: "2", name: "Test2"), ] collection.addOrUpdate(contentOfs: items) #expect(collection.items.count == 2) collection.clear() #expect(collection.items.isEmpty) } @Test func testRandomAccessCollection() async throws { let items = [ MockStorable(id: "1", name: "Test1"), MockStorable(id: "2", name: "Test2"), MockStorable(id: "3", name: "Test3"), ] collection.addOrUpdate(contentOfs: items) #expect(collection.startIndex == 0) #expect(collection.endIndex == 3) if collection.count > 2 { #expect(collection[1].name == "Test2") } else { Issue.record("count not good") } } } // Mock Storable for testing purposes class MockStorable: ModelObject, Storable { var id: String = Store.randomId() var name: String init(id: String, name: String) { self.id = id self.name = name } static func resourceName() -> String { return "mocks" } func copy(from other: any LeStorage.Storable) { } static func relationships() -> [LeStorage.Relationship] { return [] } static func storeParent() -> Bool { return false } }