package commenter

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/now"
	"go.skia.org/infra/go/testutils"
	"go.skia.org/infra/golden/go/code_review"
	mock_codereview "go.skia.org/infra/golden/go/code_review/mocks"
	dks "go.skia.org/infra/golden/go/sql/datakitchensink"
	"go.skia.org/infra/golden/go/sql/schema"
	"go.skia.org/infra/golden/go/sql/sqltest"
)

var (
	// beforeCLs is a time that is before any CL in datakitchensink
	beforeCLs = time.Date(2020, time.December, 9, 0, 0, 0, 0, time.UTC)
	// afterCLs is a time that is after all CLs in datakitchensink
	afterCLs = time.Date(2020, time.December, 13, 0, 0, 0, 0, time.UTC)
)

func TestCommentOnCLs_MultiplePatchsetsNeedComments_CommentsMade(t *testing.T) {

	ctx := context.Background()
	db := sqltest.NewCockroachDBForTestsWithProductionSchema(ctx, t)
	require.NoError(t, sqltest.BulkInsertDataTables(ctx, db, dks.Build()))

	gerritClient := &mock_codereview.Client{}
	gerritInternalClient := &mock_codereview.Client{}

	gerritClient.On("GetChangelist", testutils.AnyContext, dks.ChangelistIDThatAttemptsToFixIOS).Return(
		code_review.Changelist{Status: code_review.Open}, nil)
	gerritClient.On("CommentOn", testutils.AnyContext, dks.ChangelistIDThatAttemptsToFixIOS,
		"Gold has detected about 2 new digest(s) on patchset 3.\nPlease triage them at gold.skia.org/cl/gerrit/CL_fix_ios.").Return(nil)

	gerritClient.On("GetChangelist", testutils.AnyContext, dks.ChangelistIDWithDisallowTriagingTest).Return(
		code_review.Changelist{Status: code_review.Open}, nil)
	gerritClient.On("CommentOn", testutils.AnyContext, dks.ChangelistIDWithDisallowTriagingTest,
		"Gold has detected about 1 new digest(s) on patchset 1.\nPlease triage them at gold.skia.org/cl/gerrit/CLdisallowtriaging.").Return(nil)

	gerritInternalClient.On("GetChangelist", testutils.AnyContext, dks.ChangelistIDThatAddsNewTests).Return(
		code_review.Changelist{Status: code_review.Open}, nil)
	gerritInternalClient.On("CommentOn", testutils.AnyContext, dks.ChangelistIDThatAddsNewTests,
		"Gold has detected about 4 new digest(s) on patchset 4.\nPlease triage them at gold.skia.org/cl/gerrit-internal/CL_new_tests.").Return(nil)

	c, err := New(db, []ReviewSystem{
		{ID: dks.GerritCRS, Client: gerritClient},
		{ID: dks.GerritInternalCRS, Client: gerritInternalClient},
	}, basicTemplate, instanceURL, 100)
	require.NoError(t, err)

	c.lastCheck = beforeCLs // Fake this time so both CLs appear in the time window.
	ctx = context.WithValue(ctx, now.ContextKey, afterCLs)

	err = c.CommentOnChangelistsWithUntriagedDigests(ctx)
	require.NoError(t, err)

	gerritClient.AssertExpectations(t)
	gerritInternalClient.AssertExpectations(t)

	actualPatchsets := sqltest.GetAllRows(ctx, t, db, "Patchsets", &schema.PatchsetRow{}).([]schema.PatchsetRow)
	assert.Equal(t, []schema.PatchsetRow{{
		PatchsetID:    "gerrit-internal_PS_adds_new_corpus",
		System:        dks.GerritInternalCRS,
		ChangelistID:  "gerrit-internal_CL_new_tests",
		Order:         1,
		GitHash:       "eeee222222222222222222222222222222222222",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit-internal_PS_adds_new_corpus_and_test",
		System:        dks.GerritInternalCRS,
		ChangelistID:  "gerrit-internal_CL_new_tests",
		Order:         4,
		GitHash:       "eeee333333333333333333333333333333333333",
		CommentedOnCL: true,
	}, {
		PatchsetID:    "gerrit_PS_fixes_ipad_but_not_iphone",
		System:        dks.GerritCRS,
		ChangelistID:  "gerrit_CL_fix_ios",
		Order:         3,
		GitHash:       "ffff111111111111111111111111111111111111",
		CommentedOnCL: true,
	}, {
		PatchsetID:    "gerrit_PSdisallowtriaging",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLdisallowtriaging",
		Order:         1,
		GitHash:       "ddddddddddddddddddddddddddddddddddd77777",
		CommentedOnCL: true,
	}, {
		PatchsetID:    "gerrit_PShaslanded",
		System:        dks.GerritCRS,
		ChangelistID:  "gerrit_CLhaslanded",
		Order:         1,
		GitHash:       "aaaaa11111111111111111111111111111111111",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PSisabandoned",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLisabandoned",
		Order:         1,
		GitHash:       "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb55555",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PSmultipledatapoints",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLmultipledatapoints",
		Order:         1,
		GitHash:       "ccccccccccccccccccccccccccccccccccc66666",
		CommentedOnCL: false,
	}}, actualPatchsets)

	actualChangelists := sqltest.GetAllRows(ctx, t, db, "Changelists", &schema.ChangelistRow{}).([]schema.ChangelistRow)
	assert.Equal(t, []schema.ChangelistRow{{
		ChangelistID:     "gerrit-internal_CL_new_tests",
		System:           dks.GerritInternalCRS,
		Status:           schema.StatusOpen, // This shouldn't be modified
		OwnerEmail:       dks.UserTwo,
		Subject:          "Increase test coverage",
		LastIngestedData: time.Date(2020, time.December, 12, 9, 20, 33, 0, time.UTC),
	}, {
		ChangelistID:     "gerrit_CL_fix_ios",
		System:           dks.GerritCRS,
		Status:           schema.StatusOpen, // This shouldn't be modified
		OwnerEmail:       dks.UserOne,
		Subject:          "Fix iOS",
		LastIngestedData: time.Date(2020, time.December, 10, 4, 5, 6, 0, time.UTC),
	}, {
		ChangelistID:     "gerrit_CLdisallowtriaging",
		System:           dks.GerritCRS,
		Status:           schema.StatusOpen,
		OwnerEmail:       dks.UserOne,
		Subject:          "add test with disallow triaging",
		LastIngestedData: time.Date(2020, time.December, 12, 16, 0, 0, 0, time.UTC),
	}, {
		ChangelistID:     "gerrit_CLhaslanded",
		System:           dks.GerritCRS,
		Status:           schema.StatusLanded,
		OwnerEmail:       dks.UserTwo,
		Subject:          "was landed",
		LastIngestedData: time.Date(2020, time.May, 5, 5, 5, 0, 0, time.UTC),
	}, {
		ChangelistID:     "gerrit_CLisabandoned",
		System:           dks.GerritCRS,
		Status:           schema.StatusAbandoned,
		OwnerEmail:       dks.UserOne,
		Subject:          "was abandoned",
		LastIngestedData: time.Date(2020, time.June, 6, 6, 6, 0, 0, time.UTC),
	}, {
		ChangelistID:     "gerrit_CLmultipledatapoints",
		System:           dks.GerritCRS,
		Status:           schema.StatusOpen,
		OwnerEmail:       dks.UserOne,
		Subject:          "multiple datapoints",
		LastIngestedData: time.Date(2020, time.December, 12, 14, 0, 0, 0, time.UTC),
	}}, actualChangelists)

	assert.Equal(t, c.lastCheck, afterCLs)
}

func TestCommentOnCLs_NoPatchsetsNeedComments_Success(t *testing.T) {

	ctx := context.Background()
	db := sqltest.NewCockroachDBForTestsWithProductionSchema(ctx, t)
	existingData := dks.Build()
	// Pretend we commented on everything already
	for i := range existingData.Patchsets {
		existingData.Patchsets[i].CommentedOnCL = true
	}
	require.NoError(t, sqltest.BulkInsertDataTables(ctx, db, existingData))

	c, err := New(db, []ReviewSystem{
		{ID: dks.GerritCRS, Client: nil}, // This test doesn't talk to the clients
		{ID: dks.GerritInternalCRS, Client: nil},
	}, basicTemplate, instanceURL, 100)
	require.NoError(t, err)

	c.lastCheck = beforeCLs // Fake this time so both CLs appear in the time window.
	ctx = context.WithValue(ctx, now.ContextKey, afterCLs)

	err = c.CommentOnChangelistsWithUntriagedDigests(ctx)
	require.NoError(t, err)

	actualPatchsets := sqltest.GetAllRows(ctx, t, db, "Patchsets", &schema.PatchsetRow{}).([]schema.PatchsetRow)
	assert.Equal(t, []schema.PatchsetRow{{
		PatchsetID:    "gerrit-internal_PS_adds_new_corpus",
		System:        dks.GerritInternalCRS,
		ChangelistID:  "gerrit-internal_CL_new_tests",
		Order:         1,
		GitHash:       "eeee222222222222222222222222222222222222",
		CommentedOnCL: true,
	}, {
		PatchsetID:    "gerrit-internal_PS_adds_new_corpus_and_test",
		System:        dks.GerritInternalCRS,
		ChangelistID:  "gerrit-internal_CL_new_tests",
		Order:         4,
		GitHash:       "eeee333333333333333333333333333333333333",
		CommentedOnCL: true,
	}, {
		PatchsetID:    "gerrit_PS_fixes_ipad_but_not_iphone",
		System:        dks.GerritCRS,
		ChangelistID:  "gerrit_CL_fix_ios",
		Order:         3,
		GitHash:       "ffff111111111111111111111111111111111111",
		CommentedOnCL: true,
	}, {
		PatchsetID:    "gerrit_PSdisallowtriaging",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLdisallowtriaging",
		Order:         1,
		GitHash:       "ddddddddddddddddddddddddddddddddddd77777",
		CommentedOnCL: true,
	}, {
		PatchsetID:    "gerrit_PShaslanded",
		System:        dks.GerritCRS,
		ChangelistID:  "gerrit_CLhaslanded",
		Order:         1,
		GitHash:       "aaaaa11111111111111111111111111111111111",
		CommentedOnCL: true,
	}, {
		PatchsetID:    "gerrit_PSisabandoned",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLisabandoned",
		Order:         1,
		GitHash:       "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb55555",
		CommentedOnCL: true,
	}, {
		PatchsetID:    "gerrit_PSmultipledatapoints",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLmultipledatapoints",
		Order:         1,
		GitHash:       "ccccccccccccccccccccccccccccccccccc66666",
		CommentedOnCL: true,
	}}, actualPatchsets)
}

func TestCommentOnCLs_OnePatchsetNeedsComment_Success(t *testing.T) {

	ctx := context.Background()
	db := sqltest.NewCockroachDBForTestsWithProductionSchema(ctx, t)
	existingData := dks.Build()
	// Pretend we commented on an earlier patchset for this CL
	for i, ps := range existingData.Patchsets {
		if ps.PatchsetID != "gerrit-internal_PS_adds_new_corpus_and_test" {
			existingData.Patchsets[i].CommentedOnCL = true
		}
	}
	require.NoError(t, sqltest.BulkInsertDataTables(ctx, db, existingData))

	gerritInternalClient := &mock_codereview.Client{}

	gerritInternalClient.On("GetChangelist", testutils.AnyContext, dks.ChangelistIDThatAddsNewTests).Return(
		code_review.Changelist{Status: code_review.Open}, nil)
	gerritInternalClient.On("CommentOn", testutils.AnyContext, dks.ChangelistIDThatAddsNewTests,
		"Gold has detected about 4 new digest(s) on patchset 4.\nPlease triage them at gold.skia.org/cl/gerrit-internal/CL_new_tests.").Return(nil)

	c, err := New(db, []ReviewSystem{
		{ID: dks.GerritCRS, Client: nil},
		{ID: dks.GerritInternalCRS, Client: gerritInternalClient},
	}, basicTemplate, instanceURL, 100)
	require.NoError(t, err)

	c.lastCheck = beforeCLs // Fake this time so both CLs appear in the time window.
	ctx = context.WithValue(ctx, now.ContextKey, afterCLs)

	err = c.CommentOnChangelistsWithUntriagedDigests(ctx)
	require.NoError(t, err)

	gerritInternalClient.AssertExpectations(t)

	actualPatchsets := sqltest.GetAllRows(ctx, t, db, "Patchsets", &schema.PatchsetRow{}).([]schema.PatchsetRow)
	assert.Equal(t, []schema.PatchsetRow{{
		PatchsetID:    "gerrit-internal_PS_adds_new_corpus",
		System:        dks.GerritInternalCRS,
		ChangelistID:  "gerrit-internal_CL_new_tests",
		Order:         1,
		GitHash:       "eeee222222222222222222222222222222222222",
		CommentedOnCL: true,
	}, {
		PatchsetID:    "gerrit-internal_PS_adds_new_corpus_and_test",
		System:        dks.GerritInternalCRS,
		ChangelistID:  "gerrit-internal_CL_new_tests",
		Order:         4,
		GitHash:       "eeee333333333333333333333333333333333333",
		CommentedOnCL: true,
	}, {
		PatchsetID:    "gerrit_PS_fixes_ipad_but_not_iphone",
		System:        dks.GerritCRS,
		ChangelistID:  "gerrit_CL_fix_ios",
		Order:         3,
		GitHash:       "ffff111111111111111111111111111111111111",
		CommentedOnCL: true,
	}, {
		PatchsetID:    "gerrit_PSdisallowtriaging",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLdisallowtriaging",
		Order:         1,
		GitHash:       "ddddddddddddddddddddddddddddddddddd77777",
		CommentedOnCL: true,
	}, {
		PatchsetID:    "gerrit_PShaslanded",
		System:        dks.GerritCRS,
		ChangelistID:  "gerrit_CLhaslanded",
		Order:         1,
		GitHash:       "aaaaa11111111111111111111111111111111111",
		CommentedOnCL: true,
	}, {
		PatchsetID:    "gerrit_PSisabandoned",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLisabandoned",
		Order:         1,
		GitHash:       "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb55555",
		CommentedOnCL: true,
	}, {
		PatchsetID:    "gerrit_PSmultipledatapoints",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLmultipledatapoints",
		Order:         1,
		GitHash:       "ccccccccccccccccccccccccccccccccccc66666",
		CommentedOnCL: true,
	}}, actualPatchsets)
}

func TestCommentOnCLs_NoCLsInWindow_NothingUpdated(t *testing.T) {

	ctx := context.Background()
	db := sqltest.NewCockroachDBForTestsWithProductionSchema(ctx, t)
	require.NoError(t, sqltest.BulkInsertDataTables(ctx, db, dks.Build()))

	c, err := New(db, []ReviewSystem{
		{ID: dks.GerritCRS, Client: nil}, // This test doesn't talk to the clients
		{ID: dks.GerritInternalCRS, Client: nil},
	}, basicTemplate, instanceURL, 100)
	require.NoError(t, err)

	// Don't fake the time, comments should all be in the distant past

	err = c.CommentOnChangelistsWithUntriagedDigests(ctx)
	require.NoError(t, err)

	// Make sure no patchset was modified.
	actualPatchsets := sqltest.GetAllRows(ctx, t, db, "Patchsets", &schema.PatchsetRow{}).([]schema.PatchsetRow)
	assert.Equal(t, []schema.PatchsetRow{{
		PatchsetID:    "gerrit-internal_PS_adds_new_corpus",
		System:        dks.GerritInternalCRS,
		ChangelistID:  "gerrit-internal_CL_new_tests",
		Order:         1,
		GitHash:       "eeee222222222222222222222222222222222222",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit-internal_PS_adds_new_corpus_and_test",
		System:        dks.GerritInternalCRS,
		ChangelistID:  "gerrit-internal_CL_new_tests",
		Order:         4,
		GitHash:       "eeee333333333333333333333333333333333333",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PS_fixes_ipad_but_not_iphone",
		System:        dks.GerritCRS,
		ChangelistID:  "gerrit_CL_fix_ios",
		Order:         3,
		GitHash:       "ffff111111111111111111111111111111111111",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PSdisallowtriaging",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLdisallowtriaging",
		Order:         1,
		GitHash:       "ddddddddddddddddddddddddddddddddddd77777",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PShaslanded",
		System:        dks.GerritCRS,
		ChangelistID:  "gerrit_CLhaslanded",
		Order:         1,
		GitHash:       "aaaaa11111111111111111111111111111111111",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PSisabandoned",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLisabandoned",
		Order:         1,
		GitHash:       "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb55555",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PSmultipledatapoints",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLmultipledatapoints",
		Order:         1,
		GitHash:       "ccccccccccccccccccccccccccccccccccc66666",
		CommentedOnCL: false,
	}}, actualPatchsets)
}

func TestCommentOnCLs_CLWasAbandoned_DBNotUpdated(t *testing.T) {

	ctx := context.Background()
	db := sqltest.NewCockroachDBForTestsWithProductionSchema(ctx, t)
	require.NoError(t, sqltest.BulkInsertDataTables(ctx, db, dks.Build()))

	gerritInternalClient := &mock_codereview.Client{}

	gerritInternalClient.On("GetChangelist", testutils.AnyContext, dks.ChangelistIDThatAddsNewTests).Return(
		code_review.Changelist{Status: code_review.Abandoned}, nil)

	c, err := New(db, []ReviewSystem{
		{ID: dks.GerritInternalCRS, Client: gerritInternalClient},
	}, basicTemplate, instanceURL, 100)
	require.NoError(t, err)

	// Only one CL should appear in the window
	ctx = context.WithValue(ctx, now.ContextKey, afterCLs)

	err = c.CommentOnChangelistsWithUntriagedDigests(ctx)
	require.NoError(t, err)

	gerritInternalClient.AssertExpectations(t)

	actualPatchsets := sqltest.GetAllRows(ctx, t, db, "Patchsets", &schema.PatchsetRow{}).([]schema.PatchsetRow)
	assert.Equal(t, []schema.PatchsetRow{{
		PatchsetID:    "gerrit-internal_PS_adds_new_corpus",
		System:        dks.GerritInternalCRS,
		ChangelistID:  "gerrit-internal_CL_new_tests",
		Order:         1,
		GitHash:       "eeee222222222222222222222222222222222222",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit-internal_PS_adds_new_corpus_and_test",
		System:        dks.GerritInternalCRS,
		ChangelistID:  "gerrit-internal_CL_new_tests",
		Order:         4,
		GitHash:       "eeee333333333333333333333333333333333333",
		CommentedOnCL: false, // should not be updated
	}, {
		PatchsetID:    "gerrit_PS_fixes_ipad_but_not_iphone",
		System:        dks.GerritCRS,
		ChangelistID:  "gerrit_CL_fix_ios",
		Order:         3,
		GitHash:       "ffff111111111111111111111111111111111111",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PSdisallowtriaging",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLdisallowtriaging",
		Order:         1,
		GitHash:       "ddddddddddddddddddddddddddddddddddd77777",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PShaslanded",
		System:        dks.GerritCRS,
		ChangelistID:  "gerrit_CLhaslanded",
		Order:         1,
		GitHash:       "aaaaa11111111111111111111111111111111111",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PSisabandoned",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLisabandoned",
		Order:         1,
		GitHash:       "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb55555",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PSmultipledatapoints",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLmultipledatapoints",
		Order:         1,
		GitHash:       "ccccccccccccccccccccccccccccccccccc66666",
		CommentedOnCL: false,
	}}, actualPatchsets)

	// The changelists records should not be altered here - that will be taken care of by
	// a different background task, the same one that merges in expectations from a CL for landed
	// CLs.
	actualChangelists := sqltest.GetAllRows(ctx, t, db, "Changelists", &schema.ChangelistRow{}).([]schema.ChangelistRow)
	assert.Equal(t, []schema.ChangelistRow{{
		ChangelistID:     "gerrit-internal_CL_new_tests",
		System:           dks.GerritInternalCRS,
		Status:           schema.StatusOpen, // This shouldn't be modified
		OwnerEmail:       dks.UserTwo,
		Subject:          "Increase test coverage",
		LastIngestedData: time.Date(2020, time.December, 12, 9, 20, 33, 0, time.UTC),
	}, {
		ChangelistID:     "gerrit_CL_fix_ios",
		System:           dks.GerritCRS,
		Status:           schema.StatusOpen, // This shouldn't be modified
		OwnerEmail:       dks.UserOne,
		Subject:          "Fix iOS",
		LastIngestedData: time.Date(2020, time.December, 10, 4, 5, 6, 0, time.UTC),
	}, {
		ChangelistID:     "gerrit_CLdisallowtriaging",
		System:           dks.GerritCRS,
		Status:           schema.StatusOpen,
		OwnerEmail:       dks.UserOne,
		Subject:          "add test with disallow triaging",
		LastIngestedData: time.Date(2020, time.December, 12, 16, 0, 0, 0, time.UTC),
	}, {
		ChangelistID:     "gerrit_CLhaslanded",
		System:           dks.GerritCRS,
		Status:           schema.StatusLanded,
		OwnerEmail:       dks.UserTwo,
		Subject:          "was landed",
		LastIngestedData: time.Date(2020, time.May, 5, 5, 5, 0, 0, time.UTC),
	}, {
		ChangelistID:     "gerrit_CLisabandoned",
		System:           dks.GerritCRS,
		Status:           schema.StatusAbandoned,
		OwnerEmail:       dks.UserOne,
		Subject:          "was abandoned",
		LastIngestedData: time.Date(2020, time.June, 6, 6, 6, 0, 0, time.UTC),
	}, {
		ChangelistID:     "gerrit_CLmultipledatapoints",
		System:           dks.GerritCRS,
		Status:           schema.StatusOpen,
		OwnerEmail:       dks.UserOne,
		Subject:          "multiple datapoints",
		LastIngestedData: time.Date(2020, time.December, 12, 14, 0, 0, 0, time.UTC),
	}}, actualChangelists)
}

// This tests the case where leaving a comment fails. The whole function should not fail, the DB
// should not be updated so we can try again later. The error should be logged instead.
func TestCommentOnCLs_CommentingResultsInError_ErrorLoggedNotReturned(t *testing.T) {

	ctx := context.Background()
	db := sqltest.NewCockroachDBForTestsWithProductionSchema(ctx, t)
	require.NoError(t, sqltest.BulkInsertDataTables(ctx, db, dks.Build()))

	gerritInternalClient := &mock_codereview.Client{}

	gerritInternalClient.On("GetChangelist", testutils.AnyContext, dks.ChangelistIDThatAddsNewTests).Return(
		code_review.Changelist{Status: code_review.Open}, nil)
	gerritInternalClient.On("CommentOn", testutils.AnyContext, mock.Anything, mock.Anything).Return(errors.New("internet down"))

	c, err := New(db, []ReviewSystem{
		{ID: dks.GerritInternalCRS, Client: gerritInternalClient},
	}, basicTemplate, instanceURL, 100)
	require.NoError(t, err)

	// Only one CL should appear in the window
	ctx = context.WithValue(ctx, now.ContextKey, afterCLs)

	err = c.CommentOnChangelistsWithUntriagedDigests(ctx)
	require.NoError(t, err)

	gerritInternalClient.AssertExpectations(t)

	actualPatchsets := sqltest.GetAllRows(ctx, t, db, "Patchsets", &schema.PatchsetRow{}).([]schema.PatchsetRow)
	assert.Equal(t, []schema.PatchsetRow{{
		PatchsetID:    "gerrit-internal_PS_adds_new_corpus",
		System:        dks.GerritInternalCRS,
		ChangelistID:  "gerrit-internal_CL_new_tests",
		Order:         1,
		GitHash:       "eeee222222222222222222222222222222222222",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit-internal_PS_adds_new_corpus_and_test",
		System:        dks.GerritInternalCRS,
		ChangelistID:  "gerrit-internal_CL_new_tests",
		Order:         4,
		GitHash:       "eeee333333333333333333333333333333333333",
		CommentedOnCL: false, // should not be updated
	}, {
		PatchsetID:    "gerrit_PS_fixes_ipad_but_not_iphone",
		System:        dks.GerritCRS,
		ChangelistID:  "gerrit_CL_fix_ios",
		Order:         3,
		GitHash:       "ffff111111111111111111111111111111111111",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PSdisallowtriaging",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLdisallowtriaging",
		Order:         1,
		GitHash:       "ddddddddddddddddddddddddddddddddddd77777",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PShaslanded",
		System:        dks.GerritCRS,
		ChangelistID:  "gerrit_CLhaslanded",
		Order:         1,
		GitHash:       "aaaaa11111111111111111111111111111111111",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PSisabandoned",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLisabandoned",
		Order:         1,
		GitHash:       "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb55555",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PSmultipledatapoints",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLmultipledatapoints",
		Order:         1,
		GitHash:       "ccccccccccccccccccccccccccccccccccc66666",
		CommentedOnCL: false,
	}}, actualPatchsets)
}

// TestCommentOnCLs_CLNotFound_NoError does not return an error when a CL is not found, as this
// can happen if a CL is made private and we don't want to erroring continuously.
func TestCommentOnCLs_CLNotFound_NoError(t *testing.T) {

	ctx := context.Background()
	db := sqltest.NewCockroachDBForTestsWithProductionSchema(ctx, t)
	require.NoError(t, sqltest.BulkInsertDataTables(ctx, db, dks.Build()))

	gerritInternalClient := &mock_codereview.Client{}

	gerritInternalClient.On("GetChangelist", testutils.AnyContext, dks.ChangelistIDThatAddsNewTests).Return(
		code_review.Changelist{}, code_review.ErrNotFound)

	c, err := New(db, []ReviewSystem{
		{ID: dks.GerritInternalCRS, Client: gerritInternalClient},
	}, basicTemplate, instanceURL, 100)
	require.NoError(t, err)

	// Only one CL should appear in the window
	ctx = context.WithValue(ctx, now.ContextKey, afterCLs)

	err = c.CommentOnChangelistsWithUntriagedDigests(ctx)
	require.NoError(t, err)

	gerritInternalClient.AssertExpectations(t)

	actualPatchsets := sqltest.GetAllRows(ctx, t, db, "Patchsets", &schema.PatchsetRow{}).([]schema.PatchsetRow)
	assert.Equal(t, []schema.PatchsetRow{{
		PatchsetID:    "gerrit-internal_PS_adds_new_corpus",
		System:        dks.GerritInternalCRS,
		ChangelistID:  "gerrit-internal_CL_new_tests",
		Order:         1,
		GitHash:       "eeee222222222222222222222222222222222222",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit-internal_PS_adds_new_corpus_and_test",
		System:        dks.GerritInternalCRS,
		ChangelistID:  "gerrit-internal_CL_new_tests",
		Order:         4,
		GitHash:       "eeee333333333333333333333333333333333333",
		CommentedOnCL: false, // should not be updated
	}, {
		PatchsetID:    "gerrit_PS_fixes_ipad_but_not_iphone",
		System:        dks.GerritCRS,
		ChangelistID:  "gerrit_CL_fix_ios",
		Order:         3,
		GitHash:       "ffff111111111111111111111111111111111111",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PSdisallowtriaging",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLdisallowtriaging",
		Order:         1,
		GitHash:       "ddddddddddddddddddddddddddddddddddd77777",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PShaslanded",
		System:        dks.GerritCRS,
		ChangelistID:  "gerrit_CLhaslanded",
		Order:         1,
		GitHash:       "aaaaa11111111111111111111111111111111111",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PSisabandoned",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLisabandoned",
		Order:         1,
		GitHash:       "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb55555",
		CommentedOnCL: false,
	}, {
		PatchsetID:    "gerrit_PSmultipledatapoints",
		System:        "gerrit",
		ChangelistID:  "gerrit_CLmultipledatapoints",
		Order:         1,
		GitHash:       "ccccccccccccccccccccccccccccccccccc66666",
		CommentedOnCL: false,
	}}, actualPatchsets)
}

const (
	instanceURL   = "gold.skia.org"
	basicTemplate = `Gold has detected about {{.NumNewDigests}} new digest(s) on patchset {{.PatchsetOrder}}.
Please triage them at {{.InstanceURL}}/cl/{{.CRS}}/{{.ChangelistID}}.`
)
