github.com/qri-io/qri@v0.10.1-0.20220104210721-c771715036cb/api/util/order_test.go (about) 1 package util 2 3 import ( 4 "net/http/httptest" 5 "testing" 6 ) 7 8 func TestOrderByFromRequest(t *testing.T) { 9 cases := []struct { 10 description string 11 query string 12 validKeys []string 13 expNumber int 14 expOrderBy string 15 }{ 16 {"no orderBy specified", "", nil, 0, ""}, 17 {"orderBy with no direction (defaults to desc)", "title", nil, 1, "title,desc"}, 18 {"invalid orderBy", "title,asc,date", nil, 0, ""}, 19 {"orderBy with bad parameters", "title,asc, date,desc", nil, 2, "title,asc,date,desc"}, 20 {"orderBy with multiple parameters", "title,asc,date,desc", nil, 2, "title,asc,date,desc"}, 21 {"orderBy with some invalid parameters", "title,asc,date,desc", []string{"title"}, 1, "title,asc"}, 22 } 23 24 for _, c := range cases { 25 r := httptest.NewRequest("GET", "/", nil) 26 q := r.URL.Query() 27 // add query params 28 if c.query != "" { 29 q.Set("orderBy", c.query) 30 } 31 32 r.URL.RawQuery = q.Encode() 33 34 got := OrderByFromRequestWithKeys(r, c.validKeys) 35 if c.expNumber != len(got) { 36 t.Errorf("case '%s' error: number mismatch, expected '%d', got '%d'", c.description, c.expNumber, len(got)) 37 } 38 if c.expOrderBy != got.String() { 39 t.Errorf("case '%s' error: output mismatch, expected '%s', got '%s'", c.description, c.expOrderBy, got.String()) 40 } 41 } 42 43 }