Files
music-assistant/Tests/MusicAssistantCoreTests/LocalInstrumentCatalogTests.swift
T
2026-09-14 01:08:30 +02:00

66 lines
2.8 KiB
Swift

import MusicAssistantCore
import XCTest
final class LocalInstrumentCatalogTests: XCTestCase {
func testWorldwideCatalogCoversRequiredRegionsAndInstrumentTypes() {
let catalog = LocalInstrumentCatalog()
let expectedRegions = [
"Western", "Middle East", "Africa", "South Asia", "East Asia", "Southeast Asia", "Latin America", "Modern"
]
let expectedInstrumentIDs = [
"piano", "oud", "djembe", "sitar", "erhu", "angklung", "charango", "bagpipes", "synthesizer"
]
XCTAssertGreaterThanOrEqual(catalog.items.count, 200)
XCTAssertTrue(expectedRegions.allSatisfy { region in
catalog.items.contains { $0.regionOrigin?.contains(region) == true }
})
XCTAssertTrue(expectedInstrumentIDs.allSatisfy { id in
catalog.items.contains { $0.id == id }
})
}
func testWorldwideCatalogHasUniqueStableInstrumentIDs() {
let items = LocalInstrumentCatalog.worldwideItems
XCTAssertEqual(Set(items.map(\.id)).count, items.count)
XCTAssertTrue(items.allSatisfy { !$0.name.isEmpty && !$0.familyCategory.isEmpty })
}
func testSearchMatchesNamesAliasesAndArabicSearchTerms() {
let catalog = LocalInstrumentCatalog()
XCTAssertEqual(catalog.instruments(matching: "concert flute").map(\.id), ["flute"])
XCTAssertEqual(catalog.instruments(matching: "nylon string").map(\.id), ["classical-guitar"])
XCTAssertEqual(catalog.instruments(matching: "عود").map(\.id), ["oud"])
}
func testFamilyCategoriesAndFilteringComeFromCatalogMetadata() {
let catalog = LocalInstrumentCatalog()
let pluckedStrings = catalog.instruments(matching: "", familyCategory: "Plucked strings")
XCTAssertTrue(catalog.familyCategories.contains("Plucked strings"))
XCTAssertTrue(pluckedStrings.contains { $0.id == "oud" })
XCTAssertTrue(pluckedStrings.allSatisfy { $0.familyCategory == "Plucked strings" })
XCTAssertTrue(
catalog.instruments(matching: "guitar", familyCategory: "Plucked strings")
.allSatisfy { $0.familyCategory == "Plucked strings" }
)
}
func testRegionsAndFilteringComeFromCatalogMetadata() {
let catalog = LocalInstrumentCatalog()
let middleEasternPluckedStrings = catalog.instruments(
matching: "",
familyCategory: "Plucked strings",
regionOrigin: "Middle East"
)
XCTAssertTrue(catalog.regionsOfOrigin.contains("Middle East"))
XCTAssertFalse(middleEasternPluckedStrings.isEmpty)
XCTAssertTrue(middleEasternPluckedStrings.contains { $0.id == "oud" })
XCTAssertTrue(middleEasternPluckedStrings.allSatisfy { $0.regionOrigin == "Middle East" })
XCTAssertTrue(middleEasternPluckedStrings.allSatisfy { $0.familyCategory == "Plucked strings" })
}
}