TransportSettingsTests: default airDrop, set/get round-trip, garbage stored value falls back to airDrop, oneDriveFolder store/reset, effectiveFolders for both transports, oneDriveFolderUnavailable's errorDescription contains the path. OneDriveLocatorTests: fake home tree under Library/CloudStorage — syncRoots returns only real OneDrive-* directories (ignores a same-named plain file and a GoogleDrive-* one), MMD-named root sorts first; no CloudStorage dir means empty roots and a nil defaultRedlineFolder; resolveOneDriveFolder prefers an existing stored override and falls back to the default when the stored path no longer exists. All against temp dirs, never the real home. ReturnWatcherTests: recordUncommended defaults to true and still records an unmarked PDF (existing AirDrop tests are unaffected); with it set false, an unmarked PDF is neither recorded nor returned by scanNow, and marking it up in place with a real PDFKit ink annotation then re-scanning does record it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZiTXPbPCSjzPVsfoweAbp
126 lines
5.4 KiB
Swift
126 lines
5.4 KiB
Swift
import Foundation
|
|
import Testing
|
|
import ShotdeckCore
|
|
|
|
@Test
|
|
func syncRootsFindsOneDriveDirsMMDFirstIgnoresNonDirsAndOtherProviders() throws {
|
|
let home = try makeFakeHome()
|
|
defer { try? FileManager.default.removeItem(at: home) }
|
|
let cloudStorage = home.appendingPathComponent("Library/CloudStorage", isDirectory: true)
|
|
try FileManager.default.createDirectory(at: cloudStorage, withIntermediateDirectories: true)
|
|
|
|
try FileManager.default.createDirectory(
|
|
at: cloudStorage.appendingPathComponent("OneDrive-Flowmaster", isDirectory: true),
|
|
withIntermediateDirectories: true
|
|
)
|
|
try FileManager.default.createDirectory(
|
|
at: cloudStorage.appendingPathComponent("OneDrive-MMDGROUP", isDirectory: true),
|
|
withIntermediateDirectories: true
|
|
)
|
|
try FileManager.default.createDirectory(
|
|
at: cloudStorage.appendingPathComponent("GoogleDrive-x", isDirectory: true),
|
|
withIntermediateDirectories: true
|
|
)
|
|
// A plain FILE (not a directory) named like a OneDrive root must be ignored.
|
|
FileManager.default.createFile(
|
|
atPath: cloudStorage.appendingPathComponent("OneDrive-notadir").path,
|
|
contents: Data("not a directory".utf8)
|
|
)
|
|
|
|
let roots = OneDriveLocator.syncRoots(home: home, fileManager: .default)
|
|
|
|
#expect(roots.map(\.lastPathComponent) == ["OneDrive-MMDGROUP", "OneDrive-Flowmaster"])
|
|
}
|
|
|
|
@Test
|
|
func syncRootsEmptyAndDefaultFolderNilWithNoCloudStorageDirectory() throws {
|
|
let home = try makeFakeHome()
|
|
defer { try? FileManager.default.removeItem(at: home) }
|
|
// No Library/CloudStorage created at all.
|
|
|
|
let roots = OneDriveLocator.syncRoots(home: home, fileManager: .default)
|
|
#expect(roots.isEmpty)
|
|
|
|
let defaultFolder = OneDriveLocator.defaultRedlineFolder(home: home, fileManager: .default)
|
|
#expect(defaultFolder == nil)
|
|
}
|
|
|
|
@Test
|
|
func defaultRedlineFolderIsFirstSyncRootPlusRedline() throws {
|
|
let home = try makeFakeHome()
|
|
defer { try? FileManager.default.removeItem(at: home) }
|
|
let cloudStorage = home.appendingPathComponent("Library/CloudStorage", isDirectory: true)
|
|
try FileManager.default.createDirectory(
|
|
at: cloudStorage.appendingPathComponent("OneDrive-MMDGROUP", isDirectory: true),
|
|
withIntermediateDirectories: true
|
|
)
|
|
try FileManager.default.createDirectory(
|
|
at: cloudStorage.appendingPathComponent("OneDrive-Flowmaster", isDirectory: true),
|
|
withIntermediateDirectories: true
|
|
)
|
|
|
|
let defaultFolder = try #require(
|
|
OneDriveLocator.defaultRedlineFolder(home: home, fileManager: .default)
|
|
)
|
|
// Derive "expected" from syncRoots() itself (already covered by its own dedicated
|
|
// test) rather than hand-building the path string — FileManager's directory
|
|
// enumeration can canonicalize /var -> /private/var and the two constructions
|
|
// otherwise disagree on that even for a URL that already exists.
|
|
let expectedRoot = try #require(OneDriveLocator.syncRoots(home: home, fileManager: .default).first)
|
|
let expected = expectedRoot.appendingPathComponent("Redline", isDirectory: true)
|
|
#expect(defaultFolder.path == expected.path)
|
|
}
|
|
|
|
@Test
|
|
func resolveOneDriveFolderPrefersAnExistingStoredOverride() throws {
|
|
let home = try makeFakeHome()
|
|
defer { try? FileManager.default.removeItem(at: home) }
|
|
let cloudStorage = home.appendingPathComponent("Library/CloudStorage", isDirectory: true)
|
|
try FileManager.default.createDirectory(
|
|
at: cloudStorage.appendingPathComponent("OneDrive-MMDGROUP", isDirectory: true),
|
|
withIntermediateDirectories: true
|
|
)
|
|
|
|
let suite = try makeTransportDefaultsSuite()
|
|
defer { tearDownTransportSuite(suite) }
|
|
let override = try makeTransportTemporaryDirectory(prefix: "shotdeck-onedrive-override")
|
|
defer { try? FileManager.default.removeItem(at: override) }
|
|
TransportSettings.setOneDriveFolder(override, defaults: suite.defaults)
|
|
|
|
let resolved = OneDriveLocator.resolveOneDriveFolder(
|
|
defaults: suite.defaults, home: home, fileManager: .default
|
|
)
|
|
#expect(resolved?.path == override.path)
|
|
}
|
|
|
|
@Test
|
|
func resolveOneDriveFolderIgnoresAStoredPathThatNoLongerExists() throws {
|
|
let home = try makeFakeHome()
|
|
defer { try? FileManager.default.removeItem(at: home) }
|
|
let cloudStorage = home.appendingPathComponent("Library/CloudStorage", isDirectory: true)
|
|
try FileManager.default.createDirectory(
|
|
at: cloudStorage.appendingPathComponent("OneDrive-MMDGROUP", isDirectory: true),
|
|
withIntermediateDirectories: true
|
|
)
|
|
|
|
let suite = try makeTransportDefaultsSuite()
|
|
defer { tearDownTransportSuite(suite) }
|
|
let goneOverride = try makeTransportTemporaryDirectory(prefix: "shotdeck-onedrive-gone")
|
|
TransportSettings.setOneDriveFolder(goneOverride, defaults: suite.defaults)
|
|
try FileManager.default.removeItem(at: goneOverride)
|
|
|
|
let resolved = OneDriveLocator.resolveOneDriveFolder(
|
|
defaults: suite.defaults, home: home, fileManager: .default
|
|
)
|
|
let expectedRoot = try #require(OneDriveLocator.syncRoots(home: home, fileManager: .default).first)
|
|
let expected = expectedRoot.appendingPathComponent("Redline", isDirectory: true)
|
|
#expect(resolved?.path == expected.path)
|
|
}
|
|
|
|
private func makeFakeHome() throws -> URL {
|
|
let home = FileManager.default.temporaryDirectory
|
|
.appendingPathComponent("shotdeck-fake-home-\(UUID().uuidString)", isDirectory: true)
|
|
try FileManager.default.createDirectory(at: home, withIntermediateDirectories: true)
|
|
return home
|
|
}
|