package handler

import (
	"net/http"
	"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 TestGetSvcTask(t *testing.T) {
	h := setup(t)
	defer h.Shutdown()
	_, obj := htest.MustGET[taskruns.SvcTask](h.Echo, "/api/v1/svctasks/1", htest.WithUser(1))
	require.Equal(t, "sample-task", obj.Name)
}

func TestGetSvcTaskByName(t *testing.T) {
	h := setup(t)
	defer h.Shutdown()
	_, obj := htest.MustGET[taskruns.SvcTask](h.Echo, "/api/v1/svctasks/name/sample-task", htest.WithUser(1))
	require.Equal(t, 1, int(obj.MetaData.ID))
}

func TestGetSvcTaskByNameNotFound(t *testing.T) {
	h := setup(t)
	defer h.Shutdown()
	rec, _ := htest.GET[taskruns.SvcTask](h.Echo, "/api/v1/svctasks/name/not-existed", htest.WithUser(1))
	require.Equal(t, http.StatusNotFound, rec.Code)
}

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

func TestCreateSvcTask(t *testing.T) {
	h := setup(t)
	defer h.Shutdown()
	task := taskruns.SvcTask{Name: "newtask"}
	task.FillHeader()
	_, obj := htest.MustPOST[taskruns.SvcTask](h.Echo, "/api/v1/svctasks", htest.WithJSON(task), htest.WithUser(1))
	require.Equal(t, "newtask", obj.Name)
	require.Greater(t, int(obj.MetaData.ID), 1)
}
