Zum Inhalt

apple/PhysarumApp/Tests/AudioPresetStoreTests.swift

import XCTest
import PhysarumEngine
@testable import Physarum

final class AudioPresetStoreTests: XCTestCase {
    private func tempStore() -> AudioPresetStore {
        AudioPresetStore(baseDir: URL(fileURLWithPath: NSTemporaryDirectory())
            .appendingPathComponent("phys-audiopreset-\(UUID().uuidString)", isDirectory: true))
    }
    private func sampleReactive() -> AudioReactive {
        AudioReactive(enabled: true, gain: 1.5, autoGain: true,
                      routes: [AudioRoute(source: .bass, target: .moveSpeed, depth: 1, mode: .transient)])
    }

    func testSaveLoadRoundTrip() {
        let store = tempStore()
        let cfg = AudioConfig(id: "a1", name: "Club", reactive: sampleReactive())
        try? store.save(cfg)
        let loaded = store.loadAll()
        XCTAssertEqual(loaded.count, 1)
        XCTAssertEqual(loaded.first?.name, "Club")
        XCTAssertEqual(loaded.first?.reactive.gain, 1.5)
        XCTAssertEqual(loaded.first?.reactive.routes.count, 1)
    }
    func testDeleteAndOrder() {
        let store = tempStore()
        try? store.save(AudioConfig(id: "a1", name: "One", reactive: sampleReactive()))
        try? store.save(AudioConfig(id: "a2", name: "Two", reactive: sampleReactive()))
        store.delete("a1")
        XCTAssertEqual(store.loadAll().map(\.id), ["a2"])
    }
    func testReorder() {
        let store = tempStore()
        try? store.save(AudioConfig(id: "a1", name: "One", reactive: sampleReactive()))
        try? store.save(AudioConfig(id: "a2", name: "Two", reactive: sampleReactive()))
        store.reorder(["a2", "a1"])
        XCTAssertEqual(store.loadAll().map(\.id), ["a2", "a1"])
    }
    func testAppLocalEquality() {
        // AudioConfig equality is app-local (engine AudioReactive/AudioRoute are NOT Equatable).
        let base = AudioConfig(id: "a1", name: "Club", reactive: sampleReactive())
        XCTAssertEqual(base, AudioConfig(id: "a1", name: "Club", reactive: sampleReactive()))
        XCTAssertNotEqual(base, AudioConfig(id: "a1", name: "Renamed", reactive: sampleReactive()))
        XCTAssertNotEqual(base, AudioConfig(id: "a2", name: "Club", reactive: sampleReactive()))
        let louder = AudioReactive(enabled: true, gain: 9.0, autoGain: true,
                                   routes: [AudioRoute(source: .bass, target: .moveSpeed, depth: 1, mode: .transient)])
        XCTAssertNotEqual(base, AudioConfig(id: "a1", name: "Club", reactive: louder))
    }
}