Model vocalist section assignments
This commit is contained in:
@@ -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"))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user