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/ObservingLogTests/ObservingLogTests.swift

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

44 lines · 1902 bytes

3 symbols in this file
 1import Foundation
 2import Testing
 3@testable import ObservingLog
 4
 5let when = Date(timeIntervalSince1970: 1_792_202_400) // 2026-10-17T02:00:00Z
 6
 7@Test func orgRoundTrip() throws {
 8    let o = Observation(object: "Saturn", date: when, place: "Chicago", latitude: 41.8781, longitude: -87.6298, equipment: "10x50 binoculars", seeing: 3, notes: "Rings nearly edge-on.\n\nTitan visible to the east.")
 9    let text = o.org
10    #expect(text.hasPrefix("* Saturn\n["))
11    #expect(text.contains(":EQUIPMENT: 10x50 binoculars"))
12    #expect(text.contains(":SEEING: 3/5"))
13    let back = try #require(Observation(org: text))
14    #expect(back.id == o.id)
15    #expect(back.object == "Saturn")
16    #expect(abs(back.date.timeIntervalSince(when)) < 60)
17    #expect(back.latitude == 41.8781)
18    #expect(back.seeing == 3)
19    #expect(back.notes == o.notes)
20}
21
22@Test func minimalEntryRoundTrips() throws {
23    let o = Observation(object: "M31", date: when, place: "Backyard")
24    let back = try #require(Observation(org: o.org))
25    #expect(back.equipment == "" && back.seeing == nil && back.notes == "")
26}
27
28@Test func folderSaveListDelete() throws {
29    let dir = FileManager.default.temporaryDirectory.appending(path: "obs-\(UUID().uuidString)")
30    defer { try? FileManager.default.removeItem(at: dir) }
31    let log = ObservingLog(folder: dir)
32    var a = Observation(object: "Moon", date: when, place: "Chicago")
33    let b = Observation(object: "Jupiter", date: when.addingTimeInterval(3600), place: "Chicago")
34    try log.save(a)
35    try log.save(b)
36    #expect(log.all().map(\.object) == ["Jupiter", "Moon"])
37    a.notes = "Earthshine."
38    try log.save(a)
39    #expect(log.all().count == 2)
40    #expect(log.all().first { $0.id == a.id }?.notes == "Earthshine.")
41    try log.delete(id: b.id)
42    #expect(log.all().map(\.object) == ["Moon"])
43    #expect(log.fileURL(for: a).lastPathComponent.hasSuffix("-moon.org"))
44}