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