Packages/MoonriseKit/Tests/ObservingLogTests/ObservingLogTests.swift
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}