AtlatestRepositoryfolio
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-tasks15
;; ============================================================17
(test-group "all-tasks"18
(test "collects from inbox and projects"19
(call-with-temp-directory20
(lambda (dir)21
(let ((store (make-folio-store dir)))22
;; Add inbox tasks23
(inbox-add! store "Inbox task 1" '())24
(inbox-add! store "Inbox task 2" '())25
;; Create project with tasks26
(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-tasks33
;; ============================================================35
(test-group "filter-tasks"36
(test "filter by status open"37
(call-with-temp-directory38
(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-directory48
(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-directory59
(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-status70
;; ============================================================72
(test-group "folio-status"73
(test "returns correct counts"74
(call-with-temp-directory75
(lambda (dir)76
(let ((store (make-folio-store dir)))77
;; Set up some data78
(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 overdue87
(assert-equal 1 (dict-ref s overdue-count:))))))))