urlfilter_test.gno
2.37 Kb ยท 87 lines
1package urlfilter
2
3import (
4 "net/url"
5 "strings"
6 "testing"
7
8 "gno.land/p/nt/avl"
9)
10
11func buildTestTree() *avl.Tree {
12 root := avl.NewTree()
13
14 // keyF1 subtree
15 t1 := avl.NewTree()
16 t1.Set("key1_1", nil)
17 t1.Set("key1_2", nil)
18 root.Set("keyF1", t1)
19
20 // keyF2 subtree
21 t2 := avl.NewTree()
22 t2.Set("key2_1", nil)
23 t2.Set("key2_2", nil)
24 root.Set("keyF2", t2)
25
26 return root
27}
28
29func TestApplyFilters(t *testing.T) {
30 TreeParent := buildTestTree()
31
32 // --- Case 1: No filter selected
33 u, _ := url.Parse("/test")
34 mdFilters, items := ApplyFilters(u, TreeParent, "filter")
35 expectedMarkdown := " | [~~keyF1~~](/test?filter=keyF1) | [~~keyF2~~](/test?filter=keyF2) "
36 if mdFilters != expectedMarkdown {
37 t.Errorf("Expected Markdown %q, got %q", expectedMarkdown, mdFilters)
38 }
39 // All items should be present
40 count := 0
41 items.Iterate("", "", func(k string, _ interface{}) bool {
42 count++
43 return false
44 })
45 if count != 4 {
46 t.Errorf("Expected 4 items, got %d", count)
47 }
48
49 // Try using ApplyFilters with a different name.
50 withCustom, _ := ApplyFilters(u, TreeParent, "custom-param-name")
51 if !strings.Contains(withCustom, "custom-param-name=keyF1") {
52 t.Errorf("Expected 'custom-param-name' parameter in Markdown, got %q", mdFilters)
53 }
54
55 // --- Case 2: One filter active (keyF1)
56 u, _ = url.Parse("/test?filter=keyF1")
57 mdFilters, items = ApplyFilters(u, TreeParent, "filter")
58 expectedMarkdown = " | [**keyF1**](/test) | [~~keyF2~~](/test?filter=keyF1%2CkeyF2) "
59 if mdFilters != expectedMarkdown {
60 t.Errorf("Expected Markdown %q, got %q", expectedMarkdown, mdFilters)
61 }
62 // Only keyF1 items should be present
63 keys := map[string]bool{}
64 items.Iterate("", "", func(k string, _ interface{}) bool {
65 keys[k] = true
66 return false
67 })
68 if len(keys) != 2 || !keys["key1_1"] || !keys["key1_2"] {
69 t.Errorf("Unexpected items in filtered result: %#v", keys)
70 }
71
72 // --- Case 3: Multiple filters active (keyF1, keyF2)
73 u, _ = url.Parse("/test?filter=keyF1,keyF2")
74 mdFilters, items = ApplyFilters(u, TreeParent, "filter")
75 // Both filters should be bold, no remove query for last one
76 if items.Size() != 4 {
77 t.Errorf("Expected 4 items, got %d", items.Size())
78 }
79
80 // --- Case 4: Filter not existing
81 u, _ = url.Parse("/test?filter=unknown")
82 mdFilters, items = ApplyFilters(u, TreeParent, "filter")
83 // No matching items
84 if items.Size() != 0 {
85 t.Errorf("Expected 0 items for unknown filter, got %d", items.Size())
86 }
87}