Skip to content

Commit

Permalink
Test users controller
Browse files Browse the repository at this point in the history
  • Loading branch information
System-Glitch committed May 13, 2024
1 parent 9f2a74a commit 86c5035
Show file tree
Hide file tree
Showing 8 changed files with 329 additions and 21 deletions.
5 changes: 3 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,18 @@ module github.com/go-goyave/goyave-blog-example
go 1.22

require (
github.com/DATA-DOG/go-sqlmock v1.5.2
github.com/go-faker/faker/v4 v4.4.1
github.com/google/uuid v1.6.0
github.com/gosimple/slug v1.14.0
github.com/guregu/null/v5 v5.0.0
github.com/samber/lo v1.39.0
github.com/stretchr/testify v1.9.0
golang.org/x/crypto v0.23.0
gorm.io/driver/postgres v1.5.7
gorm.io/gorm v1.25.10
goyave.dev/filter v0.6.1-0.20240510154020-982e23d0cc78
goyave.dev/goyave/v5 v5.0.0-rc11
goyave.dev/goyave/v5 v5.0.0-rc9.0.20240513133605-118aa7b9b81f
)

require (
Expand All @@ -31,6 +33,5 @@ require (
golang.org/x/sync v0.7.0 // indirect
golang.org/x/text v0.15.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
gorm.io/driver/postgres v1.5.7 // indirect
goyave.dev/copier v0.4.3 // indirect
)
7 changes: 5 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
github.com/Code-Hex/uniseg v0.2.0 h1:QB/2UJFvEuRLSZqe+Sb1XQBTWjqGVbZoC6oSWzQRKws=
github.com/Code-Hex/uniseg v0.2.0/go.mod h1:/ndS2tP+X1lk2HUOcXWGtVTxVq0lWilwgMa4CbzdRsg=
github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU=
github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
Expand Down Expand Up @@ -27,6 +29,7 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/kisielk/sqlstruct v0.0.0-20201105191214-5f3e10d3ab46/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
Expand Down Expand Up @@ -68,5 +71,5 @@ goyave.dev/copier v0.4.3 h1:MxX2wBnhQUbv0mHPXEgw/zS4TZMtTVpzj/aYS3h4amk=
goyave.dev/copier v0.4.3/go.mod h1:WJu0Ex81v29f5U0eMWzSNsMTGmuGY6lQ/q5yGlyLDsU=
goyave.dev/filter v0.6.1-0.20240510154020-982e23d0cc78 h1:MFv0XiihEpvSLzK3C70amCTVtp+j1Vz8fkC2q2KmQ0c=
goyave.dev/filter v0.6.1-0.20240510154020-982e23d0cc78/go.mod h1:zeSUREjru306U6K1Op7xdtQOXWPXDlCCA1vAoGgVzsg=
goyave.dev/goyave/v5 v5.0.0-rc11 h1:D3EhhsBm3fRSlIXgJgnUOyBGtc/H04/8N8a0hBOyvRk=
goyave.dev/goyave/v5 v5.0.0-rc11/go.mod h1:9FZ+9lQa5gzQDWLV9jGT2ZO35vDgYU8pK3Jov5E2zQc=
goyave.dev/goyave/v5 v5.0.0-rc9.0.20240513133605-118aa7b9b81f h1:4FDSIT2asJrCjlED83FxIA/MQ2hsM86QqOWeo4COlOU=
goyave.dev/goyave/v5 v5.0.0-rc9.0.20240513133605-118aa7b9b81f/go.mod h1:9FZ+9lQa5gzQDWLV9jGT2ZO35vDgYU8pK3Jov5E2zQc=
34 changes: 18 additions & 16 deletions http/controller/article/article_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package article
import (
"context"
"fmt"
"io"
"net/http"
"net/http/httptest"
"testing"
Expand All @@ -17,6 +18,7 @@ import (
"goyave.dev/goyave/v5/auth"
"goyave.dev/goyave/v5/database"
"goyave.dev/goyave/v5/middleware/parse"
"goyave.dev/goyave/v5/slog"
"goyave.dev/goyave/v5/util/testutil"
"goyave.dev/goyave/v5/util/typeutil"
)
Expand All @@ -26,7 +28,7 @@ type updateArticleDTO struct {
Contents string `json:"contents"`
}

type ServiceMock struct {
type serviceMock struct {
paginator *database.PaginatorDTO[*dto.Article]
article *dto.Article
err error
Expand All @@ -37,36 +39,36 @@ type ServiceMock struct {
isOwner bool
}

func (s *ServiceMock) Index(_ context.Context, _ *filter.Request) (*database.PaginatorDTO[*dto.Article], error) {
func (s *serviceMock) Index(_ context.Context, _ *filter.Request) (*database.PaginatorDTO[*dto.Article], error) {
return s.paginator, s.err
}

func (s *ServiceMock) GetBySlug(_ context.Context, slug string) (*dto.Article, error) {
func (s *serviceMock) GetBySlug(_ context.Context, slug string) (*dto.Article, error) {
if s.article.Slug == slug {
return s.article, s.err
}
return nil, gorm.ErrRecordNotFound
}

func (s *ServiceMock) Create(_ context.Context, createDTO *dto.CreateArticle) error {
func (s *serviceMock) Create(_ context.Context, createDTO *dto.CreateArticle) error {
s.createCallback(createDTO)
return s.err
}

func (s *ServiceMock) Update(_ context.Context, _ uint, updateDTO *dto.UpdateArticle) error {
func (s *serviceMock) Update(_ context.Context, _ uint, updateDTO *dto.UpdateArticle) error {
s.updateCallback(updateDTO)
return s.err
}

func (s *ServiceMock) Delete(_ context.Context, _ uint) error {
func (s *serviceMock) Delete(_ context.Context, _ uint) error {
return s.err
}

func (s *ServiceMock) IsOwner(_ context.Context, _ uint, _ uint) (bool, error) {
func (s *serviceMock) IsOwner(_ context.Context, _ uint, _ uint) (bool, error) {
return s.isOwner, nil
}

func (s *ServiceMock) Name() string {
func (s *serviceMock) Name() string {
return service.Article
}

Expand Down Expand Up @@ -99,9 +101,9 @@ func generatePaginator() *database.PaginatorDTO[*dto.Article] {
}
}

func setupArticleTest(t *testing.T, service *ServiceMock) *testutil.TestServer {
func setupArticleTest(t *testing.T, service *serviceMock) *testutil.TestServer {
server := testutil.NewTestServer(t, "config.test.json")
// server.Logger = slog.New(slog.NewHandler(true, io.Discard))
server.Logger = slog.New(slog.NewHandler(true, io.Discard))
server.RegisterService(service)
server.RegisterRoutes(func(_ *goyave.Server, r *goyave.Router) {
r.GlobalMiddleware(&parse.Middleware{})
Expand All @@ -112,7 +114,7 @@ func setupArticleTest(t *testing.T, service *ServiceMock) *testutil.TestServer {

func TestArticle(t *testing.T) {
t.Run("Index", func(t *testing.T) {
service := &ServiceMock{
service := &serviceMock{
paginator: generatePaginator(),
}
server := setupArticleTest(t, service)
Expand All @@ -135,7 +137,7 @@ func TestArticle(t *testing.T) {
})

t.Run("Show", func(t *testing.T) {
service := &ServiceMock{
service := &serviceMock{
article: typeutil.MustConvert[*dto.Article](seed.ArticleGenerator()),
}
server := setupArticleTest(t, service)
Expand All @@ -157,7 +159,7 @@ func TestArticle(t *testing.T) {
})

t.Run("Create", func(t *testing.T) {
service := &ServiceMock{}
service := &serviceMock{}
server := setupArticleTest(t, service)
user := &dto.InternalUser{
User: dto.User{ID: 1},
Expand All @@ -173,7 +175,7 @@ func TestArticle(t *testing.T) {
request.Header.Set("Content-Type", "application/json")

service.createCallback = func(createDTO *dto.CreateArticle) {
expected := typeutil.Copy(&dto.CreateArticle{AuthorID: user.ID}, createDTO)
expected := typeutil.Copy(&dto.CreateArticle{AuthorID: user.ID}, requestBody)
assert.Equal(t, expected, createDTO)
}

Expand Down Expand Up @@ -201,7 +203,7 @@ func TestArticle(t *testing.T) {
})

t.Run("Update", func(t *testing.T) {
service := &ServiceMock{}
service := &serviceMock{}
server := setupArticleTest(t, service)
user := &dto.InternalUser{
User: dto.User{ID: 1},
Expand Down Expand Up @@ -273,7 +275,7 @@ func TestArticle(t *testing.T) {
})

t.Run("Delete", func(t *testing.T) {
service := &ServiceMock{}
service := &serviceMock{}
server := setupArticleTest(t, service)
user := &dto.InternalUser{
User: dto.User{ID: 1},
Expand Down
2 changes: 1 addition & 1 deletion http/controller/user/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func (ctrl *Controller) ShowAvatar(response *goyave.Response, request *goyave.Re
}

if !user.Avatar.Valid {
response.File(ctrl.StorageService.GetEmbedImagesFS(), "default_profile_picture.png")
response.File(ctrl.StorageService.GetEmbedImagesFS(), "default_profile_picture.jpg")
return
}

Expand Down
Loading

0 comments on commit 86c5035

Please sign in to comment.