github.com/qri-io/qri@v0.10.1-0.20220104210721-c771715036cb/api/util/responses_test.go (about) 1 package util 2 3 import ( 4 "fmt" 5 "net/http" 6 "net/http/httptest" 7 "testing" 8 ) 9 10 func TestWritePageResponse(t *testing.T) { 11 cases := []struct { 12 page Page 13 expect string 14 }{ 15 { 16 Page{Number: 1, Size: DefaultPageSize}, 17 `{"data":"data","meta":{"code":200},"pagination":{"page":1,"pageSize":50,"nextUrl":"https://example.com?page=2","prevUrl":""}}`, 18 }, 19 { 20 Page{Number: 1, Size: DefaultPageSize, ResultCount: 200}, 21 `{"data":"data","meta":{"code":200},"pagination":{"page":1,"pageSize":50,"resultCount":200,"nextUrl":"https://example.com?page=2","prevUrl":""}}`, 22 }, 23 { 24 Page{Number: 2, Size: DefaultPageSize, ResultCount: 100}, 25 `{"data":"data","meta":{"code":200},"pagination":{"page":2,"pageSize":50,"resultCount":100,"nextUrl":"","prevUrl":"https://example.com?page=1"}}`, 26 }, 27 { 28 Page{Number: 2, Size: DefaultPageSize, ResultCount: 200}, 29 `{"data":"data","meta":{"code":200},"pagination":{"page":2,"pageSize":50,"resultCount":200,"nextUrl":"https://example.com?page=3","prevUrl":"https://example.com?page=1"}}`, 30 }, 31 { 32 Page{Number: 2, Size: 5, ResultCount: 200}, 33 `{"data":"data","meta":{"code":200},"pagination":{"page":2,"pageSize":5,"resultCount":200,"nextUrl":"https://example.com?page=3\u0026pageSize=5","prevUrl":"https://example.com?page=1\u0026pageSize=5"}}`, 34 }, 35 } 36 37 for i, c := range cases { 38 t.Run(fmt.Sprintf("case_%d", i), func(t *testing.T) { 39 rr := httptest.NewRecorder() 40 41 req, err := http.NewRequest("GET", "https://example.com", nil) 42 if err != nil { 43 t.Fatal(err) 44 } 45 if err := WritePageResponse(rr, "data", req, c.page); err != nil { 46 t.Fatal(err) 47 } 48 49 got := rr.Body.String() 50 51 if c.expect != got { 52 t.Errorf("result mismatch. expected:\n%s\ngot:\n%s", c.expect, got) 53 } 54 55 }) 56 } 57 } 58 59 func TestWriteResponseWithNextPage(t *testing.T) { 60 rr := httptest.NewRecorder() 61 62 if err := WriteResponseWithNextPage(rr, "data", "/next", map[string]string{"start": "5"}); err != nil { 63 t.Fatal(err) 64 } 65 66 actual := rr.Body.String() 67 expect := `{"data":"data","meta":{"code":200},"nextPage":{"url":"/next","params":{"start":"5"}}}` 68 if expect != actual { 69 t.Errorf("result mismatch. expected:\n%s\ngot:\n%s", expect, actual) 70 } 71 }