@@ -129,10 +129,32 @@ func TestFilterToJSON(t *testing.T) {
129129 if len (parsed ) != 2 {
130130 t .Fatalf ("expected 2 entries, got %d" , len (parsed ))
131131 }
132- if parsed [0 ]["column" ] != "name" {
133- t .Errorf ("expected name, got %v" , parsed [0 ]["column" ])
132+ // Operators pass through as-is — caller supplies % wildcards for like/contains
133+ if parsed [0 ]["operator" ] != "contains" {
134+ t .Errorf ("expected contains, got %v" , parsed [0 ]["operator" ])
135+ }
136+ if parsed [0 ]["value" ] != "foo" {
137+ t .Errorf ("expected foo, got %v" , parsed [0 ]["value" ])
134138 }
135139 if parsed [1 ]["operator" ] != "is true" {
136140 t .Errorf ("expected is true, got %v" , parsed [1 ]["operator" ])
137141 }
138142}
143+
144+ func TestFilterToJSON_LikeWithWildcards (t * testing.T ) {
145+ // Caller explicitly passes % wildcards for partial matching
146+ filters := []FilterClause {
147+ {Column : "name" , Operator : "like" , Value : "%doc%" },
148+ }
149+ jsonStr := FilterToJSON (filters )
150+
151+ var parsed []map [string ]interface {}
152+ json .Unmarshal ([]byte (jsonStr ), & parsed )
153+
154+ if parsed [0 ]["operator" ] != "like" {
155+ t .Errorf ("expected like, got %v" , parsed [0 ]["operator" ])
156+ }
157+ if parsed [0 ]["value" ] != "%doc%" {
158+ t .Errorf ("expected %%doc%%, got %v" , parsed [0 ]["value" ])
159+ }
160+ }
0 commit comments