package facade

import (
	"context"
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/tidbcloud/metering/test/mockrepoter"
	"github.com/tidbcloud/metering/test/mocks3storage"
	"go.uber.org/mock/gomock"
)

func TestFactory(t *testing.T) {
	ctrl := gomock.NewController(t)
	mockClient := mocks3storage.NewMockClient(ctrl)
	cli = mockClient

	ms := mockrepoter.NewMockMeasureSender(ctrl)
	MockMeasureSender(ms)

	ctx := context.TODO()
	cRW := GetCheckpointReaderWriter(ctx)
	assert.NotNil(t, cRW)
	cRW = GetCheckpointReaderWriter(ctx)
	assert.NotNil(t, cRW)

	sTDS := GetScheduleTaskDataSync(ctx)
	assert.NotNil(t, sTDS)
	sTDS = GetScheduleTaskDataSync(ctx)
	assert.NotNil(t, sTDS)

	cMQ := GetTiDBClusterMetaQuerier(ctx)
	assert.NotNil(t, cMQ)
	cMQ = GetTiDBClusterMetaQuerier(ctx)
	assert.NotNil(t, cMQ)

	MockCheckpointReaderWriter(nil)
	MockScheduleTaskDataSync(nil)
	MockTiDBClusterMetaQuerier(nil)
	assert.Nil(t, metaQuerier)
	assert.Nil(t, dataSync)
	assert.Nil(t, checkpointRW)
	assert.NotNil(t, GetMeasureSender(ctx))
}
