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  }