Skip to content

Commit 8791376

Browse files
committed
system.error: define/add severals custom error function
1 parent 8cbb812 commit 8791376

File tree

3 files changed

+151
-7
lines changed

3 files changed

+151
-7
lines changed

system/error/definitions.go

Lines changed: 65 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,74 @@ import (
55
"net/http"
66
)
77

8-
// ForbiddenAccess error
9-
func ForbiddenAccess() *SystemError {
10-
return CustomForbiddenAccess("Forbidden Access")
8+
// CustomSystemError custom SystemError
9+
func CustomSystemError(code int, message string) *SystemError {
10+
return &SystemError{StatusCode: code, Err: fmt.Errorf(message)}
11+
}
12+
13+
// CustomBadRequest custom bad request error
14+
func CustomBadRequest(message string) *SystemError {
15+
return CustomSystemError(http.StatusBadRequest, message)
16+
}
17+
18+
// BadRequest error
19+
// Similar with: 400 Http Status Code
20+
func BadRequest() *SystemError {
21+
return CustomBadRequest("Bad Request")
22+
}
23+
24+
// CustomUnauthorizedAccess error
25+
func CustomUnauthorizedAccess(message string) *SystemError {
26+
return CustomSystemError(http.StatusUnauthorized, message)
27+
}
28+
29+
// UnauthorizedAccess error
30+
// Similar with: 401 Http Status Code
31+
func UnauthorizedAccess() *SystemError {
32+
return CustomUnauthorizedAccess("Unauthorized Access")
1133
}
1234

1335
// CustomForbiddenAccess error
1436
func CustomForbiddenAccess(message string) *SystemError {
1537
return &SystemError{StatusCode: http.StatusForbidden, Err: fmt.Errorf(message)}
1638
}
39+
40+
// ForbiddenAccess error
41+
// Similar with: 403 Http Status Code
42+
func ForbiddenAccess() *SystemError {
43+
return CustomForbiddenAccess("Forbidden Access")
44+
}
45+
46+
// CustomNotFound error
47+
func CustomNotFound(message string) *SystemError {
48+
return CustomSystemError(http.StatusNotFound, message)
49+
}
50+
51+
// NotFound error
52+
// Similar withL 404 Http Status Code
53+
func NotFound() *SystemError {
54+
return CustomNotFound("Resource Not Found")
55+
}
56+
57+
// CustomConflict error
58+
// Similar withL 409 Http Status Code
59+
func CustomConflict(message string) *SystemError {
60+
return CustomSystemError(http.StatusConflict, message)
61+
}
62+
63+
// Conflict error
64+
// Similar withL 409 Http Status Code
65+
func Conflict() *SystemError {
66+
return CustomConflict("Resource Conflict")
67+
}
68+
69+
// CustomInternalSystemError error
70+
func CustomInternalSystemError(message string) *SystemError {
71+
return CustomSystemError(http.StatusInternalServerError, message)
72+
}
73+
74+
// InternalSystemError error
75+
// Similar with: 500 Http Status Code
76+
func InternalSystemError() *SystemError {
77+
return CustomInternalSystemError("Internal System Error")
78+
}

system/error/error.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@ type SystemError struct {
99
}
1010

1111
// Error string
12-
func (r *SystemError) Error() string {
13-
return fmt.Sprintf("Status %d: Error => %v", r.StatusCode, r.Err)
12+
func (e *SystemError) Error() string {
13+
return fmt.Sprintf("error [%d]: %s", e.StatusCode, e.Err)
14+
}
15+
16+
// Extensions error Extensions
17+
func (e *SystemError) Extensions() map[string]interface{} {
18+
return map[string]interface{}{
19+
"code": e.StatusCode,
20+
"message": e.Err,
21+
}
1422
}

system/error/error_test.go

Lines changed: 76 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,90 @@
11
package error
22

33
import (
4+
"fmt"
45
"net/http"
56
"testing"
67

78
"github.com/stretchr/testify/assert"
89
)
910

1011
func TestError_Methods(t *testing.T) {
11-
err := ForbiddenAccess()
12+
// System Error
13+
err := &SystemError{StatusCode: 0, Err: fmt.Errorf("Zero")}
14+
assert.Equal(t, "Zero", err.Err.Error())
15+
assert.Equal(t, 0, err.StatusCode)
16+
assert.Equal(t, "error [0]: Zero", err.Error())
1217

18+
// Custom System Error
19+
err = CustomSystemError(1, "One")
20+
assert.Equal(t, "One", err.Err.Error())
21+
assert.Equal(t, 1, err.StatusCode)
22+
assert.Equal(t, "error [1]: One", err.Error())
23+
24+
// Bad Request
25+
err = CustomBadRequest("Bad Request")
26+
assert.Equal(t, "Bad Request", err.Err.Error())
27+
assert.Equal(t, http.StatusBadRequest, err.StatusCode)
28+
assert.Equal(t, "error [400]: Bad Request", err.Error())
29+
30+
err = BadRequest()
31+
assert.Equal(t, "Bad Request", err.Err.Error())
32+
assert.Equal(t, http.StatusBadRequest, err.StatusCode)
33+
assert.Equal(t, "error [400]: Bad Request", err.Error())
34+
35+
// Unauthorized Access
36+
err = CustomUnauthorizedAccess("Unauthorized Access")
37+
assert.Equal(t, "Unauthorized Access", err.Err.Error())
38+
assert.Equal(t, http.StatusUnauthorized, err.StatusCode)
39+
assert.Equal(t, "error [401]: Unauthorized Access", err.Error())
40+
41+
err = UnauthorizedAccess()
42+
assert.Equal(t, "Unauthorized Access", err.Err.Error())
43+
assert.Equal(t, http.StatusUnauthorized, err.StatusCode)
44+
assert.Equal(t, "error [401]: Unauthorized Access", err.Error())
45+
46+
// Forbidden Access
47+
err = CustomForbiddenAccess("Forbidden Access")
48+
assert.Equal(t, "Forbidden Access", err.Err.Error())
49+
assert.Equal(t, http.StatusForbidden, err.StatusCode)
50+
assert.Equal(t, "error [403]: Forbidden Access", err.Error())
51+
52+
err = ForbiddenAccess()
1353
assert.Equal(t, "Forbidden Access", err.Err.Error())
1454
assert.Equal(t, http.StatusForbidden, err.StatusCode)
15-
assert.Equal(t, "Status 403: Error => Forbidden Access", err.Error())
55+
assert.Equal(t, "error [403]: Forbidden Access", err.Error())
56+
57+
// Not Found
58+
err = CustomNotFound("Resource Not Found")
59+
assert.Equal(t, "Resource Not Found", err.Err.Error())
60+
assert.Equal(t, http.StatusNotFound, err.StatusCode)
61+
assert.Equal(t, "error [404]: Resource Not Found", err.Error())
62+
63+
err = NotFound()
64+
assert.Equal(t, "Resource Not Found", err.Err.Error())
65+
assert.Equal(t, http.StatusNotFound, err.StatusCode)
66+
assert.Equal(t, "error [404]: Resource Not Found", err.Error())
67+
68+
// Conflict
69+
err = CustomConflict("Resource Conflict")
70+
assert.Equal(t, "Resource Conflict", err.Err.Error())
71+
assert.Equal(t, http.StatusConflict, err.StatusCode)
72+
assert.Equal(t, "error [409]: Resource Conflict", err.Error())
73+
74+
err = Conflict()
75+
assert.Equal(t, "Resource Conflict", err.Err.Error())
76+
assert.Equal(t, http.StatusConflict, err.StatusCode)
77+
assert.Equal(t, "error [409]: Resource Conflict", err.Error())
78+
79+
// Internal System Error
80+
err = CustomInternalSystemError("Internal System Error")
81+
assert.Equal(t, "Internal System Error", err.Err.Error())
82+
assert.Equal(t, http.StatusInternalServerError, err.StatusCode)
83+
assert.Equal(t, "error [500]: Internal System Error", err.Error())
84+
85+
err = InternalSystemError()
86+
assert.Equal(t, "Internal System Error", err.Err.Error())
87+
assert.Equal(t, http.StatusInternalServerError, err.StatusCode)
88+
assert.Equal(t, "error [500]: Internal System Error", err.Error())
89+
1690
}

0 commit comments

Comments
 (0)