Add vocalist preset selector

This commit is contained in:
diyaa
2026-09-15 19:07:55 +02:00
parent 297b791a3e
commit b43c5416f2
9 changed files with 392 additions and 13 deletions
@@ -0,0 +1,45 @@
import MusicAssistantCore
import XCTest
final class LocalVocalistPresetCatalogTests: XCTestCase {
func testCatalogSearchesVocalistRolesAndArabicTerms() {
let catalog = LocalVocalistPresetCatalog()
XCTAssertEqual(
catalog.vocalists(matching: "soprano").map(\.id),
["mezzo-soprano", "soprano"]
)
XCTAssertEqual(catalog.vocalists(matching: "خليجي").map(\.id), ["khaleeji-female-lead", "khaleeji-male-lead"])
XCTAssertEqual(
catalog.vocalists(matching: "", familyCategory: "Harmony & Groups").map(\.id),
[
"children-choir",
"duet",
"female-choir",
"female-harmony",
"male-choir",
"male-harmony",
"mixed-choir",
"mixed-harmony",
"vocal-ensemble"
]
)
}
func testPresetAddsAndRemovesCompleteVocalistMetadataOnProject() {
let preset = LocalVocalistPresetCatalog()
.vocalists(matching: "Arabic Female Lead")
.first!
var project = SongProject(title: "Vocalist Project", idea: "Choose a vocalist")
project.upsertVocalist(preset.vocalist)
XCTAssertEqual(project.vocalist(for: preset.id), preset.vocalist)
XCTAssertEqual(project.vocalist(for: preset.id)?.voiceType, "ornamented female lead")
XCTAssertEqual(project.vocalist(for: preset.id)?.performanceStyle, "Arabic melodic delivery")
project.removeVocalist(id: preset.id)
XCTAssertNil(project.vocalist(for: preset.id))
}
}