Packages/MoonriseKit/Tests/SkyEngineTests/DailySummaryTests.swift
43 lines · 2645 bytes
1import Foundation
2import Testing
3@testable import SkyEngine
4
5private let summaryObserver = Observer(latitude: 41.878, longitude: -87.630)
6private let central = TimeZone(identifier: "America/Chicago")!
7private let gb = Locale(identifier: "en_GB")
8
9@Test func phaseNames() {
10 #expect(DailySummary.phaseName(3) == "New moon")
11 #expect(DailySummary.phaseName(45) == "Waxing crescent")
12 #expect(DailySummary.phaseName(90) == "First quarter")
13 #expect(DailySummary.phaseName(180) == "Full moon")
14 #expect(DailySummary.phaseName(271) == "Last quarter")
15 #expect(DailySummary.phaseName(320) == "Waning crescent")
16}
17
18@Test func summaryForAnEvening() throws {
19 // 18:00 CDT, 18 October 2026.
20 let date = Date(timeIntervalSince1970: 1_792_364_400)
21 let pass = SatellitePass(name: "ISS (ZARYA)", rise: date.addingTimeInterval(5400), set: date.addingTimeInterval(5760), peak: date.addingTimeInterval(5580), maxAltitude: 54.4, riseAzimuth: 240, setAzimuth: 60, visible: true, featured: true)
22 let faint = SatellitePass(name: "HST", rise: date.addingTimeInterval(7200), set: date.addingTimeInterval(7500), peak: date.addingTimeInterval(7350), maxAltitude: 70, riseAzimuth: 200, setAzimuth: 80, visible: false, featured: true)
23 let event = SkyEvent(kind: .meteorShower, date: date.addingTimeInterval(3 * 3600), title: "Orionids peak", detail: "", visibleHere: nil)
24 let tomorrow = SkyEvent(kind: .moonPhase, date: date.addingTimeInterval(30 * 3600), title: "Full moon", detail: "", visibleHere: nil)
25
26 let s = try DailySummary.make(at: date, observer: summaryObserver, passes: [pass, faint], events: [event, tomorrow], locale: gb, timeZone: central)
27 #expect(s.title.hasPrefix("Tonight: "))
28 #expect(s.title.hasSuffix("% lit"))
29 #expect(s.body.hasPrefix("Orionids peak. "))
30 #expect(!s.body.contains("Full moon"))
31 #expect(s.body.contains("Up tonight: "))
32 #expect(s.body.contains("ISS passes at 19:30, 54° high."))
33 #expect(!s.body.contains("Hubble"))
34 #expect(s.body.contains("Sunset 18:"))
35}
36
37@Test func morningPassSaysTomorrow() throws {
38 let date = Date(timeIntervalSince1970: 1_792_364_400)
39 // 05:37 CDT on 19 October, before dawn.
40 let pass = SatellitePass(name: "ISS (ZARYA)", rise: date.addingTimeInterval(41_820), set: date.addingTimeInterval(42_180), peak: date.addingTimeInterval(42_000), maxAltitude: 40, riseAzimuth: 240, setAzimuth: 60, visible: true, featured: true)
41 let s = try DailySummary.make(at: date, observer: summaryObserver, passes: [pass], events: [], locale: gb, timeZone: central)
42 #expect(s.body.contains("ISS passes at 5:37 tomorrow, 40° high."))
43}