aboutsummaryrefslogtreecommitdiff
path: root/internal/tui/reader_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/tui/reader_test.go')
-rw-r--r--internal/tui/reader_test.go49
1 files changed, 49 insertions, 0 deletions
diff --git a/internal/tui/reader_test.go b/internal/tui/reader_test.go
index 7bce759..da8d4d4 100644
--- a/internal/tui/reader_test.go
+++ b/internal/tui/reader_test.go
@@ -49,6 +49,55 @@ func win(m ReaderModel, w, h int) ReaderModel {
return nm.(ReaderModel)
}
+func TestReaderBookmarkTagFilter(t *testing.T) {
+ m := enReader(t)
+ m.marks = []bookmarks.Bookmark{
+ {ID: "1", Book: "John", Chapter: 3, Verse: 16, Tags: []string{"faith"}},
+ {ID: "2", Book: "Psalms", Chapter: 23, Verse: 1, Tags: []string{"work", "prayer"}},
+ {ID: "3", Book: "Matthew", Chapter: 5, Verse: 3, Tags: []string{"prayer"}},
+ }
+ m.mode = modeBookmarks
+
+ if got := len(m.visMarks()); got != 3 {
+ t.Fatalf("unfiltered visible = %d, want 3", got)
+ }
+
+ // "/" enters filter input; typing narrows to the two 'prayer' bookmarks.
+ m = key(m, runes("/"))
+ if !m.markFiltering {
+ t.Fatal(`"/" did not enter filter input`)
+ }
+ for _, c := range []string{"p", "r", "a", "y"} {
+ m = key(m, runes(c))
+ }
+ if got := len(m.visMarks()); got != 2 {
+ t.Fatalf(`filter "pray" visible = %d, want 2 (Psalms, Matthew)`, got)
+ }
+
+ // Enter keeps the filter and leaves input mode.
+ m = key(m, tea.KeyMsg{Type: tea.KeyEnter})
+ if m.markFiltering || m.markFilter != "pray" {
+ t.Fatalf("after enter: filtering=%v filter=%q", m.markFiltering, m.markFilter)
+ }
+
+ // Case-insensitive substring: "WORK" matches the 'work' tag (1 bookmark).
+ m.markFilter = "WORK"
+ if got := len(m.visMarks()); got != 1 {
+ t.Fatalf(`filter "WORK" visible = %d, want 1`, got)
+ }
+
+ // Esc clears an active filter, back to all.
+ m.markFilter = "work"
+ m.markFiltering = false
+ m = key(m, tea.KeyMsg{Type: tea.KeyEsc})
+ if m.markFilter != "" {
+ t.Fatalf("esc did not clear filter, got %q", m.markFilter)
+ }
+ if got := len(m.visMarks()); got != 3 {
+ t.Fatalf("after clearing filter, visible = %d, want 3", got)
+ }
+}
+
func TestReaderInit(t *testing.T) {
m := enReader(t)
if m.mode != modePick {