Skip to content

Commit a769edc

Browse files
committed
Support overnight schedules
1 parent 616e63d commit a769edc

3 files changed

Lines changed: 104 additions & 4 deletions

File tree

.github/workflows/run_tests.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
name: run tests
2+
3+
on:
4+
push:
5+
branches:
6+
- dev
7+
8+
jobs:
9+
run-tests:
10+
runs-on: ubuntu-latest
11+
steps:
12+
- name: Checkout code
13+
uses: actions/checkout@v4
14+
15+
- name: Setup JDK
16+
uses: actions/setup-java@v4
17+
with:
18+
java-version: 17
19+
distribution: "temurin"
20+
cache: "gradle"
21+
22+
- name: Run tests
23+
run: ./gradlew testReleaseUnitTest

app/src/main/java/co/adityarajput/notifilter/data/models/Schedule.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,14 @@ data class Schedule(
4343
}
4444
}
4545

46-
fun includesNow(): Boolean {
47-
val calendar = Calendar.getInstance()
46+
fun includesNow(calendar: Calendar = Calendar.getInstance()): Boolean {
47+
val minuteOfDay =
48+
calendar.get(Calendar.HOUR_OF_DAY) * 60 + calendar.get(Calendar.MINUTE)
49+
4850
return days.contains(calendar.get(Calendar.DAY_OF_WEEK)) &&
49-
calendar.get(Calendar.HOUR_OF_DAY) * 60 + calendar.get(Calendar.MINUTE) in start..end
51+
((start < end && minuteOfDay in start..end)
52+
|| (end < start && minuteOfDay !in (end + 1)..<start))
5053
}
5154

52-
fun isRangeValid() = start in 0..1439 && end in 0..1439 && start <= end
55+
fun isRangeValid() = start in 0..1439 && end in 0..1439 && start != end
5356
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package co.adityarajput.notifilter.data.models
2+
3+
import org.junit.Assert.assertFalse
4+
import org.junit.Assert.assertTrue
5+
import org.junit.Test
6+
import java.util.Calendar
7+
8+
@Suppress("TestFunctionName")
9+
class ScheduleTest {
10+
val mondayTenAM: Calendar = Calendar.getInstance().apply {
11+
set(Calendar.DAY_OF_WEEK, Calendar.MONDAY)
12+
set(Calendar.HOUR_OF_DAY, 10)
13+
set(Calendar.MINUTE, 0)
14+
}
15+
16+
val tuesdayNinePM: Calendar = Calendar.getInstance().apply {
17+
set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY)
18+
set(Calendar.HOUR_OF_DAY, 21)
19+
set(Calendar.MINUTE, 0)
20+
}
21+
22+
val saturdayElevenPM: Calendar = Calendar.getInstance().apply {
23+
set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY)
24+
set(Calendar.HOUR_OF_DAY, 23)
25+
set(Calendar.MINUTE, 0)
26+
}
27+
28+
val atWork = Schedule(
29+
9 * 60,
30+
(12 + 5) * 60,
31+
setOf(
32+
Calendar.MONDAY,
33+
Calendar.TUESDAY,
34+
Calendar.WEDNESDAY,
35+
Calendar.THURSDAY,
36+
Calendar.FRIDAY,
37+
),
38+
)
39+
40+
val atHome = Schedule(
41+
(12 + 5) * 60,
42+
9 * 60,
43+
setOf(
44+
Calendar.MONDAY,
45+
Calendar.TUESDAY,
46+
Calendar.WEDNESDAY,
47+
Calendar.THURSDAY,
48+
Calendar.FRIDAY,
49+
),
50+
)
51+
52+
val weekend = Schedule(days = setOf(Calendar.SATURDAY, Calendar.SUNDAY))
53+
54+
@Test
55+
fun Schedule_includesNow_correct() {
56+
assertTrue(atWork.includesNow(mondayTenAM))
57+
assertTrue(atHome.includesNow(tuesdayNinePM))
58+
assertTrue(weekend.includesNow(saturdayElevenPM))
59+
}
60+
61+
@Test
62+
fun Schedule_includesNow_incorrectDay() {
63+
assertFalse(atWork.includesNow(saturdayElevenPM))
64+
assertFalse(atHome.includesNow(saturdayElevenPM))
65+
assertFalse(weekend.includesNow(mondayTenAM))
66+
assertFalse(weekend.includesNow(tuesdayNinePM))
67+
}
68+
69+
@Test
70+
fun Schedule_includesNow_incorrectTime() {
71+
assertFalse(atWork.includesNow(tuesdayNinePM))
72+
assertFalse(atHome.includesNow(mondayTenAM))
73+
}
74+
}

0 commit comments

Comments
 (0)