Monorepo for Tangled tangled.org
772
fork

Configure Feed

Select the types of activity you want to include in your feed.

appview/models: add tests for HasSearchFilters on all search option types

Cover each filter field individually to guard against future additions
that miss the boolean check. Also documents that non-filter fields
(RepoAt, IsOpen, Knot, Did, State, Page) intentionally do not count
as active filters.

Signed-off-by: Matías Insaurralde <matias@insaurral.de>

authored by

Matías Insaurralde and committed by tangled.org 2de1c8a4 54065496

+224
+224
appview/models/search_test.go
··· 1 + package models 2 + 3 + import ( 4 + "testing" 5 + ) 6 + 7 + func TestIssueSearchOptions_HasSearchFilters(t *testing.T) { 8 + tests := []struct { 9 + name string 10 + opts IssueSearchOptions 11 + want bool 12 + }{ 13 + { 14 + name: "zero value returns false", 15 + opts: IssueSearchOptions{}, 16 + want: false, 17 + }, 18 + { 19 + name: "non-filter fields only (RepoAt, IsOpen, Page) return false", 20 + opts: IssueSearchOptions{RepoAt: "at://did:plc:abc/repo"}, 21 + want: false, 22 + }, 23 + { 24 + name: "keyword set", 25 + opts: IssueSearchOptions{Keywords: []string{"bug"}}, 26 + want: true, 27 + }, 28 + { 29 + name: "phrase set", 30 + opts: IssueSearchOptions{Phrases: []string{"null pointer"}}, 31 + want: true, 32 + }, 33 + { 34 + name: "author did set", 35 + opts: IssueSearchOptions{AuthorDid: "did:plc:abc"}, 36 + want: true, 37 + }, 38 + { 39 + name: "label set", 40 + opts: IssueSearchOptions{Labels: []string{"bug"}}, 41 + want: true, 42 + }, 43 + { 44 + name: "label value set", 45 + opts: IssueSearchOptions{LabelValues: []string{"priority:high"}}, 46 + want: true, 47 + }, 48 + { 49 + name: "negated keyword set", 50 + opts: IssueSearchOptions{NegatedKeywords: []string{"wontfix"}}, 51 + want: true, 52 + }, 53 + { 54 + name: "negated phrase set", 55 + opts: IssueSearchOptions{NegatedPhrases: []string{"not a bug"}}, 56 + want: true, 57 + }, 58 + { 59 + name: "negated label set", 60 + opts: IssueSearchOptions{NegatedLabels: []string{"duplicate"}}, 61 + want: true, 62 + }, 63 + { 64 + name: "negated label value set", 65 + opts: IssueSearchOptions{NegatedLabelValues: []string{"priority:low"}}, 66 + want: true, 67 + }, 68 + { 69 + name: "negated author did set", 70 + opts: IssueSearchOptions{NegatedAuthorDids: []string{"did:plc:xyz"}}, 71 + want: true, 72 + }, 73 + } 74 + 75 + for _, tt := range tests { 76 + t.Run(tt.name, func(t *testing.T) { 77 + if got := tt.opts.HasSearchFilters(); got != tt.want { 78 + t.Errorf("HasSearchFilters() = %v, want %v", got, tt.want) 79 + } 80 + }) 81 + } 82 + } 83 + 84 + func TestPullSearchOptions_HasSearchFilters(t *testing.T) { 85 + tests := []struct { 86 + name string 87 + opts PullSearchOptions 88 + want bool 89 + }{ 90 + { 91 + name: "zero value returns false", 92 + opts: PullSearchOptions{}, 93 + want: false, 94 + }, 95 + { 96 + name: "non-filter fields only (RepoAt, State, Page) return false", 97 + opts: PullSearchOptions{RepoAt: "at://did:plc:abc/repo"}, 98 + want: false, 99 + }, 100 + { 101 + name: "keyword set", 102 + opts: PullSearchOptions{Keywords: []string{"refactor"}}, 103 + want: true, 104 + }, 105 + { 106 + name: "phrase set", 107 + opts: PullSearchOptions{Phrases: []string{"breaking change"}}, 108 + want: true, 109 + }, 110 + { 111 + name: "author did set", 112 + opts: PullSearchOptions{AuthorDid: "did:plc:abc"}, 113 + want: true, 114 + }, 115 + { 116 + name: "label set", 117 + opts: PullSearchOptions{Labels: []string{"enhancement"}}, 118 + want: true, 119 + }, 120 + { 121 + name: "label value set", 122 + opts: PullSearchOptions{LabelValues: []string{"size:large"}}, 123 + want: true, 124 + }, 125 + { 126 + name: "negated keyword set", 127 + opts: PullSearchOptions{NegatedKeywords: []string{"wip"}}, 128 + want: true, 129 + }, 130 + { 131 + name: "negated phrase set", 132 + opts: PullSearchOptions{NegatedPhrases: []string{"do not merge"}}, 133 + want: true, 134 + }, 135 + { 136 + name: "negated label set", 137 + opts: PullSearchOptions{NegatedLabels: []string{"blocked"}}, 138 + want: true, 139 + }, 140 + { 141 + name: "negated label value set", 142 + opts: PullSearchOptions{NegatedLabelValues: []string{"size:small"}}, 143 + want: true, 144 + }, 145 + { 146 + name: "negated author did set", 147 + opts: PullSearchOptions{NegatedAuthorDids: []string{"did:plc:xyz"}}, 148 + want: true, 149 + }, 150 + } 151 + 152 + for _, tt := range tests { 153 + t.Run(tt.name, func(t *testing.T) { 154 + if got := tt.opts.HasSearchFilters(); got != tt.want { 155 + t.Errorf("HasSearchFilters() = %v, want %v", got, tt.want) 156 + } 157 + }) 158 + } 159 + } 160 + 161 + func TestRepoSearchOptions_HasSearchFilters(t *testing.T) { 162 + tests := []struct { 163 + name string 164 + opts RepoSearchOptions 165 + want bool 166 + }{ 167 + { 168 + name: "zero value returns false", 169 + opts: RepoSearchOptions{}, 170 + want: false, 171 + }, 172 + { 173 + name: "non-filter fields only (Knot, Did, Page) return false", 174 + opts: RepoSearchOptions{ 175 + Knot: "knot.example.com", 176 + Did: "did:plc:abc", 177 + }, 178 + want: false, 179 + }, 180 + { 181 + name: "keyword set", 182 + opts: RepoSearchOptions{Keywords: []string{"parser"}}, 183 + want: true, 184 + }, 185 + { 186 + name: "phrase set", 187 + opts: RepoSearchOptions{Phrases: []string{"http client"}}, 188 + want: true, 189 + }, 190 + { 191 + name: "language set", 192 + opts: RepoSearchOptions{Language: "Go"}, 193 + want: true, 194 + }, 195 + { 196 + name: "topic set", 197 + opts: RepoSearchOptions{Topics: []string{"networking"}}, 198 + want: true, 199 + }, 200 + { 201 + name: "negated keyword set", 202 + opts: RepoSearchOptions{NegatedKeywords: []string{"deprecated"}}, 203 + want: true, 204 + }, 205 + { 206 + name: "negated phrase set", 207 + opts: RepoSearchOptions{NegatedPhrases: []string{"work in progress"}}, 208 + want: true, 209 + }, 210 + { 211 + name: "negated topic set", 212 + opts: RepoSearchOptions{NegatedTopics: []string{"archived"}}, 213 + want: true, 214 + }, 215 + } 216 + 217 + for _, tt := range tests { 218 + t.Run(tt.name, func(t *testing.T) { 219 + if got := tt.opts.HasSearchFilters(); got != tt.want { 220 + t.Errorf("HasSearchFilters() = %v, want %v", got, tt.want) 221 + } 222 + }) 223 + } 224 + }