package cron

import (
	"context"
	"testing"

	"github.com/stretchr/testify/mock"
	"github.com/stretchr/testify/require"
	apiv1 "github.com/tidbcloud/cluster-service-ng/api/cluster-service-ng/v1beta"
	"github.com/tidbcloud/cluster-service-ng/domain/entity"
	servermocks "github.com/tidbcloud/cluster-service-ng/domain/server/mocks"
	dataplanemocks "github.com/tidbcloud/cluster-service-ng/pkg/dataplane/mocks"
	repomocks "github.com/tidbcloud/cluster-service-ng/pkg/storage/repo/mocks"
)

func TestSyncStandbyTiDBGroupJobSkipsPausedPool(t *testing.T) {
	ctx := context.Background()
	ngService := servermocks.NewService(t)
	lockRepo := repomocks.NewLockRepo(t)
	dataplaneManager := dataplanemocks.NewManager(t)

	lockRepo.On("Lock", mock.Anything, mock.Anything).
		Return(func() error { return nil }, nil).
		Once()
	ngService.On("ListSharedPools", mock.Anything, []string(nil), []string(nil)).
		Return([]*entity.SharedPool{{
			SharedPool:            apiv1.SharedPool{Id: "sp-1", Phase: apiv1.SharedPool_AVAILABLE},
			PauseResumeState:      entity.PauseResumeStatePaused,
			SuspendComputeDesired: true,
		}}, nil).
		Once()

	job := NewSyncStandbyTiDBGroupJob(dataplaneManager, ngService, lockRepo, "@every 1m", 1, nil)
	require.NoError(t, job.Execute(ctx))
	dataplaneManager.AssertNotCalled(t, "GetClient", mock.Anything)
}
