package meshxapi

import (
	"net/http/httptest"
	"strings"
	"testing"

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

func TestBindJSONRejectsTrailingValue(t *testing.T) {
	type payload struct {
		Name string `json:"name"`
	}

	req := httptest.NewRequest("POST", "/test", strings.NewReader(`{"name":"ok"} {}`))
	_, err := BindJSON[payload](req)
	require.Error(t, err)
}

func TestBindJSONAllowsTrailingWhitespace(t *testing.T) {
	type payload struct {
		Name string `json:"name"`
	}

	req := httptest.NewRequest("POST", "/test", strings.NewReader(`{"name":"ok"}   `))
	body, err := BindJSON[payload](req)
	require.NoError(t, err)
	require.Equal(t, "ok", body.Name)
}

func TestBindEmptyOrJSONRejectsTrailingValue(t *testing.T) {
	type payload struct {
		Name string `json:"name"`
	}

	req := httptest.NewRequest("PATCH", "/test", strings.NewReader(`{"name":"ok"} []`))
	_, hasBody, err := BindEmptyOrJSON[payload](req)
	require.True(t, hasBody)
	require.Error(t, err)
}
