Model vocalist section assignments

This commit is contained in:
Codex
2026-09-13 13:19:33 +02:00
parent 1993800f27
commit 1b523a924d
3 changed files with 88 additions and 1 deletions
@@ -191,4 +191,48 @@ final class SongProjectModelTests: XCTestCase {
XCTAssertEqual(project.selectedInstrumentIDs, ["violin"])
XCTAssertEqual(project.instrumentTrack(for: "oud")?.placements, [introPlacement])
}
func testMultipleVocalistsCanBeAssignedToSections() {
var project = SongProject(
id: "project-6",
title: "Vocal Arrangement",
idea: "Lead and harmony share selected sections"
)
let lead = Vocalist(
id: "lead",
label: "Lead",
voiceType: "tenor",
genderSelection: "male",
performanceStyle: "sung",
assignedSections: ["verse", "verse"]
)
let harmony = Vocalist(
id: "harmony",
label: "Harmony",
voiceType: "alto",
genderSelection: "female",
performanceStyle: "harmony"
)
project.upsertVocalist(lead)
project.upsertVocalist(harmony)
project.assignSection("chorus", toVocalistID: "lead")
project.assignSection("chorus", toVocalistID: "lead")
project.assignSection("chorus", toVocalistID: "harmony")
project.assignSection("bridge", toVocalistID: "harmony")
XCTAssertEqual(project.vocalistIDs, ["lead", "harmony"])
XCTAssertEqual(project.vocalist(for: "lead")?.assignedSections, ["verse", "chorus"])
XCTAssertEqual(project.vocalist(for: "harmony")?.assignedSections, ["chorus", "bridge"])
XCTAssertEqual(project.vocalistsAssigned(toSectionID: "chorus").map(\.id), ["lead", "harmony"])
project.unassignSection("chorus", fromVocalistID: "lead")
XCTAssertEqual(project.vocalist(for: "lead")?.assignedSections, ["verse"])
XCTAssertEqual(project.vocalistsAssigned(toSectionID: "chorus").map(\.id), ["harmony"])
project.removeVocalist(id: "harmony")
XCTAssertNil(project.vocalist(for: "harmony"))
}
}