package handler

import (
	"testing"

	"github.com/pingcap/test-infra/common/model/tcms/taskruns"
	htest "github.com/pingcap/test-infra/services/tcms/tests/httptest"
	"github.com/stretchr/testify/require"
)

func TestGetSvcTaskRun(t *testing.T) {
	h := setup(t)
	defer h.Shutdown()
	_, obj := htest.MustGET[taskruns.SvcTaskRun](h.Echo, "/api/v1/svctaskruns/1", htest.WithUser(1))
	require.Equal(t, taskruns.KindSvcTaskRun, obj.Kind)
	require.Equal(t, "sample-task", obj.Spec.SvcTaskName)
}

func TestGetSvcTaskListRun(t *testing.T) {
	h := setup(t)
	defer h.Shutdown()
	_, obj := htest.MustGET[taskruns.SvcTaskRunList](h.Echo, "/api/v1/svctaskruns", htest.WithUser(1))
	obj.Items[0].Spec.SvcTaskName = "sample-task"
}

func TestCreateSvcTaskRun(t *testing.T) {
	h := setup(t)
	defer h.Shutdown()
	taskRun := taskruns.SvcTaskRun{Spec: taskruns.SvcTaskRunSpec{SvcTaskName: "sample-task"}}
	taskRun.FillHeader()
	_, obj := htest.MustPOST[taskruns.SvcTaskRun](h.Echo, "/api/v1/svctaskruns", htest.WithJSON(taskRun), htest.WithUser(1))
	require.Equal(t, "sample-task", obj.Spec.SvcTaskName)
	require.Greater(t, int(obj.MetaData.ID), 1)
}

func TestUpdateSvcTaskRunStatus(t *testing.T) {
	h := setup(t)
	defer h.Shutdown()
	taskRun := taskruns.SvcTaskRun{Status: taskruns.SvcTaskRunStatus{Completed: false}}
	taskRun.FillHeader()
	_, obj := htest.MustPUT[taskruns.SvcTaskRun](h.Echo, "/api/v1/svctaskruns/1/status", htest.WithJSON(taskRun), htest.WithUser(1))
	require.Equal(t, false, obj.Status.Completed)
	require.Equal(t, 1, int(obj.MetaData.ID))
}
