package region

import (
	"testing"

	"github.com/stretchr/testify/require"

	globalngv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1"
	"github.com/tidbcloud/tidb-management-service/utilities/bizerr"
)

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

	request := listNodeSpecsRequest(globalngv1.NodeSpecComponentType_NODE_SPEC_COMPONENT_TYPE_TIKV)
	want := nodeSpecSortKey{CPU: 8, MemoryGi: 32, NodeSpecKey: "8C32G"}
	token, err := buildNodeSpecPageToken(request, want)
	require.Nil(t, err)

	request.PageToken = token
	got, err := parseNodeSpecPageToken(request)
	require.Nil(t, err)
	require.Equal(t, want, *got)

	request.ComponentType = globalngv1.NodeSpecComponentType_NODE_SPEC_COMPONENT_TYPE_TIFLASH
	_, err = parseNodeSpecPageToken(request)
	require.NotNil(t, err)
	require.Equal(t, bizerr.ErrCodeParams, err.ErrCode())
}

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

	request := listNodeSpecsRequest(globalngv1.NodeSpecComponentType_NODE_SPEC_COMPONENT_TYPE_TIKV)
	request.PageToken = "not-a-token"
	_, err := parseNodeSpecPageToken(request)
	require.NotNil(t, err)
	require.Equal(t, bizerr.ErrCodeParams, err.ErrCode())
}
