import Testing @testable import IPhotoSync import Foundation @Suite("IPhotoSyncStats") struct SyncStatsTests { @Test("ETA returns nil when no upload is in progress") func etaNilWhenIdle() { let stats = IPhotoSyncStats() #expect(stats.eta == nil) } @Test("ETA returns seconds string when remaining < 60") func etaSeconds() { var stats = IPhotoSyncStats() stats.uploadStartTime = Date().addingTimeInterval(-10) stats.currentSessionUploaded = 10 // 1/sec stats.pendingUpload = 30 // rate ≈ 1.0/sec → eta ≈ 30s guard let eta = stats.eta else { Issue.record("Expected non-nil ETA") return } #expect(eta.hasSuffix("s"), "Expected seconds suffix, got '\(eta)'") } @Test("uploadRateString shows per-minute when rate < 1/sec") func ratePerMinute() { var stats = IPhotoSyncStats() // 1 photo uploaded in 120s → 0.5/sec < 1 → per-minute format stats.uploadStartTime = Date().addingTimeInterval(-120) stats.currentSessionUploaded = 1 let s = stats.uploadRateString #expect(s.hasSuffix("/min"), "Expected /min suffix, got '\(s)'") } @Test("uploadRateString shows per-second when rate >= 1/sec") func ratePerSecond() { var stats = IPhotoSyncStats() stats.uploadStartTime = Date().addingTimeInterval(-10) stats.currentSessionUploaded = 20 // 2/sec let s = stats.uploadRateString #expect(s.hasSuffix("/sec"), "Expected /sec suffix, got '\(s)'") } }