1+ package io.github.kevincianfarini.cardiologist
2+
3+ import kotlinx.datetime.DayOfWeek
4+ import kotlinx.datetime.Month
5+ import kotlin.test.Test
6+ import kotlin.test.assertEquals
7+
8+ class PulseScheduleBuilderTest {
9+
10+ @Test
11+ fun empty_builder_produces_default_value () = assertEquals(
12+ expected = PulseSchedule (
13+ atSeconds = (0 .. 59 ).toSet(),
14+ atMinutes = (0 .. 59 ).toSet(),
15+ atHours = (0 .. 23 ).toSet(),
16+ onDaysOfMonth = (1 .. 31 ).toSet(),
17+ inMonths = Month .entries.toSet(),
18+ onDaysOfWeek = emptySet(),
19+ ),
20+ actual = buildPulseSchedule { },
21+ )
22+
23+ @Test
24+ fun simple_seconds () = assertEquals(
25+ expected = PulseSchedule (
26+ atSeconds = setOf (0 , 30 ),
27+ atMinutes = (0 .. 59 ).toSet(),
28+ atHours = (0 .. 23 ).toSet(),
29+ onDaysOfMonth = (1 .. 31 ).toSet(),
30+ inMonths = Month .entries.toSet(),
31+ onDaysOfWeek = emptySet(),
32+ ),
33+ actual = buildPulseSchedule {
34+ atSeconds(0 , 30 )
35+ },
36+ )
37+
38+ @Test
39+ fun multiple_seconds_calls_are_additive () = assertEquals(
40+ expected = PulseSchedule (
41+ atSeconds = setOf (0 , 15 , 30 , 45 ),
42+ atMinutes = (0 .. 59 ).toSet(),
43+ atHours = (0 .. 23 ).toSet(),
44+ onDaysOfMonth = (1 .. 31 ).toSet(),
45+ inMonths = Month .entries.toSet(),
46+ onDaysOfWeek = emptySet(),
47+ ),
48+ actual = buildPulseSchedule {
49+ atSeconds(0 , 30 )
50+ atSeconds(15 , 45 )
51+ },
52+ )
53+
54+ @Test
55+ fun simple_minutes () = assertEquals(
56+ expected = PulseSchedule (
57+ atSeconds = (0 .. 59 ).toSet(),
58+ atMinutes = setOf (0 , 30 ),
59+ atHours = (0 .. 23 ).toSet(),
60+ onDaysOfMonth = (1 .. 31 ).toSet(),
61+ inMonths = Month .entries.toSet(),
62+ onDaysOfWeek = emptySet(),
63+ ),
64+ actual = buildPulseSchedule {
65+ atMinutes(0 , 30 )
66+ },
67+ )
68+
69+ @Test
70+ fun multiple_minutes_calls_are_additive () = assertEquals(
71+ expected = PulseSchedule (
72+ atSeconds = (0 .. 59 ).toSet(),
73+ atMinutes = setOf (0 , 15 , 30 , 45 ),
74+ atHours = (0 .. 23 ).toSet(),
75+ onDaysOfMonth = (1 .. 31 ).toSet(),
76+ inMonths = Month .entries.toSet(),
77+ onDaysOfWeek = emptySet(),
78+ ),
79+ actual = buildPulseSchedule {
80+ atMinutes(0 , 30 )
81+ atMinutes(15 , 45 )
82+ },
83+ )
84+
85+ @Test
86+ fun simple_hours () = assertEquals(
87+ expected = PulseSchedule (
88+ atSeconds = (0 .. 59 ).toSet(),
89+ atMinutes = (0 .. 59 ).toSet(),
90+ atHours = setOf (0 , 12 ),
91+ onDaysOfMonth = (1 .. 31 ).toSet(),
92+ inMonths = Month .entries.toSet(),
93+ onDaysOfWeek = emptySet(),
94+ ),
95+ actual = buildPulseSchedule {
96+ atHours(0 , 12 )
97+ },
98+ )
99+
100+ @Test
101+ fun multiple_hours_are_additive () = assertEquals(
102+ expected = PulseSchedule (
103+ atSeconds = (0 .. 59 ).toSet(),
104+ atMinutes = (0 .. 59 ).toSet(),
105+ atHours = setOf (0 , 6 , 12 , 18 ),
106+ onDaysOfMonth = (1 .. 31 ).toSet(),
107+ inMonths = Month .entries.toSet(),
108+ onDaysOfWeek = emptySet(),
109+ ),
110+ actual = buildPulseSchedule {
111+ atHours(0 , 12 )
112+ atHours(6 , 18 )
113+ },
114+ )
115+
116+ @Test
117+ fun simple_days_of_month () = assertEquals(
118+ expected = PulseSchedule (
119+ atSeconds = (0 .. 59 ).toSet(),
120+ atMinutes = (0 .. 59 ).toSet(),
121+ atHours = (0 .. 23 ).toSet(),
122+ onDaysOfMonth = setOf (1 , 15 ),
123+ inMonths = Month .entries.toSet(),
124+ onDaysOfWeek = emptySet(),
125+ ),
126+ actual = buildPulseSchedule {
127+ onDaysOfMonth(1 , 15 )
128+ },
129+ )
130+
131+ @Test
132+ fun multiple_days_of_month_calls_are_additive () = assertEquals(
133+ expected = PulseSchedule (
134+ atSeconds = (0 .. 59 ).toSet(),
135+ atMinutes = (0 .. 59 ).toSet(),
136+ atHours = (0 .. 23 ).toSet(),
137+ onDaysOfMonth = setOf (1 , 7 , 15 , 21 ),
138+ inMonths = Month .entries.toSet(),
139+ onDaysOfWeek = emptySet(),
140+ ),
141+ actual = buildPulseSchedule {
142+ onDaysOfMonth(1 , 15 )
143+ onDaysOfMonth(7 , 21 )
144+ },
145+ )
146+
147+ @Test
148+ fun simple_months () = assertEquals(
149+ expected = PulseSchedule (
150+ atSeconds = (0 .. 59 ).toSet(),
151+ atMinutes = (0 .. 59 ).toSet(),
152+ atHours = (0 .. 23 ).toSet(),
153+ onDaysOfMonth = (1 .. 31 ).toSet(),
154+ inMonths = setOf (Month .OCTOBER , Month .DECEMBER ),
155+ onDaysOfWeek = emptySet(),
156+ ),
157+ actual = buildPulseSchedule {
158+ inMonths(Month .OCTOBER , Month .DECEMBER )
159+ },
160+ )
161+
162+ @Test
163+ fun multiple_months_calls_are_additive () = assertEquals(
164+ expected = PulseSchedule (
165+ atSeconds = (0 .. 59 ).toSet(),
166+ atMinutes = (0 .. 59 ).toSet(),
167+ atHours = (0 .. 23 ).toSet(),
168+ onDaysOfMonth = (1 .. 31 ).toSet(),
169+ inMonths = setOf (Month .OCTOBER , Month .DECEMBER , Month .MAY ),
170+ onDaysOfWeek = emptySet(),
171+ ),
172+ actual = buildPulseSchedule {
173+ inMonths(Month .OCTOBER , Month .DECEMBER )
174+ inMonths(Month .MAY )
175+ },
176+ )
177+
178+ @Test
179+ fun simple_day_of_week () = assertEquals(
180+ expected = PulseSchedule (
181+ atSeconds = (0 .. 59 ).toSet(),
182+ atMinutes = (0 .. 59 ).toSet(),
183+ atHours = (0 .. 23 ).toSet(),
184+ onDaysOfMonth = (1 .. 31 ).toSet(),
185+ inMonths = Month .entries.toSet(),
186+ onDaysOfWeek = setOf (DayOfWeek .MONDAY , DayOfWeek .FRIDAY ),
187+ ),
188+ actual = buildPulseSchedule {
189+ onDaysOfWeek(DayOfWeek .MONDAY , DayOfWeek .FRIDAY )
190+ },
191+ )
192+
193+ @Test
194+ fun multiple_day_of_week_calls_are_additive () = assertEquals(
195+ expected = PulseSchedule (
196+ atSeconds = (0 .. 59 ).toSet(),
197+ atMinutes = (0 .. 59 ).toSet(),
198+ atHours = (0 .. 23 ).toSet(),
199+ onDaysOfMonth = (1 .. 31 ).toSet(),
200+ inMonths = Month .entries.toSet(),
201+ onDaysOfWeek = setOf (DayOfWeek .MONDAY , DayOfWeek .WEDNESDAY , DayOfWeek .FRIDAY ),
202+ ),
203+ actual = buildPulseSchedule {
204+ onDaysOfWeek(DayOfWeek .MONDAY , DayOfWeek .FRIDAY )
205+ onDaysOfWeek(DayOfWeek .WEDNESDAY )
206+ },
207+ )
208+ }
0 commit comments