Zum Inhalt

apple/PhysarumApp/Tests/PresetStoreTests.swift

import XCTest
@testable import Physarum
import PhysarumEngine

final class PresetStoreTests: XCTestCase {
    private func tempStore() -> PresetStore {
        let dir = URL(fileURLWithPath: NSTemporaryDirectory())
            .appendingPathComponent("pstest-\(UUID().uuidString)", isDirectory: true)
        return PresetStore(baseDir: dir)
    }

    private func make(_ id: String, _ name: String) -> Preset {
        var p = PresetCatalog.fallbackPreset
        p.id = id
        p.name = name
        p.builtIn = false
        return p
    }

    func testSaveLoadRoundTrip() throws {
        let store = tempStore()
        try store.save(make("a", "Alpha"))
        try store.save(make("b", "Beta"))
        let loaded = store.loadCustom()
        XCTAssertEqual(loaded.map { $0.id }, ["a", "b"])
        XCTAssertEqual(loaded.first?.name, "Alpha")
        XCTAssertEqual(loaded.first?.builtIn, false)
    }

    func testOverwriteKeepsSingleEntry() throws {
        let store = tempStore()
        try store.save(make("a", "A"))
        try store.save(make("a", "A2"))
        let loaded = store.loadCustom()
        XCTAssertEqual(loaded.count, 1)
        XCTAssertEqual(loaded.first?.name, "A2")
    }

    func testDelete() throws {
        let store = tempStore()
        try store.save(make("a", "A"))
        try store.save(make("b", "B"))
        store.delete("a")
        XCTAssertEqual(store.loadCustom().map { $0.id }, ["b"])
    }

    func testReorder() throws {
        let store = tempStore()
        try store.save(make("a", "A"))
        try store.save(make("b", "B"))
        try store.save(make("c", "C"))
        store.reorder(["c", "a", "b"])
        XCTAssertEqual(store.loadCustom().map { $0.id }, ["c", "a", "b"])
    }

    func testForcesCustomFlag() throws {
        let store = tempStore()
        var builtin = make("x", "X")
        builtin.builtIn = true        // store must force it to false
        try store.save(builtin)
        XCTAssertEqual(store.loadCustom().first?.builtIn, false)
    }
}