You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
3.5 KiB
140 lines
3.5 KiB
//
|
|
// 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<MockStorable>
|
|
|
|
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 []
|
|
}
|
|
|
|
}
|
|
|