package run

import (
	"net/http"
	"testing"

	"github.com/stretchr/testify/require"
)

func TestCancelJSONIsStrictAndAllowsEmptyObject(t *testing.T) {
	body, err := decodeWorkflowRunCancelJSONBytes([]byte(`{"reason":"done"}`))
	require.NoError(t, err)
	require.Equal(t, "done", body.Reason)

	body, err = decodeWorkflowRunCancelJSONBytes([]byte(`{}`))
	require.NoError(t, err)
	require.Empty(t, body.Reason)

	for _, payload := range []string{
		`[]`,
		`{"unknown":true}`,
		`{"reason":"one","reason":"two"}`,
		`{"reason":7}`,
		`{"reason":"one"} {}`,
		`{"reason":"one"`,
	} {
		_, err := decodeWorkflowRunCancelJSONBytes([]byte(payload))
		requireRunHTTPError(t, err, http.StatusBadRequest, "run_invalid_json")
	}
}
