Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}