| 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) |
| } |