package event_svc

import (
	"context"
	"testing"

	. "github.com/onsi/gomega"
	eb_event "github.com/tidbcloud/eventbus-datastruct/event"
	"github.com/tidbcloud/pkgv2/bizerr"
	"github.com/tidbcloud/serverless-service/internal/domain/constant"
	"github.com/tidbcloud/serverless-service/internal/domain/repo/mock_repo"
	"go.uber.org/mock/gomock"
)

func Test_SpendLimitService_UpdateTidbPoolPolicy(t *testing.T) {
	g := NewGomegaWithT(t)
	ctx := context.Background()
	ctrl := gomock.NewController(t)
	defer ctrl.Finish()
	clusterTidbPoolRepo := mock_repo.NewMockClusterTidbPoolRepo(ctrl)
	svc := NewSpendLimitService(clusterTidbPoolRepo)

	event := &eb_event.SpendLimitEvent{
		TenantID:  101,
		RangeID:   1,
		RangeType: constant.SpendLimitRangeTypeCluster,
		Status:    constant.SpendLimitEventStatusFit,
	}
	clusterTidbPoolRepo.EXPECT().Save(gomock.Any(), gomock.Any()).Return(nil)
	g.Expect(svc.UpdateTidbPoolPolicy(ctx, event)).To(BeNil())
	{
		err := bizerr.New(bizerr.ErrCodeDB, "error")
		clusterTidbPoolRepo.EXPECT().Save(gomock.Any(), gomock.Any()).Return(err)
		g.Expect(svc.UpdateTidbPoolPolicy(ctx, event)).To(Equal(err))
	}
	event.Status = constant.SpendLimitEventStatusDeprecated
	g.Expect(svc.UpdateTidbPoolPolicy(ctx, event)).To(BeNil())
}
