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 }