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 }