package apierror import ( "context" "encoding/json" "errors" "testing" "github.com/stretchr/testify/assert" ) func TestNew(t *testing.T) { err := errors.New("internal server error") genericErr := New(err.Error()) assert.NotNil(t, genericErr) assert.Equal(t, err.Error(), genericErr.Message) } func TestNewFromError(t *testing.T) { err := errors.New("internal server error") genericErr := Wrap(err) assert.NotNil(t, genericErr) assert.Equal(t, err.Error(), genericErr.Message) } func TestSetPath(t *testing.T) { type key string const fieldInputCtx key = "path_context" graphCtx := context.Background() graphCtx = context.WithValue(graphCtx, fieldInputCtx, "login") genericErr := New("").SetPath(graphCtx) assert.NotNil(t, genericErr) } func TestSetMessage(t *testing.T) { genericErr := New("").SetMessage("invalid credentials") assert.NotNil(t, genericErr) assert.Equal(t, genericErr.Message, "invalid credentials") } func TestSetOperationID(t *testing.T) { genericErr := New("").SetOperationID(context.Background()) assert.NotNil(t, genericErr) assert.NotNil(t, genericErr.OperationID) } func TestSetSetVersion(t *testing.T) { genericErr := New("").SetVersion("v1") assert.NotNil(t, genericErr) assert.NotNil(t, genericErr.Version, "v1") } func TestSetGenericErrorExtension(t *testing.T) { urlExtension := map[string]interface{}{ "url": "https://ncr.com", } genericErr := New("").SetGenericErrorExtension(urlExtension) assert.Equal(t, len(genericErr.Ext), 1) } func TestAddGenericErrorExtension(t *testing.T) { urlExtension := map[string]interface{}{ "url": "https://ncr.com", } genericErr1 := New("").SetGenericErrorExtension(urlExtension) assert.Equal(t, len(genericErr1.Ext), 1) genericErr2 := genericErr1.AddGenericErrorExtension("path", "/login") assert.Equal(t, len(genericErr2.Ext), 2) } func TestMapGenericExtensions(t *testing.T) { urlExtensions := map[string]interface{}{ "url": "https://ncr.com", "path": "/login", } genericErr := New("").SetGenericErrorExtension(urlExtensions) assert.Equal(t, len(genericErr.Ext), 2) exts := genericErr.Extensions() assert.Equal(t, exts["url"], "https://ncr.com") assert.Equal(t, exts["path"], "/login") } func TestError(t *testing.T) { urlExtensions := map[string]interface{}{ "url": "https://ncr.com", "path": "/login", } genericErr := New("invalid credentials").SetVersion("v1").SetGenericErrorExtension(urlExtensions) assert.Equal(t, len(genericErr.Ext), 2) genericErrString, err := json.Marshal(genericErr) assert.NoError(t, err) assert.Equal(t, string(genericErrString), `{"message":"invalid credentials","operationID":"","version":"v1","Extensions":{"path":"/login","url":"https://ncr.com"}}`) }