package autogencase

import (
	"bytes"
	"net/http"
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/tidb-management-service/functional-test/cases/openapidedicated/autogencase/model"
)

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

	originalExpect := `{
		"status_code": 200,
		"cel": "int(body.targetCapacity.tikv.nodeCount) == int('{tikv_target_node_count}')"
	}`
	step := &model.GenerationStep{
		RequestType: model.RequestTypeHTTP,
		Expect:      &originalExpect,
	}
	req, err := http.NewRequest(
		http.MethodPost,
		"https://example.test/resourcePools/pool-1:resizeCapacity",
		ReaderWrapper{Reader: bytes.NewReader([]byte(`{"targetCapacity":{"tikv":{"nodeCount":6}}}`))},
	)
	require.NoError(t, err)

	action := &HTTPRequestAction{
		req: req,
		resp: &http.Response{
			StatusCode: http.StatusOK,
			Header:     make(http.Header),
			Body: ReaderWrapper{Reader: bytes.NewReader([]byte(
				`{"targetCapacity":{"tikv":{"nodeCount":"6"}}}`,
			))},
		},
		expect: &model.HTTPResponseExpect{
			StatusCode: intPointer(http.StatusOK),
			CELExpr:    "int(body.targetCapacity.tikv.nodeCount) == int('6')",
		},
	}

	result, err := action.BuildResult(step)
	require.NoError(t, err)
	require.True(t, result.Expected)
}

func intPointer(value int) *int {
	return &value
}
