import XCTest
import PhysarumEngine
@testable import Physarum
final class SlotBackendTests: XCTestCase {
private func preset(_ name: String) -> Preset {
var p = PresetCatalog.fallbackPreset; p.name = name; p.builtIn = false; return p
}
func testPayloadRoundTripPreservesSlotsPinsVersion() {
var s = PresetSlots()
s.seed(.init(presets: [preset("A"), preset("B")], version: 3, pinnedSlotIDs: ["slot-01"]))
s.overwrite(slotID: "slot-00", preset: preset("Mine"))
let restored = PresetSlots(payload: s.payload)
XCTAssertEqual(restored, s)
}
func testInMemoryBackendPersists() {
let backend = InMemorySlotBackend()
var s = PresetSlots()
s.fill(index: 5, preset: preset("E"), userOwned: true)
backend.write(s.payload)
XCTAssertEqual(PresetSlots(payload: backend.read()), s)
}
}
extension SlotBackendTests {
func testFileBackendRoundTrips() {
let url = URL(fileURLWithPath: NSTemporaryDirectory())
.appendingPathComponent("slots-\(UUID().uuidString).json")
let backend = FileSlotBackend(url: url)
var s = PresetSlots(); s.fill(index: 2, preset: preset("F"), userOwned: true)
backend.write(s.payload)
XCTAssertEqual(PresetSlots(payload: FileSlotBackend(url: url).read()), s)
}
}