blob: 46567dcc948e8bf3b5c74f8b851b45f56c6988cc [file] [log] [blame]
package search
import (
"context"
"errors"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"go.skia.org/infra/go/testutils"
"go.skia.org/infra/go/testutils/unittest"
"go.skia.org/infra/golden/go/expectations"
mock_expectations "go.skia.org/infra/golden/go/expectations/mocks"
"go.skia.org/infra/golden/go/types"
)
// TestJoinedHistories_GetTriageHistory_WithChangelist_Success tests the 4 cases of triage history
// existing or not existing on the changelist and master branch.
func TestJoinedHistories_GetTriageHistory_WithChangelist_Success(t *testing.T) {
unittest.SmallTest(t)
const crs = "github"
const clID = "whatever"
const grouping = types.TestName("some_test")
const noHistoryOnMasterOrChangelist = types.Digest("digestHasNoHistory")
const historyOnMasterOnly = types.Digest("digestHasHistoryOnMasterOnly")
const historyOnChangelistOnly = types.Digest("digestHasHistoryOnChangelistOnly")
const historyOnBoth = types.Digest("digestHasHistoryOnBoth")
const masterBranchUser = "masterBranch@"
const changelistUser = "clUser@"
var masterBranchTriageTime = time.Date(2020, time.May, 18, 17, 16, 15, 0, time.UTC)
var changelistTriageTime = time.Date(2020, time.May, 19, 18, 17, 16, 0, time.UTC)
masterBranchHistory := &mock_expectations.Store{}
changelistHistory := &mock_expectations.Store{}
masterBranchHistory.On("ForChangelist", clID, crs).Return(changelistHistory)
masterBranchHistory.On("GetTriageHistory", testutils.AnyContext, grouping, historyOnMasterOnly).Return([]expectations.TriageHistory{
{
User: masterBranchUser,
TS: masterBranchTriageTime,
},
}, nil)
masterBranchHistory.On("GetTriageHistory", testutils.AnyContext, grouping, historyOnBoth).Return([]expectations.TriageHistory{
{
User: masterBranchUser,
TS: masterBranchTriageTime,
},
}, nil)
masterBranchHistory.On("GetTriageHistory", testutils.AnyContext, grouping, historyOnChangelistOnly).Return(nil, nil)
masterBranchHistory.On("GetTriageHistory", testutils.AnyContext, grouping, noHistoryOnMasterOrChangelist).Return(nil, nil)
changelistHistory.On("GetTriageHistory", testutils.AnyContext, grouping, historyOnChangelistOnly).Return([]expectations.TriageHistory{
{
User: changelistUser,
TS: changelistTriageTime,
},
}, nil)
changelistHistory.On("GetTriageHistory", testutils.AnyContext, grouping, historyOnBoth).Return([]expectations.TriageHistory{
{
User: changelistUser,
TS: changelistTriageTime,
},
}, nil)
changelistHistory.On("GetTriageHistory", testutils.AnyContext, grouping, historyOnMasterOnly).Return(nil, nil)
changelistHistory.On("GetTriageHistory", testutils.AnyContext, grouping, noHistoryOnMasterOrChangelist).Return(nil, nil)
s := SearchImpl{expectationsStore: masterBranchHistory}
joined := s.makeTriageHistoryGetter(crs, clID)
ctx := context.Background()
th, err := joined.GetTriageHistory(ctx, grouping, noHistoryOnMasterOrChangelist)
require.NoError(t, err)
assert.Empty(t, th)
th, err = joined.GetTriageHistory(ctx, grouping, historyOnMasterOnly)
require.NoError(t, err)
assert.Equal(t, []expectations.TriageHistory{
{
User: masterBranchUser,
TS: masterBranchTriageTime,
},
}, th)
th, err = joined.GetTriageHistory(ctx, grouping, historyOnChangelistOnly)
require.NoError(t, err)
assert.Equal(t, []expectations.TriageHistory{
{
User: changelistUser,
TS: changelistTriageTime,
},
}, th)
th, err = joined.GetTriageHistory(ctx, grouping, historyOnBoth)
require.NoError(t, err)
assert.Equal(t, []expectations.TriageHistory{
{
User: changelistUser,
TS: changelistTriageTime,
},
{
User: masterBranchUser,
TS: masterBranchTriageTime,
},
}, th)
}
func TestJoinedHistories_GetTriageHistory_NoChangelist_Success(t *testing.T) {
unittest.SmallTest(t)
const grouping = types.TestName("some_test")
const noHistoryOnMaster = types.Digest("digestHasNoHistory")
const historyOnMaster = types.Digest("digestHasHistoryOnMaster")
const masterBranchUser = "masterBranch@"
var masterBranchTriageTime = time.Date(2020, time.May, 18, 17, 16, 15, 0, time.UTC)
masterBranchHistory := &mock_expectations.Store{}
masterBranchHistory.On("GetTriageHistory", testutils.AnyContext, grouping, historyOnMaster).Return([]expectations.TriageHistory{
{
User: masterBranchUser,
TS: masterBranchTriageTime,
},
}, nil)
masterBranchHistory.On("GetTriageHistory", testutils.AnyContext, grouping, noHistoryOnMaster).Return(nil, nil)
s := SearchImpl{expectationsStore: masterBranchHistory}
joined := s.makeTriageHistoryGetter("", "")
ctx := context.Background()
th, err := joined.GetTriageHistory(ctx, grouping, noHistoryOnMaster)
require.NoError(t, err)
assert.Empty(t, th)
th, err = joined.GetTriageHistory(ctx, grouping, historyOnMaster)
require.NoError(t, err)
assert.Equal(t, []expectations.TriageHistory{
{
User: masterBranchUser,
TS: masterBranchTriageTime,
},
}, th)
}
func TestJoinedHistories_GetTriageHistory_BackendErrorCausesError(t *testing.T) {
unittest.SmallTest(t)
masterBranchHistory := &mock_expectations.Store{}
masterBranchHistory.On("GetTriageHistory", testutils.AnyContext, mock.Anything, mock.Anything).Return(nil, errors.New("boom"))
s := SearchImpl{expectationsStore: masterBranchHistory}
joined := s.makeTriageHistoryGetter("", "")
ctx := context.Background()
_, err := joined.GetTriageHistory(ctx, "whatever", "whatever")
require.Error(t, err)
assert.Contains(t, err.Error(), "boom")
}
func TestJoinedHistories_GetTriageHistory_ChangelistBackendErrorCausesError(t *testing.T) {
unittest.SmallTest(t)
const crs = "github"
const clID = "whatever"
masterBranchHistory := &mock_expectations.Store{}
changelistHistory := &mock_expectations.Store{}
masterBranchHistory.On("ForChangelist", clID, crs).Return(changelistHistory)
changelistHistory.On("GetTriageHistory", testutils.AnyContext, mock.Anything, mock.Anything).Return(nil, errors.New("pow"))
s := SearchImpl{expectationsStore: masterBranchHistory}
joined := s.makeTriageHistoryGetter(crs, clID)
ctx := context.Background()
_, err := joined.GetTriageHistory(ctx, "whatever", "whatever")
require.Error(t, err)
assert.Contains(t, err.Error(), "pow")
}