github.com/web-platform-tests/wpt.fyi@v0.0.0-20240530210107-70cf978996f1/api/versions_medium_test.go (about)

     1  //go:build medium
     2  // +build medium
     3  
     4  package api
     5  
     6  import (
     7  	"encoding/json"
     8  	"io"
     9  	"net/http"
    10  	"net/http/httptest"
    11  	"testing"
    12  
    13  	"github.com/stretchr/testify/assert"
    14  	"github.com/web-platform-tests/wpt.fyi/shared"
    15  	"github.com/web-platform-tests/wpt.fyi/shared/sharedtest"
    16  )
    17  
    18  func TestApiVersionsHandler(t *testing.T) {
    19  	i, err := sharedtest.NewAEInstance(true)
    20  	assert.Nil(t, err)
    21  	defer i.Close()
    22  	r, err := i.NewRequest("GET", "/api/versions", nil)
    23  	assert.Nil(t, err)
    24  	ctx := r.Context()
    25  
    26  	// No results - empty JSON array, 404
    27  	var versions []string
    28  	r, err = i.NewRequest("GET", "/api/versions?product=chrome-999", nil)
    29  	w := httptest.NewRecorder()
    30  	apiVersionsHandler(w, r)
    31  	assert.Equal(t, http.StatusNotFound, w.Code)
    32  	bytes, _ := io.ReadAll(w.Result().Body)
    33  	json.Unmarshal(bytes, &versions)
    34  	assert.Equal(t, []string{}, versions)
    35  
    36  	// Add test runs (duplicating 1.1 is deliberate).
    37  	someVersions := []string{"2", "1.1.1", "1.1", "1.1", "1.0", "1"}
    38  	run := shared.TestRun{}
    39  	browserNames := shared.GetDefaultBrowserNames()
    40  	store := shared.NewAppEngineDatastore(ctx, false)
    41  	for _, browser := range browserNames {
    42  		run.BrowserName = browser
    43  		for _, version := range someVersions {
    44  			run.BrowserVersion = version
    45  			store.Put(store.NewIncompleteKey("TestRun"), &run)
    46  		}
    47  	}
    48  
    49  	// Chrome
    50  	versions = nil
    51  	r, err = i.NewRequest("GET", "/api/versions?product=chrome", nil)
    52  	w = httptest.NewRecorder()
    53  	apiVersionsHandler(w, r)
    54  	assert.Equal(t, http.StatusOK, w.Code)
    55  	bytes, _ = io.ReadAll(w.Result().Body)
    56  	json.Unmarshal(bytes, &versions)
    57  	// Duplication should be removed.
    58  	assert.Equal(t, []string{"2", "1.1.1", "1.1", "1.0", "1"}, versions)
    59  
    60  	// Chrome 1.1
    61  	r, err = i.NewRequest("GET", "/api/versions?product=chrome-1", nil)
    62  	w = httptest.NewRecorder()
    63  	apiVersionsHandler(w, r)
    64  	assert.Equal(t, http.StatusOK, w.Code)
    65  	bytes, _ = io.ReadAll(w.Result().Body)
    66  	json.Unmarshal(bytes, &versions)
    67  	assert.Equal(t, []string{"1.1.1", "1.1", "1.0", "1"}, versions)
    68  
    69  	// No product param
    70  	r, err = i.NewRequest("GET", "/api/versions", nil)
    71  	w = httptest.NewRecorder()
    72  	apiVersionsHandler(w, r)
    73  	assert.Equal(t, http.StatusBadRequest, w.Code)
    74  
    75  	// Bad param
    76  	r, err = i.NewRequest("GET", "/api/versions?product=chrome-not.a.version", nil)
    77  	w = httptest.NewRecorder()
    78  	apiVersionsHandler(w, r)
    79  	assert.Equal(t, http.StatusBadRequest, w.Code)
    80  }