| package apierrors |
|
|
| import ( |
| "encoding/json" |
| "net/http" |
| "net/http/httptest" |
| "testing" |
|
|
| "github.com/stretchr/testify/assert" |
| "github.com/stretchr/testify/require" |
|
|
| "github.com/openmeterio/openmeter/openmeter/meter" |
| "github.com/openmeterio/openmeter/openmeter/productcatalog/feature" |
| ) |
|
|
| func TestGenericErrorEncoder(t *testing.T) { |
| encoder := GenericErrorEncoder() |
|
|
| t.Run("FeatureNotFoundError returns 404", func(t *testing.T) { |
| w := httptest.NewRecorder() |
| r := httptest.NewRequest(http.MethodGet, "/", nil) |
| err := &feature.FeatureNotFoundError{ID: "feat-123"} |
|
|
| handled := encoder(r.Context(), err, w, r) |
|
|
| require.True(t, handled) |
| assert.Equal(t, http.StatusNotFound, w.Code) |
|
|
| var body map[string]interface{} |
| require.NoError(t, json.Unmarshal(w.Body.Bytes(), &body)) |
| assert.Contains(t, body["detail"], "feature not found: feat-123") |
| }) |
|
|
| t.Run("MeterNotFoundError returns 404", func(t *testing.T) { |
| w := httptest.NewRecorder() |
| r := httptest.NewRequest(http.MethodGet, "/", nil) |
| err := meter.NewMeterNotFoundError("meter-456") |
|
|
| handled := encoder(r.Context(), err, w, r) |
|
|
| require.True(t, handled) |
| assert.Equal(t, http.StatusNotFound, w.Code) |
|
|
| var body map[string]interface{} |
| require.NoError(t, json.Unmarshal(w.Body.Bytes(), &body)) |
| assert.Contains(t, body["detail"], "meter not found: meter-456") |
| }) |
| } |
|
|