blob: 40f2f70410bf1c4e92f72522fe6bdf44db4d58c6 [file] [log] [blame]
package api
import (
"bytes"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"go.skia.org/infra/go/alogin"
"go.skia.org/infra/go/alogin/mocks"
"go.skia.org/infra/go/testutils"
"go.skia.org/infra/perf/go/userissue"
userissueMocks "go.skia.org/infra/perf/go/userissue/mocks"
)
func TestFrontendUserIssuesHandler_Success(t *testing.T) {
w := httptest.NewRecorder()
req := GetUserIssuesForTraceKeysRequest{
TraceKeys: []string{",a=1,b=1,c=1,", ",a=1,b=1,c=1,"},
BeginCommitPosition: 1,
EndCommitPosition: 10,
}
uiBody, _ := json.Marshal(req)
body := bytes.NewReader(uiBody)
r := httptest.NewRequest("POST", "/_/userissues/", body)
fakeUserIssues := []userissue.UserIssue{
{
UserId: "a@b.com",
TraceKey: ",a=1,b=1,",
CommitPosition: 1,
IssueId: 12,
},
{
UserId: "b@c.com",
TraceKey: ",a=2,b=2,",
CommitPosition: 7,
IssueId: 89,
},
}
uiMocks := userissueMocks.NewStore(t)
uiMocks.On("GetUserIssuesForTraceKeys", testutils.AnyContext, mock.Anything, mock.Anything, mock.Anything).Return(fakeUserIssues, nil)
login := mocks.NewLogin(t)
ui := NewUserIssueApi(login, uiMocks)
ui.userIssuesHandler(w, r)
require.Equal(t, http.StatusOK, w.Result().StatusCode)
}
func TestFrontendSaveUserIssueHandler_Success(t *testing.T) {
w := httptest.NewRecorder()
saveReq := SaveUserIssueRequest{
TraceKey: ",a=1,b=1,c=1,",
CommitPosition: 1,
IssueId: 12345,
}
uiBody, _ := json.Marshal(saveReq)
body := bytes.NewReader(uiBody)
r := httptest.NewRequest("POST", "/_/userissue/save", body)
uiMocks := userissueMocks.NewStore(t)
uiMocks.On("Save", testutils.AnyContext, mock.Anything).Return(nil)
login := mocks.NewLogin(t)
login.On("LoggedInAs", r).Return(alogin.EMail("nobody@example.org"))
ui := NewUserIssueApi(login, uiMocks)
ui.saveUserIssueHandler(w, r)
require.Equal(t, http.StatusOK, w.Result().StatusCode)
}
func TestFrontendDeleteIssueHandler_Success(t *testing.T) {
w := httptest.NewRecorder()
deleteReq := DeleteUserIssueRequest{
TraceKey: ",a=1,b=1,c=1,",
CommitPosition: 1,
}
uiBody, _ := json.Marshal(deleteReq)
body := bytes.NewReader(uiBody)
r := httptest.NewRequest("POST", "/_/userissue/delete", body)
uiMocks := userissueMocks.NewStore(t)
uiMocks.On("Delete", testutils.AnyContext, mock.Anything, mock.Anything, mock.Anything).Return(nil)
login := mocks.NewLogin(t)
login.On("LoggedInAs", r).Return(alogin.EMail("nobody@example.org"))
ui := NewUserIssueApi(login, uiMocks)
ui.deleteUserIssueHandler(w, r)
require.Equal(t, http.StatusOK, w.Result().StatusCode)
}