Model emotional arc and production directions
This commit is contained in:
@@ -307,4 +307,62 @@ final class SongProjectModelTests: XCTestCase {
|
||||
XCTAssertEqual(project.scale, ManualAutoValue(mode: .manual, value: "minor"))
|
||||
XCTAssertEqual(project.maqam, ManualAutoValue(mode: .auto))
|
||||
}
|
||||
|
||||
func testEmotionalArcAndProductionDirectionsAreModeled() {
|
||||
var project = SongProject(
|
||||
id: "project-9",
|
||||
title: "Arc",
|
||||
idea: "Build from intimate to explosive"
|
||||
)
|
||||
let verseArc = EmotionalArcPoint(
|
||||
id: "arc-verse",
|
||||
sectionID: "verse",
|
||||
emotion: "intimate",
|
||||
energy: 3,
|
||||
direction: "restrained"
|
||||
)
|
||||
let chorusArc = EmotionalArcPoint(
|
||||
id: "arc-chorus",
|
||||
sectionID: "chorus",
|
||||
emotion: "euphoric",
|
||||
energy: 9,
|
||||
direction: "wide and bright"
|
||||
)
|
||||
let verseProduction = ProductionDirection(
|
||||
id: "prod-verse",
|
||||
sectionID: "verse",
|
||||
text: "keep drums minimal"
|
||||
)
|
||||
let chorusProduction = ProductionDirection(
|
||||
id: "prod-chorus",
|
||||
sectionID: "chorus",
|
||||
text: "add layered harmonies and bigger percussion"
|
||||
)
|
||||
|
||||
project.upsertEmotionalArcPoint(verseArc)
|
||||
project.upsertEmotionalArcPoint(chorusArc)
|
||||
project.upsertEmotionalArcPoint(
|
||||
EmotionalArcPoint(
|
||||
id: "arc-verse",
|
||||
sectionID: "verse",
|
||||
emotion: "focused",
|
||||
energy: 4,
|
||||
direction: "slightly warmer"
|
||||
)
|
||||
)
|
||||
project.upsertProductionDirection(verseProduction)
|
||||
project.upsertProductionDirection(chorusProduction)
|
||||
|
||||
XCTAssertEqual(project.emotionalArc.count, 2)
|
||||
XCTAssertEqual(project.emotionalArcPoint(for: "arc-verse")?.emotion, "focused")
|
||||
XCTAssertEqual(project.emotionalArcPoints(forSectionID: "chorus"), [chorusArc])
|
||||
XCTAssertEqual(project.productionDirections(forSectionID: "verse"), [verseProduction])
|
||||
XCTAssertEqual(project.productionDirection(for: "prod-chorus"), chorusProduction)
|
||||
|
||||
project.removeEmotionalArcPoint(id: "arc-chorus")
|
||||
project.removeProductionDirection(id: "prod-verse")
|
||||
|
||||
XCTAssertNil(project.emotionalArcPoint(for: "arc-chorus"))
|
||||
XCTAssertNil(project.productionDirection(for: "prod-verse"))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user