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)
}
}