krz/moonrise

Night-sky companion for iPhone, Apple Watch and Vision Pro: what's up tonight, the Moon, planets, launches and missions, and a Library of the solar system. SwiftUI app with a Cloudflare Workers backend. astronomy cloudflare-workers ios night-sky space swiftui visionos watchos

Packages/MoonriseKit/Tests/SkyEngineTests/DailySummaryTests.swift

04b2b1d914788057bcd20945b876847386eb8f65
moonrise/Packages/MoonriseKit/Tests/SkyEngineTests/DailySummaryTests.swift history · blame · raw

43 lines · 2645 bytes

3 symbols in this file
 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}