AtlatestRepositoryfolio

folio / tree / testtest-query.sgl

1(import (sigil test)
2 (sigil struct)
3 (sigil string)
4 (sigil fs)
5 (sigil path)
6 (folio store)
7 (folio task)
8 (folio inbox)
9 (folio project)
10 (folio note)
11 (folio query))
13;; ============================================================
14;; all-tasks
15;; ============================================================
17(test-group "all-tasks"
18 (test "collects from inbox and projects"
19 (call-with-temp-directory
20 (lambda (dir)
21 (let ((store (make-folio-store dir)))
22 ;; Add inbox tasks
23 (inbox-add! store "Inbox task 1" '())
24 (inbox-add! store "Inbox task 2" '())
25 ;; Create project with tasks
26 (let ((file (project-create! store "Test" "Goal" #f)))
27 (project-add-task! file "Project task 1" '())
28 (project-add-task! file "Project task 2" '()))
29 (assert-equal 4 (length (all-tasks store))))))))
31;; ============================================================
32;; filter-tasks
33;; ============================================================
35(test-group "filter-tasks"
36 (test "filter by status open"
37 (call-with-temp-directory
38 (lambda (dir)
39 (let ((store (make-folio-store dir)))
40 (inbox-add! store "Open task" '())
41 (inbox-add! store "Another open" '())
42 (let* ((tasks (all-tasks store))
43 (open (filter-tasks tasks "open" #f #f #f #f)))
44 (assert-equal 2 (length open)))))))
46 (test "filter by priority"
47 (call-with-temp-directory
48 (lambda (dir)
49 (let ((store (make-folio-store dir)))
50 (inbox-add! store "High priority" '((priority . "high")))
51 (inbox-add! store "Low priority" '((priority . "low")))
52 (inbox-add! store "No priority" '())
53 (let* ((tasks (all-tasks store))
54 (high (filter-tasks tasks #f "high" #f #f #f)))
55 (assert-equal 1 (length high)))))))
57 (test "filter by due-before"
58 (call-with-temp-directory
59 (lambda (dir)
60 (let ((store (make-folio-store dir)))
61 (inbox-add! store "Due soon" '((due . "2026-03-15")))
62 (inbox-add! store "Due later" '((due . "2026-04-15")))
63 (inbox-add! store "No due" '())
64 (let* ((tasks (all-tasks store))
65 (soon (filter-tasks tasks #f #f #f "2026-03-20" #f)))
66 (assert-equal 1 (length soon))))))))
68;; ============================================================
69;; folio-status
70;; ============================================================
72(test-group "folio-status"
73 (test "returns correct counts"
74 (call-with-temp-directory
75 (lambda (dir)
76 (let ((store (make-folio-store dir)))
77 ;; Set up some data
78 (inbox-add! store "Inbox item" '())
79 (let ((file (project-create! store "Test Project" "Goal" #f)))
80 (project-add-task! file "Project task" '((due . "2020-01-01"))))
81 (note-create! store "Test Note" '("test") "Content.")
82 (let ((s (folio-status store)))
83 (assert-equal 1 (dict-ref s inbox-count:))
84 (assert-equal 1 (dict-ref s active-project-count:))
85 (assert-equal 1 (dict-ref s total-notes:))
86 ;; The project task with due 2020-01-01 is overdue
87 (assert-equal 1 (dict-ref s overdue-count:))))))))