Enforce user locks for AI updates
This commit is contained in:
@@ -105,6 +105,42 @@ final class SongProjectGenerationDirectorTests: XCTestCase {
|
||||
let requestCount = await aiService.recordedGenerationRequests.count
|
||||
XCTAssertEqual(requestCount, 0)
|
||||
}
|
||||
|
||||
func testGenerateCompleteProjectPreservesLockedAndManualSeedValues() async throws {
|
||||
let seedProject = SongProject(
|
||||
id: "locked-seed",
|
||||
title: "Seed",
|
||||
idea: "Original",
|
||||
genres: [GenreStyle(id: "arabic-pop", name: "Arabic Pop")],
|
||||
bpm: ManualAutoValue(mode: .manual, value: 96),
|
||||
lyrics: Lyrics(text: "User-approved lyrics"),
|
||||
userLocks: SongProjectUserLocks(scopes: [.genres, .lyrics])
|
||||
)
|
||||
let aiService = RecordingGenerationAIService(
|
||||
generationResult: SongProjectGenerationResult(
|
||||
project: SongProject(
|
||||
title: "Generated Title",
|
||||
idea: "Generated idea",
|
||||
genres: [GenreStyle(id: "rock", name: "Rock")],
|
||||
bpm: ManualAutoValue(mode: .auto, value: 120),
|
||||
lyrics: Lyrics(text: "AI lyrics")
|
||||
)
|
||||
)
|
||||
)
|
||||
let director = SongProjectGenerationDirector(aiService: aiService)
|
||||
|
||||
let result = try await director.generateCompleteProject(
|
||||
fromIdea: "Generate around the locked choices",
|
||||
seedProject: seedProject
|
||||
)
|
||||
|
||||
XCTAssertEqual(result.project.title, "Generated Title")
|
||||
XCTAssertEqual(result.project.idea, "Generated idea")
|
||||
XCTAssertEqual(result.project.genres, seedProject.genres)
|
||||
XCTAssertEqual(result.project.lyrics, seedProject.lyrics)
|
||||
XCTAssertEqual(result.project.bpm, seedProject.bpm)
|
||||
XCTAssertEqual(result.project.userLocks, seedProject.userLocks)
|
||||
}
|
||||
}
|
||||
|
||||
private actor RecordingGenerationAIService: AIService {
|
||||
|
||||
Reference in New Issue
Block a user