| 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) |
| }) |
| } |
|
|