1
1
module LibSpec where
2
2
3
3
import Protolude (
4
+ Bool (True ),
4
5
Maybe (.. ),
5
6
Text ,
6
7
pure ,
7
8
show ,
8
9
($) ,
10
+ (&) ,
11
+ (<) ,
9
12
(<>) ,
10
13
)
11
14
import Protolude qualified as P
12
15
13
- import Config (defaultConfig )
16
+ import Data.Hourglass (DateTime )
17
+ import Data.List.Utils (subIndex )
18
+ import Data.Text qualified as T
14
19
import Test.Hspec (
15
20
Spec ,
16
21
describe ,
@@ -21,8 +26,7 @@ import Test.Hspec (
21
26
shouldNotContain ,
22
27
)
23
28
24
- import Data.Hourglass (DateTime )
25
- import Data.Text qualified as T
29
+ import Config (defaultConfig )
26
30
import ImportExport (PreEdit (ApplyPreEdit ), editTaskByTask )
27
31
import Lib (
28
32
addTag ,
@@ -31,27 +35,28 @@ import Lib (
31
35
infoTask ,
32
36
insertRecord ,
33
37
insertTags ,
38
+ listNotes ,
34
39
newTasks ,
35
40
)
36
41
import Task (Task (body , closed_utc , state , ulid ), TaskState (Done ), zeroTask )
37
- import TaskToNote (TaskToNote (TaskToNote ))
42
+ import TaskToNote (TaskToNote (TaskToNote , ulid ))
38
43
import TaskToNote qualified
39
44
import TestUtils (withMemoryDb )
40
45
41
46
42
47
task1 :: Task
43
48
task1 =
44
49
zeroTask
45
- { ulid = " 01hs68z7mdg4ktpxbv0yfafznq"
46
- , body = " New task 1"
50
+ { Task. ulid = " 01hs68z7mdg4ktpxbv0yfafznq"
51
+ , Task. body = " New task 1"
47
52
}
48
53
49
54
50
55
taskMultiLine :: Task
51
56
taskMultiLine =
52
57
zeroTask
53
- { ulid = " 01hx48cnjhp18mts3c44zk3gen"
54
- , body =
58
+ { Task. ulid = " 01hx48cnjhp18mts3c44zk3gen"
59
+ , Task. body =
55
60
" New task\n \
56
61
\with several lines\n \
57
62
\and line breaks"
@@ -66,8 +71,8 @@ spec now = do
66
71
let
67
72
task2 =
68
73
zeroTask
69
- { ulid = " 01hs690f9hkzk9z7zews9j2k1d"
70
- , body = " New task 2"
74
+ { Task. ulid = " 01hs690f9hkzk9z7zews9j2k1d"
75
+ , Task. body = " New task 2"
71
76
}
72
77
73
78
count0 <- countTasks defaultConfig memConn P. mempty
@@ -93,10 +98,10 @@ spec now = do
93
98
let
94
99
task2 =
95
100
zeroTask
96
- { ulid = " 01hs6zsf3c0vqx6egfnmbqtmvy"
97
- , body = " New task 2"
98
- , closed_utc = Just " 2024-04-10T18:54:10Z"
99
- , state = Just Done
101
+ { Task. ulid = " 01hs6zsf3c0vqx6egfnmbqtmvy"
102
+ , Task. body = " New task 2"
103
+ , Task. closed_utc = Just " 2024-04-10T18:54:10Z"
104
+ , Task. state = Just Done
100
105
}
101
106
102
107
insertRecord " tasks" memConn task1
@@ -141,6 +146,40 @@ spec now = do
141
146
\with several lines\n \
142
147
\and line breaks"
143
148
149
+ it " lists all notes descending by creation UTC" $ do
150
+ withMemoryDb defaultConfig $ \ memConn -> do
151
+ insertRecord " tasks" memConn task1
152
+ let
153
+ taskToNote1 =
154
+ TaskToNote
155
+ { TaskToNote. ulid = " 01hx4eyxxvs5b75ynxrztcz87f"
156
+ , TaskToNote. task_ulid = task1. ulid
157
+ , TaskToNote. note = " The first note"
158
+ }
159
+ note1Id = taskToNote1. ulid & T. takeEnd 3 & T. unpack
160
+ taskToNote2 =
161
+ TaskToNote
162
+ { TaskToNote. ulid = " 01hx4f3f764sma7n8bahvwjeed"
163
+ , TaskToNote. task_ulid = task1. ulid
164
+ , TaskToNote. note = " The second note"
165
+ }
166
+ note2Id = taskToNote2. ulid & T. takeEnd 3 & T. unpack
167
+
168
+ insertRecord " task_to_note" memConn taskToNote1
169
+ insertRecord " task_to_note" memConn taskToNote2
170
+
171
+ cliOutput <- listNotes defaultConfig memConn
172
+
173
+ show cliOutput `shouldContain` note1Id
174
+ show cliOutput `shouldContain` note2Id
175
+
176
+ let
177
+ posUlid1 = subIndex note1Id (show cliOutput)
178
+ posUlid2 = subIndex note2Id (show cliOutput)
179
+
180
+ -- Newer notes should be listed first
181
+ (posUlid2 < posUlid1) `shouldBe` True
182
+
144
183
it " lets you delete a note" $ do
145
184
withMemoryDb defaultConfig $ \ memConn -> do
146
185
insertRecord " tasks" memConn task1
0 commit comments