Files
2026-09-13 20:21:10 +02:00

105 lines
3.8 KiB
Swift

import Foundation
import MusicAssistantCore
import XCTest
final class ProjectAutosaveServiceTests: XCTestCase {
private var temporaryDirectoryURL: URL!
override func setUpWithError() throws {
temporaryDirectoryURL = FileManager.default.temporaryDirectory
.appendingPathComponent("music-assistant-autosave-tests")
.appendingPathComponent(UUID().uuidString)
}
override func tearDownWithError() throws {
if let temporaryDirectoryURL {
try? FileManager.default.removeItem(at: temporaryDirectoryURL)
}
temporaryDirectoryURL = nil
}
func testAutosavePersistsCurrentProjectWithoutCreatingExcessiveVersions() async throws {
let store = LocalSongProjectStore(directoryURL: temporaryDirectoryURL)
let autosaver = ProjectAutosaveService(
store: store,
policy: ProjectAutosavePolicy(minimumVersionInterval: 300)
)
var project = SongProject(
id: "autosaved-project",
title: "Draft",
idea: "Initial idea",
updatedAt: Date(timeIntervalSince1970: 50)
)
try await store.create(project)
let firstAutosave = try await autosaver.autosave(
project,
at: Date(timeIntervalSince1970: 100)
)
XCTAssertTrue(firstAutosave.didCreateVersion)
XCTAssertEqual(firstAutosave.project.versions.count, 1)
XCTAssertEqual(firstAutosave.project.versions.first?.snapshot.title, "Draft")
XCTAssertEqual(firstAutosave.project.updatedAt, Date(timeIntervalSince1970: 100))
project = firstAutosave.project
project.title = "Draft with small edit"
let rapidAutosave = try await autosaver.autosave(
project,
at: Date(timeIntervalSince1970: 120)
)
XCTAssertFalse(rapidAutosave.didCreateVersion)
XCTAssertEqual(rapidAutosave.project.versions.count, 1)
XCTAssertEqual(rapidAutosave.project.title, "Draft with small edit")
XCTAssertEqual(rapidAutosave.project.updatedAt, Date(timeIntervalSince1970: 120))
let storedRapidAutosave = try await store.open(id: project.id)
XCTAssertEqual(storedRapidAutosave, rapidAutosave.project)
project = rapidAutosave.project
project.idea = "Later autosaved idea"
let laterAutosave = try await autosaver.autosave(
project,
at: Date(timeIntervalSince1970: 420)
)
XCTAssertTrue(laterAutosave.didCreateVersion)
XCTAssertEqual(laterAutosave.project.versions.count, 2)
XCTAssertEqual(laterAutosave.project.versions.last?.snapshot.idea, "Later autosaved idea")
XCTAssertEqual(laterAutosave.project.updatedAt, Date(timeIntervalSince1970: 420))
}
func testAutosaveSkipsVersionWhenCurrentSnapshotMatchesLatestVersion() async throws {
let store = LocalSongProjectStore(directoryURL: temporaryDirectoryURL)
let autosaver = ProjectAutosaveService(
store: store,
policy: ProjectAutosavePolicy(minimumVersionInterval: 300)
)
var project = SongProject(
id: "unchanged-autosave-project",
title: "Stable",
idea: "No meaningful changes"
)
_ = project.createVersion(
id: "version-1",
label: "Stable checkpoint",
createdAt: Date(timeIntervalSince1970: 100)
)
try await store.create(project)
let autosave = try await autosaver.autosave(
project,
at: Date(timeIntervalSince1970: 1_000)
)
XCTAssertFalse(autosave.didCreateVersion)
XCTAssertEqual(autosave.project.versions.count, 1)
XCTAssertEqual(autosave.project.updatedAt, Date(timeIntervalSince1970: 1_000))
}
}