Skip to content

Commit 486ee99

Browse files
authored
Merge pull request #139 from hackberrydev/every-date
Every date
2 parents da53fb1 + b956e1c commit 486ee99

3 files changed

Lines changed: 39 additions & 25 deletions

File tree

src/commands/schedule_tasks.janet

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,13 @@
2727
"every month" (= (date :day) 1)
2828
"every 3 months" (and (= (date :day) 1)
2929
(number? (index-of (date :month) [1 4 7 10])))
30+
(string "every month on " (date :day)) true
3031
(string "every year on " (remove-year formatted-date)) true
3132
(string "on " formatted-date) true
3233
"every last day" (date/last-day-of-month? date)
3334
"every last weekday" (date/last-weekday-of-month? date)
34-
"every last Friday" (date/last-friday-of-month? date)))
35+
"every last Friday" (date/last-friday-of-month? date)
36+
false))
3537

3638
(defn- missed-on-day [plan task date]
3739
(find (fn [day] (and (scheduled-for? task (day :date))

test/commands/schedule_tasks_test.janet

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,31 +12,31 @@
1212
(deftest "every Monday"
1313
(def task (task/build-scheduled-task 42 "Weekly meeting" "every Monday"))
1414
(test (scheduled-for? task (d/date 2022 1 24)) true)
15-
(test (not (scheduled-for? task (d/date 2022 1 25))) true))
15+
(test (scheduled-for? task (d/date 2022 1 25)) false))
1616

1717
(deftest "every Tuesday"
1818
(def task (task/build-scheduled-task 42 "Weekly meeting" "every Tuesday"))
19-
(test (not (scheduled-for? task (d/date 2022 1 24))) true)
19+
(test (scheduled-for? task (d/date 2022 1 24)) false)
2020
(test (scheduled-for? task (d/date 2022 1 25)) true))
2121

2222
(deftest "every month"
2323
(def task (task/build-scheduled-task 42 "Review logs" "every month"))
2424
(test (scheduled-for? task (d/date 2022 1 1)) true)
25-
(test (not (scheduled-for? task (d/date 2022 1 2))) true)
25+
(test (scheduled-for? task (d/date 2022 1 2)) false)
2626
(test (scheduled-for? task (d/date 2022 6 1)) true)
27-
(test (not (scheduled-for? task (d/date 2022 6 15))) true))
27+
(test (scheduled-for? task (d/date 2022 6 15)) false))
2828

2929
(deftest "every 3 months"
3030
(def task (task/build-scheduled-task 42 "Review logs" "every 3 months"))
3131
(test (scheduled-for? task (d/date 2022 1 1)) true)
32-
(test (not (scheduled-for? task (d/date 2022 2 1))) true)
33-
(test (not (scheduled-for? task (d/date 2022 3 1))) true)
32+
(test (scheduled-for? task (d/date 2022 2 1)) false)
33+
(test (scheduled-for? task (d/date 2022 3 1)) false)
3434
(test (scheduled-for? task (d/date 2022 4 1)) true)
35-
(test (not (scheduled-for? task (d/date 2022 5 1))) true)
36-
(test (not (scheduled-for? task (d/date 2022 6 1))) true)
35+
(test (scheduled-for? task (d/date 2022 5 1)) false)
36+
(test (scheduled-for? task (d/date 2022 6 1)) false)
3737
(test (scheduled-for? task (d/date 2022 7 1)) true)
38-
(test (not (scheduled-for? task (d/date 2022 8 1))) true)
39-
(test (not (scheduled-for? task (d/date 2022 9 1))) true)
38+
(test (scheduled-for? task (d/date 2022 8 1)) false)
39+
(test (scheduled-for? task (d/date 2022 9 1)) false)
4040
(test (scheduled-for? task (d/date 2022 10 1)) true))
4141

4242
(deftest "every weekday"
@@ -46,25 +46,33 @@
4646
(test (scheduled-for? task (d/date 2022 1 26)) true) # Wednesday
4747
(test (scheduled-for? task (d/date 2022 1 27)) true) # Thursday
4848
(test (scheduled-for? task (d/date 2022 1 28)) true) # Friday
49-
(test (not (scheduled-for? task (d/date 2022 1 29))) true) # Saturday
50-
(test (not (scheduled-for? task (d/date 2022 1 30))) true)) # Sunday
49+
(test (scheduled-for? task (d/date 2022 1 29)) false) # Saturday
50+
(test (scheduled-for? task (d/date 2022 1 30)) false)) # Sunday
51+
52+
(deftest "every month on some date"
53+
(def task (task/build-scheduled-task 42 "Review logs" "every month on 15"))
54+
(test (scheduled-for? task (d/date 2022 1 15)) true)
55+
(test (scheduled-for? task (d/date 2022 2 15)) true)
56+
(test (scheduled-for? task (d/date 2022 10 15)) true)
57+
(test (scheduled-for? task (d/date 2022 1 14)) false)
58+
(test (scheduled-for? task (d/date 2022 1 16)) false))
5159

5260
(deftest "every year on some date"
5361
(def task (task/build-scheduled-task 42 "Review logs" "every year on 01-27"))
5462
(test (scheduled-for? task (d/date 2022 1 27)) true)
5563
(test (scheduled-for? task (d/date 2023 1 27)) true)
5664
(test (scheduled-for? task (d/date 2024 1 27)) true)
57-
(test (not (scheduled-for? task (d/date 2022 1 26))) true)
58-
(test (not (scheduled-for? task (d/date 2022 1 28))) true)
59-
(test (not (scheduled-for? task (d/date 2022 2 1))) true))
65+
(test (scheduled-for? task (d/date 2022 1 26)) false)
66+
(test (scheduled-for? task (d/date 2022 1 28)) false)
67+
(test (scheduled-for? task (d/date 2022 2 1)) false))
6068

6169
(deftest "on some date"
6270
(def task (task/build-scheduled-task 42 "Review logs" "on 2022-01-27"))
6371
(test (scheduled-for? task (d/date 2022 1 27)) true)
64-
(test (not (scheduled-for? task (d/date 2022 1 26))) true)
65-
(test (not (scheduled-for? task (d/date 2022 1 28))) true)
66-
(test (not (scheduled-for? task (d/date 2022 2 1))) true)
67-
(test (not (scheduled-for? task (d/date 2023 1 27))) true))
72+
(test (scheduled-for? task (d/date 2022 1 26)) false)
73+
(test (scheduled-for? task (d/date 2022 1 28)) false)
74+
(test (scheduled-for? task (d/date 2022 2 1)) false)
75+
(test (scheduled-for? task (d/date 2023 1 27)) false))
6876

6977
(deftest "every last day"
7078
(def task (task/build-scheduled-task 42 "Review logs" "every last day"))
@@ -81,7 +89,7 @@
8189
(test (scheduled-for? task (d/date 2022 11 30)) true)
8290
(test (scheduled-for? task (d/date 2022 12 31)) true)
8391
(test (scheduled-for? task (d/date 2023 1 31)) true)
84-
(test (not (scheduled-for? task (d/date 2022 1 30))) true))
92+
(test (scheduled-for? task (d/date 2022 1 30)) false))
8593

8694
(deftest "every last weekday"
8795
(def task (task/build-scheduled-task 42 "Review logs" "every last weekday"))
@@ -97,7 +105,7 @@
97105
(test (scheduled-for? task (d/date 2022 10 31)) true)
98106
(test (scheduled-for? task (d/date 2022 11 30)) true)
99107
(test (scheduled-for? task (d/date 2022 12 30)) true)
100-
(test (not (scheduled-for? task (d/date 2022 1 30))) true))
108+
(test (scheduled-for? task (d/date 2022 1 30)) false))
101109

102110
(deftest "every last Friday"
103111
(def task (task/build-scheduled-task 42 "Review logs" "every last Friday"))
@@ -106,7 +114,7 @@
106114
(test (scheduled-for? task (d/date 2022 3 25)) true)
107115
(test (scheduled-for? task (d/date 2022 4 29)) true)
108116
(test (scheduled-for? task (d/date 2022 5 27)) true)
109-
(test (not (scheduled-for? task (d/date 2022 1 31))) true))
117+
(test (scheduled-for? task (d/date 2022 1 31)) false))
110118

111119
## —————————————————————————————————————————————————————————————————————————————————————————————————
112120
## Test missed?

test/schedule_parser_test.janet

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@
1919
- Meeting with Jack (on 2022-05-03)
2020
- Review logs (every last day)
2121
- Send invoice (every last weekday)
22+
- Pay bills (every month on 15)
2223
```)
2324
(def result (schedule_parser/parse schedule-string))
2425
(def scheduled-tasks (result :tasks))
25-
(test (length scheduled-tasks) 8)
26+
(test (length scheduled-tasks) 9)
2627
(let [task (scheduled-tasks 0)]
2728
(test (task :title) "Weekly Meeting")
2829
(test (task :done) false)
@@ -38,7 +39,10 @@
3839
(test (task :schedule) "every last day"))
3940
(let [task (scheduled-tasks 7)]
4041
(test (task :title) "Send invoice")
41-
(test (task :schedule) "every last weekday")))
42+
(test (task :schedule) "every last weekday"))
43+
(let [task (scheduled-tasks 8)]
44+
(test (task :title) "Pay bills")
45+
(test (task :schedule) "every month on 15")))
4246

4347
(deftest "returns an error when the schedule can't be parsed"
4448
(def schedule-string

0 commit comments

Comments
 (0)