File size: 1,453 Bytes
fea99b3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package commonhttp_test
import (
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/require"
"github.com/openmeterio/openmeter/pkg/framework/commonhttp"
"github.com/openmeterio/openmeter/pkg/models"
)
func TestHandleIssueIfHTTPStatusKnown(t *testing.T) {
test_err_code := models.ErrorCode("test_err_code")
t.Run("Should hide http status code attribute", func(t *testing.T) {
err := models.NewValidationIssue(test_err_code, "something went wrong", commonhttp.WithHTTPStatusCodeAttribute(http.StatusBadRequest))
require.Error(t, err)
writer := httptest.NewRecorder()
require.True(t, commonhttp.HandleIssueIfHTTPStatusKnown(t.Context(), err, writer))
res := writer.Result()
defer res.Body.Close()
require.Equal(t, http.StatusBadRequest, res.StatusCode)
var body map[string]interface{}
require.NoError(t, json.Unmarshal(writer.Body.Bytes(), &body))
extensions, ok := body["extensions"].(map[string]interface{})
require.True(t, ok)
issues, ok := extensions["validationErrors"].([]interface{})
require.True(t, ok)
require.Len(t, issues, 1)
issue, ok := issues[0].(map[string]interface{})
require.True(t, ok)
require.NotContains(t, issue, "commonhttp.httpAttributeKey:openmeter.http.status_code")
require.Equal(t, string(test_err_code), issue["code"])
require.Contains(t, issue, "message")
require.Contains(t, issue, "severity")
require.Len(t, issue, 3)
})
}
|