github.com/qri-io/qri@v0.10.1-0.20220104210721-c771715036cb/lib/http_test.go (about)

     1  package lib
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"errors"
     7  	"net/http"
     8  	"testing"
     9  
    10  	"github.com/google/go-cmp/cmp"
    11  	"github.com/qri-io/qri/base/params"
    12  )
    13  
    14  func TestDecodeParams(t *testing.T) {
    15  	p := &CollectionListParams{}
    16  	r, err := http.NewRequest("POST", "/test", nil)
    17  	if err != nil {
    18  		t.Fatal(err)
    19  	}
    20  
    21  	expect := &CollectionListParams{
    22  		List: params.List{
    23  			Offset:  10,
    24  			Limit:   10,
    25  			Filter:  []string{"username:peer"},
    26  			OrderBy: params.NewOrderByFromString("+name,-updated"),
    27  		},
    28  	}
    29  	// add list queries to the request
    30  	q := r.URL.Query()
    31  	q.Add("offset", "10")
    32  	q.Add("limit", "10")
    33  	q.Add("filter", "username:peer")
    34  	q.Add("orderby", "+name,-updated")
    35  	r.URL.RawQuery = q.Encode()
    36  
    37  	if err := DecodeParams(r, p); err != nil {
    38  		t.Fatal(err)
    39  	}
    40  
    41  	if diff := cmp.Diff(expect, p); diff != "" {
    42  		t.Errorf("CollectionListParams mismatch (+want,-got):\n%s", diff)
    43  	}
    44  
    45  	lp := params.List{}
    46  	if err := DecodeParams(r, &lp); err != nil {
    47  		t.Fatal(err)
    48  	}
    49  
    50  	if diff := cmp.Diff(expect.List, lp); diff != "" {
    51  		t.Errorf("list.Params mismatch (+want,-got):\n%s", diff)
    52  	}
    53  
    54  	// Decode params should not error if a param is not a `params.ListParams`
    55  	cgp := &CollectionGetParams{}
    56  	expectCGP := &CollectionGetParams{}
    57  	if err := DecodeParams(r, &cgp); err != nil {
    58  		t.Fatal(err)
    59  	}
    60  	if diff := cmp.Diff(expectCGP, cgp); diff != "" {
    61  		t.Errorf("list.Params mismatch (+want,-got):\n%s", diff)
    62  	}
    63  
    64  	enc, err := json.Marshal(CollectionListParams{List: params.List{Offset: 10}})
    65  	if err != nil {
    66  		t.Fatal(err)
    67  	}
    68  
    69  	r, err = http.NewRequest("POST", "/test", bytes.NewReader(enc))
    70  	if err != nil {
    71  		t.Fatal(err)
    72  	}
    73  
    74  	// add list queries to the request
    75  	q = r.URL.Query()
    76  	q.Add("offset", "10")
    77  	q.Add("limit", "10")
    78  	q.Add("filter", "username:peer")
    79  	q.Add("orderby", "+name,-updated")
    80  	r.URL.RawQuery = q.Encode()
    81  
    82  	cp := &CollectionListParams{}
    83  	if err := DecodeParams(r, cp); !errors.Is(err, params.ErrListParamsNotEmpty) {
    84  		t.Fatalf("error mismatch, expected %q, got %q", params.ErrListParamsNotEmpty, err)
    85  	}
    86  }