github.com/snyk/vervet/v3@v3.7.0/versionware/handler_test.go (about)

     1  package versionware_test
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"net/http"
     7  	"net/http/httptest"
     8  	"testing"
     9  
    10  	qt "github.com/frankban/quicktest"
    11  
    12  	"github.com/snyk/vervet/v3"
    13  	"github.com/snyk/vervet/v3/versionware"
    14  )
    15  
    16  func ExampleHandler() {
    17  	h := versionware.NewHandler([]versionware.VersionHandler{{
    18  		Version: vervet.MustParseVersion("2021-10-01"),
    19  		Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    20  			if _, err := w.Write([]byte("oct")); err != nil {
    21  				panic(err)
    22  			}
    23  		}),
    24  	}, {
    25  		Version: vervet.MustParseVersion("2021-11-01"),
    26  		Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    27  			if _, err := w.Write([]byte("nov")); err != nil {
    28  				panic(err)
    29  			}
    30  		}),
    31  	}, {
    32  		Version: vervet.MustParseVersion("2021-09-01"),
    33  		Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    34  			if _, err := w.Write([]byte("sept")); err != nil {
    35  				panic(err)
    36  			}
    37  		}),
    38  	}}...)
    39  
    40  	s := httptest.NewServer(h)
    41  	defer s.Close()
    42  
    43  	resp, err := s.Client().Get(s.URL + "?version=2021-10-31")
    44  	if err != nil {
    45  		panic(err)
    46  	}
    47  	defer resp.Body.Close()
    48  	respBody, err := ioutil.ReadAll(resp.Body)
    49  	if err != nil {
    50  		panic(err)
    51  	}
    52  
    53  	fmt.Print(string(respBody))
    54  	// Output: oct
    55  }
    56  
    57  func TestHandler(t *testing.T) {
    58  	c := qt.New(t)
    59  	h := versionware.NewHandler([]versionware.VersionHandler{{
    60  		Version: vervet.MustParseVersion("2021-10-01"),
    61  		Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    62  			_, err := w.Write([]byte("oct"))
    63  			c.Assert(err, qt.IsNil)
    64  		}),
    65  	}, {
    66  		Version: vervet.MustParseVersion("2021-11-01"),
    67  		Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    68  			_, err := w.Write([]byte("nov"))
    69  			c.Assert(err, qt.IsNil)
    70  		}),
    71  	}, {
    72  		Version: vervet.MustParseVersion("2021-09-01"),
    73  		Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    74  			_, err := w.Write([]byte("sept"))
    75  			c.Assert(err, qt.IsNil)
    76  		}),
    77  	}}...)
    78  	tests := []struct {
    79  		requested, resolved string
    80  		contents            string
    81  		status              int
    82  	}{{
    83  		"2021-08-31", "", "Not Found\n", 404,
    84  	}, {
    85  		"", "", "Bad Request\n", 400,
    86  	}, {
    87  		"bad wolf", "", "400 Bad Request", 400,
    88  	}, {
    89  		"2021-09-16", "2021-09-01", "sept", 200,
    90  	}, {
    91  		"2021-10-01", "2021-10-01", "oct", 200,
    92  	}, {
    93  		"2021-10-31", "2021-10-01", "oct", 200,
    94  	}, {
    95  		"2021-11-05", "2021-11-01", "nov", 200,
    96  	}, {
    97  		"2023-02-05", "2021-11-01", "nov", 200,
    98  	}}
    99  	for i, test := range tests {
   100  		c.Run(fmt.Sprintf("%d requested %s resolved %s", i, test.requested, test.resolved), func(c *qt.C) {
   101  			s := httptest.NewServer(h)
   102  			c.Cleanup(s.Close)
   103  			req, err := http.NewRequest("GET", s.URL+"?version="+test.requested, nil)
   104  			c.Assert(err, qt.IsNil)
   105  			resp, err := s.Client().Do(req)
   106  			c.Assert(err, qt.IsNil)
   107  			defer resp.Body.Close()
   108  			c.Assert(resp.StatusCode, qt.Equals, test.status)
   109  			contents, err := ioutil.ReadAll(resp.Body)
   110  			c.Assert(err, qt.IsNil)
   111  			c.Assert(string(contents), qt.Equals, test.contents)
   112  		})
   113  	}
   114  }