Tests/OrgAppTests/CalendarEventsTests.swift
72 lines · 3502 bytes
7 symbols in this file
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}