Skip to content

Commit

Permalink
test GetExpenseSummaryHandler
Browse files Browse the repository at this point in the history
  • Loading branch information
golfz committed May 19, 2024
1 parent e4439d1 commit 79d6192
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 2 deletions.
3 changes: 1 addition & 2 deletions api/summary/summary.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (
"github.com/labstack/echo/v4"
"go.uber.org/zap"
"net/http"
"time"
)

const (
Expand All @@ -29,7 +28,7 @@ type Spender struct {
}

type RawData struct {
Date time.Time
Date string
SumAmount float64
CountExpenses int
}
Expand Down
100 changes: 100 additions & 0 deletions api/summary/summary_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,104 @@ func TestGetExpenseSummaryHandler(t *testing.T) {
assert.Equal(t, http.StatusBadRequest, rec.Code)
})

t.Run("get summary succesfully", 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("1")

db, mock, _ := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
defer db.Close()

rows := sqlmock.NewRows([]string{"transaction_date", "total_amount", "record_count"}).
AddRow("2024-04-03", 1000, 10).
AddRow("2024-04-04", 500, 5)

mock.ExpectPrepare(sumSQL).ExpectQuery().WillReturnRows(rows)

h := New(config.FeatureFlag{}, db)
err := h.GetExpenseSummaryHandler(c)

assert.NoError(t, err)
assert.Equal(t, http.StatusOK, rec.Code)
assert.JSONEq(t, `{"total_amount": 1500, "average_per_day": 750, "count_transaction": 15}`, rec.Body.String())
})

t.Run("get summary failed on database", 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("1")

db, mock, _ := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
defer db.Close()

mock.ExpectPrepare(sumSQL).WillReturnError(assert.AnError)

h := New(config.FeatureFlag{}, db)
err := h.GetExpenseSummaryHandler(c)

assert.NoError(t, err)
assert.Equal(t, http.StatusInternalServerError, rec.Code)
})

t.Run("query error", 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("1")

db, mock, _ := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
defer db.Close()

mock.ExpectPrepare(sumSQL).ExpectQuery().WillReturnError(assert.AnError)

h := New(config.FeatureFlag{}, db)
err := h.GetExpenseSummaryHandler(c)

assert.NoError(t, err)
assert.Equal(t, http.StatusInternalServerError, rec.Code)
})

t.Run("scan error", 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("1")

db, mock, _ := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
defer db.Close()

rows := sqlmock.NewRows([]string{"transaction_date", "total_amount"}).
AddRow("2024-04-03", 1000).
AddRow("2024-04-04", 500)
mock.ExpectPrepare(sumSQL).ExpectQuery().WillReturnRows(rows)

h := New(config.FeatureFlag{}, db)
err := h.GetExpenseSummaryHandler(c)

assert.NoError(t, err)
assert.Equal(t, http.StatusInternalServerError, rec.Code)
})

}

0 comments on commit 79d6192

Please sign in to comment.