66 lines
2.4 KiB
Swift
66 lines
2.4 KiB
Swift
import XCTest
|
|
@testable import PortfolioJournal
|
|
|
|
final class BackupServiceTests: XCTestCase {
|
|
private var tempRoot: URL!
|
|
|
|
override func setUp() {
|
|
super.setUp()
|
|
tempRoot = FileManager.default.temporaryDirectory
|
|
.appendingPathComponent(UUID().uuidString, isDirectory: true)
|
|
try? FileManager.default.createDirectory(at: tempRoot, withIntermediateDirectories: true)
|
|
}
|
|
|
|
override func tearDown() {
|
|
if let tempRoot {
|
|
try? FileManager.default.removeItem(at: tempRoot)
|
|
}
|
|
super.tearDown()
|
|
}
|
|
|
|
func testCreateBackupPrunesToRetentionCount() {
|
|
let localBase = tempRoot.appendingPathComponent("Local", isDirectory: true)
|
|
try? FileManager.default.createDirectory(at: localBase, withIntermediateDirectories: true)
|
|
|
|
var dates = [
|
|
Date(timeIntervalSince1970: 100),
|
|
Date(timeIntervalSince1970: 200)
|
|
]
|
|
|
|
let service = BackupService(
|
|
fileManager: .default,
|
|
dateProvider: { dates.removeFirst() },
|
|
localBaseDirectoryProvider: { localBase },
|
|
iCloudBaseDirectoryProvider: { nil },
|
|
exportProvider: { "{}" }
|
|
)
|
|
|
|
_ = service.createBackup(retentionCount: 1, includeICloud: false)
|
|
let records = service.createBackup(retentionCount: 1, includeICloud: false)
|
|
|
|
XCTAssertEqual(records.count, 1)
|
|
XCTAssertEqual(records.first?.location, .local)
|
|
}
|
|
|
|
func testCreateBackupIncludesICloudWhenEnabled() {
|
|
let localBase = tempRoot.appendingPathComponent("Local", isDirectory: true)
|
|
let iCloudBase = tempRoot.appendingPathComponent("iCloud", isDirectory: true)
|
|
try? FileManager.default.createDirectory(at: localBase, withIntermediateDirectories: true)
|
|
try? FileManager.default.createDirectory(at: iCloudBase, withIntermediateDirectories: true)
|
|
|
|
let service = BackupService(
|
|
fileManager: .default,
|
|
dateProvider: { Date(timeIntervalSince1970: 300) },
|
|
localBaseDirectoryProvider: { localBase },
|
|
iCloudBaseDirectoryProvider: { iCloudBase },
|
|
exportProvider: { "{}" }
|
|
)
|
|
|
|
let records = service.createBackup(retentionCount: 5, includeICloud: true)
|
|
let locations = Set(records.map { $0.location })
|
|
|
|
XCTAssertTrue(locations.contains(.local))
|
|
XCTAssertTrue(locations.contains(.iCloud))
|
|
}
|
|
}
|