Neon-Vision-Editor/Neon Vision EditorTests/RecentFilesStoreTests.swift

71 lines
2.5 KiB
Swift
Raw Permalink Normal View History

2026-03-15 14:56:58 +00:00
import XCTest
@testable import Neon_Vision_Editor
final class RecentFilesStoreTests: XCTestCase {
private var temporaryDirectoryURL: URL!
override func setUpWithError() throws {
temporaryDirectoryURL = FileManager.default.temporaryDirectory
.appendingPathComponent(UUID().uuidString, isDirectory: true)
try FileManager.default.createDirectory(at: temporaryDirectoryURL, withIntermediateDirectories: true)
clearStore()
}
override func tearDownWithError() throws {
clearStore()
if let temporaryDirectoryURL {
try? FileManager.default.removeItem(at: temporaryDirectoryURL)
}
temporaryDirectoryURL = nil
}
func testRememberOrdersMostRecentFirst() throws {
let first = try makeFile(named: "first.txt")
let second = try makeFile(named: "second.txt")
RecentFilesStore.remember(first)
RecentFilesStore.remember(second)
XCTAssertEqual(RecentFilesStore.items(limit: 10).map(\.title), ["second.txt", "first.txt"])
}
func testPinnedItemsStayAtTop() throws {
let first = try makeFile(named: "first.txt")
let second = try makeFile(named: "second.txt")
let third = try makeFile(named: "third.txt")
RecentFilesStore.remember(first)
RecentFilesStore.remember(second)
RecentFilesStore.remember(third)
RecentFilesStore.togglePinned(first)
let items = RecentFilesStore.items(limit: 10)
XCTAssertEqual(items.map(\.title), ["first.txt", "third.txt", "second.txt"])
XCTAssertEqual(items.first?.isPinned, true)
}
func testClearUnpinnedRetainsPinnedItems() throws {
let pinned = try makeFile(named: "pinned.txt")
let unpinned = try makeFile(named: "unpinned.txt")
RecentFilesStore.remember(pinned)
RecentFilesStore.remember(unpinned)
RecentFilesStore.togglePinned(pinned)
RecentFilesStore.clearUnpinned()
XCTAssertEqual(RecentFilesStore.items(limit: 10).map(\.title), ["pinned.txt"])
}
private func makeFile(named name: String) throws -> URL {
let url = temporaryDirectoryURL.appendingPathComponent(name)
try "sample".write(to: url, atomically: true, encoding: .utf8)
return url
}
private func clearStore() {
let defaults = UserDefaults.standard
defaults.removeObject(forKey: "RecentFilesPathsV1")
defaults.removeObject(forKey: "PinnedRecentFilesPathsV1")
}
}