Test project version recovery
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user