blob: abcb32b8a13767bc9969f7bd864af9437d5d335a [file] [log] [blame]
package api
import (
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/require"
"go.skia.org/infra/go/alogin"
"go.skia.org/infra/go/alogin/mocks"
"go.skia.org/infra/go/roles"
"go.skia.org/infra/go/testutils"
"go.skia.org/infra/perf/go/regression"
regressionMocks "go.skia.org/infra/perf/go/regression/mocks"
)
func setupForTest(t *testing.T, userIsEditor bool) (*httptest.ResponseRecorder, *http.Request, regressionsApi) {
login := mocks.NewLogin(t)
w := httptest.NewRecorder()
r := httptest.NewRequest("POST", "/not-used", nil)
login.On("LoggedInAs", r).Return(alogin.EMail("nobody@example.org"))
login.On("HasRole", r, roles.Editor).Return(userIsEditor)
rApi := NewRegressionsApi(login, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
return w, r, rApi
}
func TestFrontendRegressionsHandler_Success(t *testing.T) {
regMock := regressionMocks.NewStore(t)
regMock.On("GetRegressionsBySubName", testutils.AnyContext, "test", 10, 10).Return(
[]*regression.Regression{
{
Id: "r1",
AlertId: 1,
},
{
Id: "r2",
AlertId: 1,
},
{
Id: "r3",
AlertId: 2,
},
}, nil)
f := NewRegressionsApi(nil, nil, nil, regMock, nil, nil, nil, nil, nil, nil, nil, nil, nil)
w := httptest.NewRecorder()
r := httptest.NewRequest("GET", "/_/regressions?sub_name=test&limit=10&offset=10", nil)
f.regressionsHandler(w, r)
require.Equal(t, http.StatusOK, w.Result().StatusCode)
require.Contains(t, w.Body.String(), "r1")
require.Contains(t, w.Body.String(), "r2")
require.Contains(t, w.Body.String(), "r3")
}
func TestFrontendIsEditor_UserIsEditor_ReportsStatusOK(t *testing.T) {
w, r, f := setupForTest(t, true)
f.isEditor(w, r, "my-test-action", nil)
require.Equal(t, http.StatusOK, w.Result().StatusCode)
}
func TestFrontendIsEditor_UserIsOnlyViewer_ReportsError(t *testing.T) {
w, r, f := setupForTest(t, false)
f.isEditor(w, r, "my-test-action", nil)
require.Equal(t, http.StatusUnauthorized, w.Result().StatusCode)
}