package scheduled

import (
	"testing"

	"github.com/stretchr/testify/assert"

	"github.com/pingcap/test-infra/services/tcms/service/common"
	"github.com/pingcap/test-infra/services/tcms/service/search"
	"github.com/pingcap/test-infra/services/tcms/utils"
)

func TestMeilisyncCases(t *testing.T) {
	db, svc := setup(t)
	defer shotdown(db, svc)

	_, total, err := svc.Case.List(utils.FakeCtx(), common.CaseQueryOpts{IncludeDeleted: true, Count: 1})
	assert.NoError(t, err)

	// sync all cases
	meilisync := NewMeilisync(db, svc.Search, svc.Case, svc.Plan, svc.PlanExec)
	syncedCount, err := meilisync.sync(utils.FakeCtx(), search.SearchIndexCases, meilisync.loadCases)
	assert.NoError(t, err)
	assert.Equal(t, total, syncedCount)
}

func TestMeilisyncPlans(t *testing.T) {
	db, svc := setup(t)
	defer shotdown(db, svc)

	_, total, err := svc.Plan.List(utils.FakeCtx(), common.PlanQueryOpts{Count: 1})
	assert.NoError(t, err)

	meilisync := NewMeilisync(db, svc.Search, svc.Case, svc.Plan, svc.PlanExec)
	syncedCount, err := meilisync.sync(utils.FakeCtx(), search.SearchIndexPlans, meilisync.loadPlans)
	assert.NoError(t, err)
	assert.Equal(t, total, syncedCount)
}

func TestMeilisyncPlanExecutions(t *testing.T) {
	db, svc := setup(t)
	defer shotdown(db, svc)

	_, total, err := svc.PlanExec.List(utils.FakeCtx(), common.PlanExecQueryOpts{Count: 1})
	assert.NoError(t, err)

	meilisync := NewMeilisync(db, svc.Search, svc.Case, svc.Plan, svc.PlanExec)
	syncedCount, err := meilisync.sync(utils.FakeCtx(), search.SearchIndexPlanExecutions, meilisync.loadPlanExecutions)
	assert.NoError(t, err)
	assert.Equal(t, total, syncedCount)
}
