import Testing import Foundation @testable import WeatherProvider @Suite("Alter eines Messwerts") struct StalenessTests { private let now = Date(timeIntervalSince1970: 1_800_000_000) @Test("Frisch Gemessenes ist nicht alt") func freshIsNotStale() { #expect(!WeatherSnapshot.isStale(asOf: now.addingTimeInterval(-60), now: now)) } @Test("Ein missglückter Abruf macht noch keine Warnung") func aMissedFetchIsTolerated() { // Zwanzig Minuten sind über der Haltbarkeit, aber kein Grund für ein // Warnzeichen — sonst steht es bei jedem verpassten Abruf da. #expect(!WeatherSnapshot.isStale(asOf: now.addingTimeInterval(-20 * 60), now: now)) } @Test("Nach einer Stunde ist es alt") func anHourIsStale() { #expect(WeatherSnapshot.isStale(asOf: now.addingTimeInterval(-61 * 60), now: now)) } @Test("Der Fall aus der Praxis: drei Tage") func threeDaysIsStale() { // Nachts um elf standen 35 Grad da, gemessen am Nachmittag drei Tage // vorher — und nichts wies darauf hin. #expect(WeatherSnapshot.isStale(asOf: now.addingTimeInterval(-3 * 86400), now: now)) } @Test("Die Haltbarkeit ist kürzer als die Warnschwelle") func cacheExpiresBeforeItWarns() { // Sonst wäre jeder abgelaufene Eintrag zugleich ein Warnfall, und die // Warnung sagte nichts mehr aus. #expect(WeatherCache.maxAge < WeatherCache.staleAge) } }