package riverui

import (
	"encoding/json"
	"math"
	"strconv"
	"testing"

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

func TestInt64String(t *testing.T) {
	t.Parallel()

	t.Run("MarshalJSON", func(t *testing.T) {
		t.Parallel()

		require.Equal(t, `"123"`, string(mustMarshalJSON(t, int64String(123))))
	})

	t.Run("UnmarshalJSON", func(t *testing.T) {
		t.Parallel()

		var myLargeInt int64String

		// With quotes.
		require.NoError(t, json.Unmarshal([]byte(`"123"`), &myLargeInt))
		require.Equal(t, int64String(123), myLargeInt)

		// Without quotes.
		require.NoError(t, json.Unmarshal([]byte(`123`), &myLargeInt))
		require.Equal(t, int64String(123), myLargeInt)

		// Integer larger than JSON's maximum number size.
		require.NoError(t, json.Unmarshal([]byte(`"`+strconv.FormatInt(math.MaxInt64, 10)+`"`), &myLargeInt))
		require.Equal(t, int64String(math.MaxInt64), myLargeInt)
	})
}