Test project version recovery
This commit is contained in:
@@ -77,6 +77,53 @@ final class LocalSongProjectStoreTests: XCTestCase {
|
|||||||
XCTAssertEqual(savedProject.selectedInstrumentIDs, ["oud", "violin"])
|
XCTAssertEqual(savedProject.selectedInstrumentIDs, ["oud", "violin"])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testRestoresPersistedProjectVersionAndKeepsVersionHistory() async throws {
|
||||||
|
let store = LocalSongProjectStore(directoryURL: temporaryDirectoryURL)
|
||||||
|
let restoredAt = Date(timeIntervalSince1970: 900)
|
||||||
|
var project = SongProject(
|
||||||
|
id: "version-recovery-project",
|
||||||
|
title: "Original Direction",
|
||||||
|
idea: "Start with acoustic instruments",
|
||||||
|
genres: [GenreStyle(id: "folk", name: "Folk")],
|
||||||
|
lyrics: Lyrics(text: "Original lyrics"),
|
||||||
|
createdAt: Date(timeIntervalSince1970: 100),
|
||||||
|
updatedAt: Date(timeIntervalSince1970: 200)
|
||||||
|
)
|
||||||
|
|
||||||
|
_ = project.createVersion(
|
||||||
|
id: "original-version",
|
||||||
|
label: "Original direction",
|
||||||
|
createdAt: Date(timeIntervalSince1970: 300)
|
||||||
|
)
|
||||||
|
project.title = "Later Direction"
|
||||||
|
project.idea = "Add electronic elements"
|
||||||
|
project.selectInstrument(InstrumentTrack(instrumentId: "oud"))
|
||||||
|
project.lyrics = Lyrics(text: "Later lyrics")
|
||||||
|
_ = project.createVersion(
|
||||||
|
id: "later-version",
|
||||||
|
label: "Later direction",
|
||||||
|
createdAt: Date(timeIntervalSince1970: 400)
|
||||||
|
)
|
||||||
|
project.title = "Unsaved direction"
|
||||||
|
|
||||||
|
try await store.create(project)
|
||||||
|
|
||||||
|
var recoveredProject = try await store.open(id: project.id)
|
||||||
|
XCTAssertTrue(recoveredProject.restoreVersion(id: "original-version", restoredAt: restoredAt))
|
||||||
|
try await store.save(recoveredProject)
|
||||||
|
|
||||||
|
let restoredProject = try await store.open(id: project.id)
|
||||||
|
|
||||||
|
XCTAssertEqual(restoredProject.title, "Original Direction")
|
||||||
|
XCTAssertEqual(restoredProject.idea, "Start with acoustic instruments")
|
||||||
|
XCTAssertEqual(restoredProject.genres, [GenreStyle(id: "folk", name: "Folk")])
|
||||||
|
XCTAssertTrue(restoredProject.instruments.isEmpty)
|
||||||
|
XCTAssertEqual(restoredProject.lyrics, Lyrics(text: "Original lyrics"))
|
||||||
|
XCTAssertEqual(restoredProject.updatedAt, restoredAt)
|
||||||
|
XCTAssertEqual(restoredProject.versions.map(\.id), ["original-version", "later-version"])
|
||||||
|
XCTAssertEqual(restoredProject.version(id: "later-version")?.snapshot.title, "Later Direction")
|
||||||
|
}
|
||||||
|
|
||||||
func testLoadsProjectListSortedByMostRecentUpdate() async throws {
|
func testLoadsProjectListSortedByMostRecentUpdate() async throws {
|
||||||
let store = LocalSongProjectStore(directoryURL: temporaryDirectoryURL)
|
let store = LocalSongProjectStore(directoryURL: temporaryDirectoryURL)
|
||||||
let older = SongProject(
|
let older = SongProject(
|
||||||
|
|||||||
+1
-1
@@ -115,7 +115,7 @@ requirement is missing and blocks implementation, record it in
|
|||||||
- [x] Add validation for contradictory/invalid project settings.
|
- [x] Add validation for contradictory/invalid project settings.
|
||||||
- [x] Add loading, offline and provider-error states.
|
- [x] Add loading, offline and provider-error states.
|
||||||
- [x] Add accessibility labels and keyboard navigation.
|
- [x] Add accessibility labels and keyboard navigation.
|
||||||
- [ ] Test project/version recovery.
|
- [x] Test project/version recovery.
|
||||||
- [ ] Test AI output against locked user choices.
|
- [ ] Test AI output against locked user choices.
|
||||||
- [ ] Test selected instruments influence compiled song-generation
|
- [ ] Test selected instruments influence compiled song-generation
|
||||||
context.
|
context.
|
||||||
|
|||||||
Reference in New Issue
Block a user