76 lines
2.9 KiB
Swift
76 lines
2.9 KiB
Swift
import Foundation
|
|
import Testing
|
|
import ShotdeckCore
|
|
|
|
@Test
|
|
func appSupportPathsCreatesEveryNamedDirectory() throws {
|
|
let temporaryRoot = FileManager.default.temporaryDirectory
|
|
.appendingPathComponent("shotdeck-paths-\(UUID().uuidString)", isDirectory: true)
|
|
defer { try? FileManager.default.removeItem(at: temporaryRoot) }
|
|
|
|
let root = temporaryRoot.appendingPathComponent("root", isDirectory: true)
|
|
let outbox = temporaryRoot.appendingPathComponent("outbox", isDirectory: true)
|
|
let watchFolder = temporaryRoot.appendingPathComponent("watch", isDirectory: true)
|
|
|
|
let paths = try AppSupportPaths(root: root, outbox: outbox, watchFolder: watchFolder)
|
|
|
|
#expect(directoryExists(paths.root))
|
|
#expect(directoryExists(paths.spool))
|
|
#expect(directoryExists(paths.archive))
|
|
#expect(directoryExists(paths.outbox))
|
|
#expect(directoryExists(paths.watchFolder))
|
|
|
|
#expect(paths.spool.path == root.appendingPathComponent("spool", isDirectory: true).path)
|
|
#expect(paths.archive.path == root.appendingPathComponent("archive", isDirectory: true).path)
|
|
}
|
|
|
|
@Test
|
|
func sessionAndArchiveDirectoriesAreDistinctUnderTheRightParents() throws {
|
|
let temporaryRoot = FileManager.default.temporaryDirectory
|
|
.appendingPathComponent("shotdeck-dirs-\(UUID().uuidString)", isDirectory: true)
|
|
defer { try? FileManager.default.removeItem(at: temporaryRoot) }
|
|
|
|
let paths = try AppSupportPaths(
|
|
root: temporaryRoot.appendingPathComponent("root", isDirectory: true),
|
|
outbox: temporaryRoot.appendingPathComponent("outbox", isDirectory: true),
|
|
watchFolder: temporaryRoot.appendingPathComponent("watch", isDirectory: true)
|
|
)
|
|
|
|
let sessionID = UUID()
|
|
let sessionDirectory = paths.sessionDirectory(sessionID)
|
|
let archiveDirectory = paths.archiveDirectory(sessionID)
|
|
|
|
#expect(sessionDirectory.path != archiveDirectory.path)
|
|
#expect(sessionDirectory.deletingLastPathComponent().path == paths.spool.path)
|
|
#expect(archiveDirectory.deletingLastPathComponent().path == paths.archive.path)
|
|
#expect(sessionDirectory.lastPathComponent == sessionID.uuidString)
|
|
#expect(archiveDirectory.lastPathComponent == sessionID.uuidString)
|
|
}
|
|
|
|
@Test
|
|
func dubaiTimeStampRendersAKnownInstantInAsiaDubai() throws {
|
|
var calendar = Calendar(identifier: .gregorian)
|
|
let dubai = try #require(TimeZone(identifier: "Asia/Dubai"))
|
|
calendar.timeZone = dubai
|
|
|
|
let date = try #require(
|
|
calendar.date(from: DateComponents(
|
|
year: 2026,
|
|
month: 8,
|
|
day: 30,
|
|
hour: 13,
|
|
minute: 42,
|
|
second: 5
|
|
))
|
|
)
|
|
|
|
#expect(DubaiTime.stamp(date) == "30 Aug 2026, 13:42 Dubai")
|
|
#expect(DubaiTime.fileStamp(date) == "20260830-134205")
|
|
}
|
|
|
|
private func directoryExists(_ url: URL) -> Bool {
|
|
var isDirectory: ObjCBool = false
|
|
let exists = FileManager.default.fileExists(atPath: url.path, isDirectory: &isDirectory)
|
|
return exists && isDirectory.boolValue
|
|
}
|