github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/pkg/couchdb/mango/query_test.go (about) 1 package mango 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 type M map[string]interface{} 11 type S []interface{} 12 13 func DeepEqual(t *testing.T, map1, map2 interface{}) bool { 14 j1, err1 := json.Marshal(map1) 15 j2, err2 := json.Marshal(map2) 16 if assert.NoError(t, err1) && assert.NoError(t, err2) { 17 assert.Equal(t, string(j1), string(j2)) 18 } 19 return false 20 } 21 22 func TestQueryMarshaling(t *testing.T) { 23 q1 := Equal("DirID", "ab123") 24 DeepEqual(t, q1.ToMango(), M{"DirID": "ab123"}) 25 q2 := Gt("Size", 1000) 26 DeepEqual(t, q2.ToMango(), M{"Size": M{"$gt": 1000}}) 27 q3 := And(q1, q2) 28 DeepEqual(t, q3.ToMango(), 29 M{"$and": S{ 30 M{"DirID": "ab123"}, 31 M{"Size": M{"$gt": 1000}}, 32 }}) 33 34 q4 := Not(Equal("DirID", "ab123")) 35 DeepEqual(t, q4.ToMango(), M{"$not": M{"DirID": "ab123"}}) 36 } 37 38 func TestSortMarshaling(t *testing.T) { 39 s1 := SortBy{ 40 {"dir_id", Asc}, 41 {"foo_bar", Desc}, 42 } 43 j1, err := json.Marshal(s1) 44 if assert.NoError(t, err) { 45 assert.Equal(t, j1, []byte(`[{"dir_id":"asc"},{"foo_bar":"desc"}]`)) 46 } 47 }