github.com/web-platform-tests/wpt.fyi@v0.0.0-20240530210107-70cf978996f1/webapp/test_runs_handler.go (about) 1 // Copyright 2017 The WPT Dashboard Project. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package webapp 6 7 import ( 8 "net/http" 9 "time" 10 11 "github.com/web-platform-tests/wpt.fyi/shared" 12 ) 13 14 // testRunsHandler handles GET/POST requests to /test-runs 15 func testRunsHandler(w http.ResponseWriter, r *http.Request) { 16 if r.Method != http.MethodGet { 17 http.Error(w, "Only GET is supported.", http.StatusMethodNotAllowed) 18 return 19 } 20 filter, err := parseTestRunsUIFilter(r) 21 if err != nil { 22 http.Error(w, err.Error(), http.StatusBadRequest) 23 return 24 } 25 26 RenderTemplate(w, r, "test-runs.html", filter) 27 } 28 29 // parseTestRunsUIFilter parses the standard TestRunFilter, as well as the extra 30 // pr param. 31 func parseTestRunsUIFilter(r *http.Request) (filter testRunUIFilter, err error) { 32 q := r.URL.Query() 33 testRunFilter, err := shared.ParseTestRunFilterParams(q) 34 if err != nil { 35 return filter, err 36 } 37 38 pr, err := shared.ParsePRParam(q) 39 if err != nil { 40 return filter, err 41 } 42 43 isDefault := testRunFilter.IsDefaultQuery() && pr == nil 44 if isDefault { 45 // Get runs from a week ago, onward, by default. 46 aWeekAgo := time.Now().Truncate(time.Hour*24).AddDate(0, 0, -7) 47 testRunFilter.From = &aWeekAgo 48 testRunFilter = testRunFilter.MasterOnly() 49 } else if testRunFilter.MaxCount == nil { 50 oneHundred := 100 51 testRunFilter.MaxCount = &oneHundred 52 } 53 filter = convertTestRunUIFilter(testRunFilter) 54 if pr != nil { 55 filter.PR = pr 56 } 57 58 return filter, nil 59 }