1 package apierror
2
3 import (
4 "context"
5 "encoding/json"
6 "errors"
7 "testing"
8
9 "github.com/stretchr/testify/assert"
10 )
11
12 func TestNew(t *testing.T) {
13 err := errors.New("internal server error")
14 genericErr := New(err.Error())
15 assert.NotNil(t, genericErr)
16 assert.Equal(t, err.Error(), genericErr.Message)
17 }
18
19 func TestNewFromError(t *testing.T) {
20 err := errors.New("internal server error")
21 genericErr := Wrap(err)
22 assert.NotNil(t, genericErr)
23 assert.Equal(t, err.Error(), genericErr.Message)
24 }
25
26 func TestSetPath(t *testing.T) {
27 type key string
28 const fieldInputCtx key = "path_context"
29 graphCtx := context.Background()
30 graphCtx = context.WithValue(graphCtx, fieldInputCtx, "login")
31 genericErr := New("").SetPath(graphCtx)
32 assert.NotNil(t, genericErr)
33 }
34
35 func TestSetMessage(t *testing.T) {
36 genericErr := New("").SetMessage("invalid credentials")
37 assert.NotNil(t, genericErr)
38 assert.Equal(t, genericErr.Message, "invalid credentials")
39 }
40
41 func TestSetOperationID(t *testing.T) {
42 genericErr := New("").SetOperationID(context.Background())
43 assert.NotNil(t, genericErr)
44 assert.NotNil(t, genericErr.OperationID)
45 }
46
47 func TestSetSetVersion(t *testing.T) {
48 genericErr := New("").SetVersion("v1")
49 assert.NotNil(t, genericErr)
50 assert.NotNil(t, genericErr.Version, "v1")
51 }
52
53 func TestSetGenericErrorExtension(t *testing.T) {
54 urlExtension := map[string]interface{}{
55 "url": "https://ncr.com",
56 }
57 genericErr := New("").SetGenericErrorExtension(urlExtension)
58 assert.Equal(t, len(genericErr.Ext), 1)
59 }
60
61 func TestAddGenericErrorExtension(t *testing.T) {
62 urlExtension := map[string]interface{}{
63 "url": "https://ncr.com",
64 }
65 genericErr1 := New("").SetGenericErrorExtension(urlExtension)
66 assert.Equal(t, len(genericErr1.Ext), 1)
67 genericErr2 := genericErr1.AddGenericErrorExtension("path", "/login")
68 assert.Equal(t, len(genericErr2.Ext), 2)
69 }
70
71 func TestMapGenericExtensions(t *testing.T) {
72 urlExtensions := map[string]interface{}{
73 "url": "https://ncr.com",
74 "path": "/login",
75 }
76 genericErr := New("").SetGenericErrorExtension(urlExtensions)
77 assert.Equal(t, len(genericErr.Ext), 2)
78 exts := genericErr.Extensions()
79 assert.Equal(t, exts["url"], "https://ncr.com")
80 assert.Equal(t, exts["path"], "/login")
81 }
82
83 func TestError(t *testing.T) {
84 urlExtensions := map[string]interface{}{
85 "url": "https://ncr.com",
86 "path": "/login",
87 }
88 genericErr := New("invalid credentials").SetVersion("v1").SetGenericErrorExtension(urlExtensions)
89 assert.Equal(t, len(genericErr.Ext), 2)
90 genericErrString, err := json.Marshal(genericErr)
91 assert.NoError(t, err)
92 assert.Equal(t, string(genericErrString), `{"message":"invalid credentials","operationID":"","version":"v1","Extensions":{"path":"/login","url":"https://ncr.com"}}`)
93 }
94
View as plain text