From d0be2f9fb768f0d66b7975ebeb35ad889e3c59b7 Mon Sep 17 00:00:00 2001 From: Surattikorn Chumkaew Date: Sat, 18 May 2024 22:25:03 +0700 Subject: [PATCH] add test for GetExpenseSummaryHandler --- api/expense/summary/summary.go | 37 ++++++++++++++++++++++------- api/expense/summary/summary_test.go | 29 ++++++++++++++++++++++ 2 files changed, 57 insertions(+), 9 deletions(-) diff --git a/api/expense/summary/summary.go b/api/expense/summary/summary.go index cf5b38b..764af8a 100644 --- a/api/expense/summary/summary.go +++ b/api/expense/summary/summary.go @@ -2,10 +2,23 @@ package summary import ( "database/sql" + "errors" "github.com/KKGo-Software-engineering/workshop-summer/api/config" + "github.com/kkgo-software-engineering/workshop/mlog" + "github.com/labstack/echo/v4" + "go.uber.org/zap" + "net/http" "time" ) +var ( + ErrInvalidSpender = errors.New("invalid spender") +) + +type Err struct { + Message string `json:"message"` +} + type Spender struct { ID int `param:"id"` } @@ -50,12 +63,18 @@ func summary(data []RawData) Summary { } } -//func (h *handler) GetExpenseSummaryHandler(c echo.Context) error { -// var spender Spender -// if err := c.Bind(&spender); err != nil { -// return c.JSON(http.StatusBadRequest, err) -// } -// -// expenses := h.store.GetExpenses() -// -//} +// /api/v1/spenders/{id}/expenses/summary +func (h *handler) GetExpenseSummaryHandler(c echo.Context) error { + logger := mlog.L(c) + //ctx := c.Request().Context() + _ = c.Request().Context() + + var spender Spender + err := c.Bind(&spender) + if err != nil { + logger.Error(ErrInvalidSpender.Error(), zap.Error(err)) + return c.JSON(http.StatusBadRequest, Err{Message: ErrInvalidSpender.Error()}) + } + + return c.JSON(http.StatusOK, Summary{}) +} diff --git a/api/expense/summary/summary_test.go b/api/expense/summary/summary_test.go index 1e58196..17700b3 100644 --- a/api/expense/summary/summary_test.go +++ b/api/expense/summary/summary_test.go @@ -1,7 +1,12 @@ package summary import ( + "github.com/DATA-DOG/go-sqlmock" + "github.com/KKGo-Software-engineering/workshop-summer/api/config" + "github.com/labstack/echo/v4" "github.com/stretchr/testify/assert" + "net/http" + "net/http/httptest" "testing" ) @@ -40,3 +45,27 @@ func TestSummary(t *testing.T) { }) } } + +func TestGetExpenseSummaryHandler(t *testing.T) { + + t.Run("invalid spender id expect 400", func(t *testing.T) { + e := echo.New() + defer e.Close() + + req := httptest.NewRequest(http.MethodGet, "/", nil) + rec := httptest.NewRecorder() + c := e.NewContext(req, rec) + c.SetPath("/spenders/:id/expenses/summary") + c.SetParamNames("id") + c.SetParamValues("not_int") + + db, _, _ := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual)) + defer db.Close() + + h := New(config.FeatureFlag{}, db) + _ = h.GetExpenseSummaryHandler(c) + + assert.Equal(t, http.StatusBadRequest, rec.Code) + }) + +}