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  }