package scheduled

import (
	"testing"

	"github.com/stretchr/testify/assert"

	"github.com/pingcap/test-infra/services/tcms/service/common"
	"github.com/pingcap/test-infra/services/tcms/utils"

	"github.com/pingcap/test-infra/common/model"
)

func TestTrigger(t *testing.T) {
	db, svc := setup(t)
	defer shotdown(db, svc)
	trigger := NewTrigger(svc.Trigger)

	// Trigger ONCE
	triggeredCount, err := trigger.trigger(model.TriggerTypeOnce, 20)
	assert.NoError(t, err)
	assert.Equal(t, triggeredCount, 1)

	// Trigger ONCE again
	triggeredCount, err = trigger.trigger(model.TriggerTypeOnce, 20)
	assert.NoError(t, err)
	assert.Equal(t, triggeredCount, 0)

	// Trigger RELEASE
	triggeredCount, err = trigger.trigger(model.TriggerTypeRelease, 20)
	assert.NoError(t, err)
	assert.Equal(t, triggeredCount, 1)

	execs, total, err := svc.PlanExec.List(utils.FakeCtx(), common.PlanExecQueryOpts{
		TriggerIDs: []model.ID{3},
		Status:     []model.ExecutionStatus{model.ExecutionStatusPending},
		Count:      999,
	})
	assert.NoError(t, err)
	assert.Equal(t, total, 1)
	assert.Equal(t, execs[0].VariableBinds[0].Value, "v6.1.0")
}
