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