package agent

import (
	"context"
	"net/http"
	"testing"

	"github.com/pingcap/errcode"
	"github.com/stretchr/testify/mock"
	"github.com/stretchr/testify/require"
)

func TestAgentClient_GetResponse(t *testing.T) {
	mockClient := &mockHttpRequester{}
	a := &AgentClientImpl{
		Client: mockClient,
	}
	ctx := context.Background()

	mockClient.On("RequestWithHeaders", ctx, "GET", "happy_path", nil, mock.Anything).Return(http.StatusOK, []byte("test"), nil)
	respBytes, err := a.getResponse(ctx, "GET", "happy_path", nil)
	require.NoError(t, err)
	require.Equal(t, []byte("test"), respBytes)

	mockClient.On("RequestWithHeaders", ctx, "GET", "forbidden_error", nil, mock.Anything).Return(http.StatusForbidden, []byte("{\"code\":7,\"message\":\"forbidden\"}"), nil)
	_, err = a.getResponse(ctx, "GET", "forbidden_error", nil)
	require.Error(t, err)
	require.Equal(t, "forbidden", err.Error())
	codeErr, ok := err.(errcode.ErrorCode)
	require.True(t, ok)
	require.Equal(t, errcode.ForbiddenCode, codeErr.Code())
}
