package api

import (
	"context"
	"testing"

	"github.com/golang/mock/gomock"
	"github.com/stretchr/testify/assert"
	cspb "github.com/tidbcloud/cluster-service-ng/api/cluster-service-ng/v1beta"

	"github.com/tidbcloud/ticdc-service-ng/pkg/clusterproxy/client/mocks"
)

func TestGetPDSafepoint(t *testing.T) {
	ctrl := gomock.NewController(t)
	defer ctrl.Finish()

	mockClient := mocks.NewMockClient(ctrl)
	tidbGroup := &cspb.TiDBGroup{
		Id:           "456",
		SharedPoolId: "1234",
	}
	mockClient.EXPECT().GetTiDBGroup().Return(tidbGroup).AnyTimes()
	pdClient := NewPdClient(mockClient)

	ctx := context.Background()
	expectedSafepoint := &Safepoint{SP: 12345}

	mockClient.EXPECT().Request(gomock.Any(), "GET",
		"/proxy/cluster/1234/pd/pd/api/v1/gc/safepoint",
		nil, gomock.Any()).DoAndReturn(
		func(ctx context.Context, method, path string, body, dest interface{}) error {
			*dest.(*Safepoint) = *expectedSafepoint
			return nil
		},
	).Times(1)

	safepoint, err := pdClient.GetPDSafepoint(ctx)
	assert.NoError(t, err)
	assert.Equal(t, expectedSafepoint, safepoint)
}
