Skip to content

Commit fc29c5e

Browse files
committed
[base] use 400 status for parsing errors
1 parent cf6ceae commit fc29c5e

File tree

2 files changed

+19
-26
lines changed

2 files changed

+19
-26
lines changed

internal/sms-gateway/handlers/base/handler.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,23 @@ type Handler struct {
1919

2020
func (h *Handler) BodyParserValidator(c *fiber.Ctx, out any) error {
2121
if err := c.BodyParser(out); err != nil {
22-
return fmt.Errorf("can't parse body: %w", err)
22+
return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("Can't parse body: %s", err.Error()))
2323
}
2424

2525
return h.ValidateStruct(out)
2626
}
2727

2828
func (h *Handler) QueryParserValidator(c *fiber.Ctx, out any) error {
2929
if err := c.QueryParser(out); err != nil {
30-
return fmt.Errorf("can't parse query: %w", err)
30+
return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("Can't parse query: %s", err.Error()))
3131
}
3232

3333
return h.ValidateStruct(out)
3434
}
3535

3636
func (h *Handler) ParamsParserValidator(c *fiber.Ctx, out any) error {
3737
if err := c.ParamsParser(out); err != nil {
38-
return fmt.Errorf("can't parse params: %w", err)
38+
return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("Can't parse params: %s", err.Error()))
3939
}
4040

4141
return h.ValidateStruct(out)

internal/sms-gateway/handlers/base/handler_test.go

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package base
1+
package base_test
22

33
import (
44
"bytes"
@@ -8,53 +8,46 @@ import (
88
"net/http/httptest"
99
"testing"
1010

11+
"github.com/android-sms-gateway/server/internal/sms-gateway/handlers/base"
1112
"github.com/go-playground/validator/v10"
1213
"github.com/gofiber/fiber/v2"
1314
"go.uber.org/zap"
1415
"go.uber.org/zap/zaptest"
1516
)
1617

17-
type TestRequestBody struct {
18+
type testRequestBody struct {
1819
Name string `json:"name" validate:"required"`
1920
Age int `json:"age" validate:"required"`
2021
}
2122

22-
type TestRequestBodyNoValidate struct {
23+
type testRequestBodyNoValidate struct {
2324
Name string `json:"name" validate:"required"`
2425
Age int `json:"age" validate:"required"`
2526
}
2627

27-
func (t *TestRequestBody) Validate() error {
28+
func (t *testRequestBody) Validate() error {
2829
if t.Age < 18 {
2930
return fmt.Errorf("must be at least 18 years old")
3031
}
3132
return nil
3233
}
3334

34-
type TestQueryParams struct {
35-
Page int `query:"page" validate:"required"`
36-
}
37-
38-
type TestURLParams struct {
39-
ID string `params:"id" validate:"required,uuid"`
40-
}
41-
4235
func TestHandler_BodyParserValidator(t *testing.T) {
4336
logger := zaptest.NewLogger(t)
4437
validate := validator.New()
4538

46-
handler := &Handler{
39+
handler := &base.Handler{
4740
Logger: logger,
4841
Validator: validate,
4942
}
5043

5144
app := fiber.New()
5245
app.Post("/test", func(c *fiber.Ctx) error {
53-
var body TestRequestBody
46+
var body testRequestBody
5447
return handler.BodyParserValidator(c, &body)
5548
})
5649
app.Post("/test2", func(c *fiber.Ctx) error {
57-
var body TestRequestBodyNoValidate
50+
var body testRequestBodyNoValidate
5851
return handler.BodyParserValidator(c, &body)
5952
})
6053

@@ -67,32 +60,32 @@ func TestHandler_BodyParserValidator(t *testing.T) {
6760
{
6861
description: "Valid request body",
6962
path: "/test",
70-
payload: &TestRequestBody{Name: "John Doe", Age: 25},
63+
payload: &testRequestBody{Name: "John Doe", Age: 25},
7164
expectedStatus: fiber.StatusOK,
7265
},
7366
{
7467
description: "Invalid request body - missing name",
7568
path: "/test",
76-
payload: &TestRequestBody{Age: 25},
69+
payload: &testRequestBody{Age: 25},
7770
expectedStatus: fiber.StatusBadRequest,
7871
},
7972
{
8073
description: "Invalid request body - age too low",
8174
path: "/test",
82-
payload: &TestRequestBody{Name: "John Doe", Age: 17},
75+
payload: &testRequestBody{Name: "John Doe", Age: 17},
8376
expectedStatus: fiber.StatusBadRequest,
8477
},
8578
{
8679
description: "Valid request body - no validation",
8780
path: "/test2",
88-
payload: &TestRequestBodyNoValidate{Name: "John Doe", Age: 17},
81+
payload: &testRequestBodyNoValidate{Name: "John Doe", Age: 17},
8982
expectedStatus: fiber.StatusOK,
9083
},
9184
{
9285
description: "No request body",
9386
path: "/test",
9487
payload: nil,
95-
expectedStatus: fiber.StatusUnprocessableEntity,
88+
expectedStatus: fiber.StatusBadRequest,
9689
},
9790
}
9891

@@ -134,7 +127,7 @@ func TestHandler_QueryParserValidator(t *testing.T) {
134127
}
135128
for _, tt := range tests {
136129
t.Run(tt.name, func(t *testing.T) {
137-
h := &Handler{
130+
h := &base.Handler{
138131
Logger: tt.fields.Logger,
139132
Validator: tt.fields.Validator,
140133
}
@@ -164,7 +157,7 @@ func TestHandler_ParamsParserValidator(t *testing.T) {
164157
}
165158
for _, tt := range tests {
166159
t.Run(tt.name, func(t *testing.T) {
167-
h := &Handler{
160+
h := &base.Handler{
168161
Logger: tt.fields.Logger,
169162
Validator: tt.fields.Validator,
170163
}
@@ -193,7 +186,7 @@ func TestHandler_validateStruct(t *testing.T) {
193186
}
194187
for _, tt := range tests {
195188
t.Run(tt.name, func(t *testing.T) {
196-
h := &Handler{
189+
h := &base.Handler{
197190
Logger: tt.fields.Logger,
198191
Validator: tt.fields.Validator,
199192
}

0 commit comments

Comments
 (0)