package schedule

import (
	"context"
	"testing"
	"time"

	"github.com/stretchr/testify/assert"
	"github.com/tidbcloud/metering/pkg/common/constants"
	"github.com/tidbcloud/metering/pkg/facade"
	"github.com/tidbcloud/metering/test/mockfacade"
	"go.uber.org/mock/gomock"
)

func TestInstanceReportExecuteReady(t *testing.T) {
	ctrl := gomock.NewController(t)
	rw := mockfacade.NewMockCheckpointReaderWriter(ctrl)
	facade.MockCheckpointReaderWriter(rw)

	before := time.Now().Add(-1 * time.Hour).Unix()
	after := time.Now().Add(time.Hour).Unix()
	rw.EXPECT().GetCheckpoint(gomock.Any(), gomock.Any()).Return(int64(0), nil).Times(1)
	assert.Equal(t, false, InstanceReportExecuteReady(context.TODO(), after))

	rw.EXPECT().GetCheckpoint(gomock.Any(), gomock.Any()).Return(int64(0), nil).Times(1)
	assert.Equal(t, false, InstanceReportExecuteReady(context.TODO(), before))

	rw.EXPECT().GetCheckpoint(gomock.Any(), gomock.Any()).Return(before-1, nil).Times(1)
	assert.Equal(t, false, InstanceReportExecuteReady(context.TODO(), before))

	rw.EXPECT().GetCheckpoint(gomock.Any(), gomock.Any()).Return(before+1, nil).Times(1)
	assert.Equal(t, true, InstanceReportExecuteReady(context.TODO(), before))
}

func TestInstanceReportTask(t *testing.T) {

	got := InstanceReportTask()
	assert.Equal(t, testStartTime, got.start)
	assert.Equal(t, constants.ReportTaskName, got.Name)

}
