Test project version recovery

This commit is contained in:
diyaa
2026-09-15 12:38:56 +02:00
parent 6023214cb3
commit fac99e2c2d
2 changed files with 48 additions and 1 deletions
@@ -77,6 +77,53 @@ final class LocalSongProjectStoreTests: XCTestCase {
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 {
let store = LocalSongProjectStore(directoryURL: temporaryDirectoryURL)
let older = SongProject(