package tests

import (
	"github.com/go-co-op/gocron"
	"github.com/pingcap/dbaas/billing2/utils/log"
	"github.com/pingcap/dbaas/billing2/utils/tests"
	"github.com/pingcap/dbaas/billing2/utils/wrapworker"
	"github.com/stretchr/testify/suite"
	"testing"
	"time"
)

type WrapWorkerTestSuite struct {
	tests.BillingTestSuite
}

func TestWrapWorkerTestSuite(t *testing.T) {
	suite.Run(t, new(WrapWorkerTestSuite))
}

func (s *WrapWorkerTestSuite) TestAddWorker() {
	assert := s.Assert()
	scheduler := gocron.NewScheduler(time.UTC)
	// mock func
	f := func() {
		log.Info("add worker test")
	}

	// case 1: interval is empty
	err := wrapworker.AddWorker(scheduler, f, "", false)
	assert.Error(err)

	// case 2: jobFun is not function
	err = wrapworker.AddWorker(scheduler, "f", "5m", false)
	assert.Error(err)

	// case 3: interval is not valid
	err = wrapworker.AddWorker(scheduler, f, "ab", false)
	assert.Error(err)

	// case 4: success
	err = wrapworker.AddWorker(scheduler, f, "5m", false)
	assert.NoError(err)
}
