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  }