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  }