krz/orgstar

A native macOS editor for org-mode files. editor org-mode swift

Tests/OrgAppTests/CalendarEventsTests.swift

2fa201330f61c801f777baa3f2943d49d8758cda
orgstar/Tests/OrgAppTests/CalendarEventsTests.swift history · blame · raw

72 lines · 3502 bytes

 1import CoreGraphics
 2import Foundation
 3import OrgCore
 4import OrgPresentation
 5import Testing
 6@testable import OrgApp
 7
 8struct AgendaSettingsTests {
 9    @Test func agendaSettingsReadFromConfigToml() throws {
10        let defaults = try #require(UserDefaults(suiteName: "orgstar-agenda-settings-\(UUID().uuidString)"))
11        #expect(!OrgPreferences.agendaShowAllDates(defaults))
12        #expect(!OrgPreferences.agendaSkipScheduledIfDone(defaults) && !OrgPreferences.agendaSkipDeadlineIfDone(defaults))
13        #expect(!OrgPreferences.calendarEvents(defaults) && OrgPreferences.calendarEventCalendars(defaults).isEmpty)
14        let problems = UserConfig.apply("""
15            org-agenda-show-all-dates = true
16            org-agenda-skip-scheduled-if-done = true
17            org-agenda-skip-deadline-if-done = true
18            [orgstar]
19            calendar-events = true
20            calendar-event-calendars = "Work, Family ,  ,ABC-123"
21            """, to: defaults)
22        #expect(problems.isEmpty, "\(problems)")
23        #expect(OrgPreferences.agendaShowAllDates(defaults))
24        #expect(OrgPreferences.calendarEvents(defaults))
25        #expect(OrgPreferences.calendarEventCalendars(defaults) == ["Work", "Family", "ABC-123"])
26        let options = OrgPreferences.agendaOptions(AgendaOptions(), defaults)
27        #expect(options.skipScheduledIfDone && options.skipDeadlineIfDone)
28        #expect(UserConfig.template(from: defaults).contains("org-agenda-show-all-dates = true"))
29    }
30}
31
32struct CalendarEventsTests {
33    struct Record: CalendarEventRecord {
34        var recordID = "e1@0"
35        var recordTitle = "Standup"
36        var recordStart = Date(timeIntervalSince1970: 1_791_190_800)
37        var recordEnd = Date(timeIntervalSince1970: 1_791_192_600)
38        var recordIsAllDay = false
39        var recordLocation: String? = "Room 4"
40        var recordCalendarID = "cal-1"
41        var recordCalendarTitle = "Work"
42        var recordCalendarColor: CGColor? = CGColor(srgbRed: 1, green: 0.5, blue: 0, alpha: 1)
43    }
44
45    @Test func recordsBecomeAgendaEvents() {
46        let event = CalendarEvents.event(Record())
47        #expect(event.id == "e1@0" && event.title == "Standup" && event.calendarTitle == "Work" && event.calendarID == "cal-1")
48        #expect(event.color?.hex == "#ff8000" && event.location == "Room 4" && !event.isAllDay)
49        var noColor = Record()
50        noColor.recordCalendarColor = nil
51        #expect(CalendarEvents.event(noColor).color == nil)
52    }
53
54    @Test func eventsBecomeRows() {
55        var utc = Calendar(identifier: .gregorian)
56        utc.timeZone = TimeZone(identifier: "UTC")!
57        let event = CalendarEvents.event(Record())
58        let day = Days.absolute(event.start, calendar: utc)
59        let row = AgendaRow(event: event, day: day, calendar: utc)
60        #expect(row.gutter == "09:00–09:30" && row.category == "Work" && row.title == "Standup" && row.isEvent && row.icon == .event)
61        var allDay = Record()
62        allDay.recordIsAllDay = true
63        #expect(AgendaRow(event: CalendarEvents.event(allDay), day: day, calendar: utc).gutter == "All day")
64    }
65
66    @Test func calendarsChosenByTitleOrIdentifier() {
67        #expect(CalendarEvents.chooses(id: "x", title: "Work", chosen: []))
68        #expect(CalendarEvents.chooses(id: "x", title: "Work", chosen: ["Work"]))
69        #expect(CalendarEvents.chooses(id: "x", title: "Work", chosen: ["x"]))
70        #expect(!CalendarEvents.chooses(id: "x", title: "Work", chosen: ["Home"]))
71    }
72}