heruvym/service/service_account_test.go

342 lines
6.0 KiB
Go
Raw Normal View History

package service
import (
"bytes"
"context"
"encoding/json"
"github.com/gofiber/fiber/v2"
"github.com/stretchr/testify/suite"
"github.com/themakers/hlog"
"go.uber.org/zap"
"heruvym/dal/mongo"
2024-09-25 14:22:57 +00:00
"heruvym/internal/utils/middleware"
"heruvym/model"
"net/http"
"testing"
)
var mongoUri = "mongodb://localmongo1:30001,localmongo2:30002,localmongo3:30003/?replicaSet=my-rs"
type AccountTestSuite struct {
svc *Account
dal *mongo.DAL
app *fiber.App
arg *model.Account
suite.Suite
}
func TestAccountTestSuite(t *testing.T) {
suite.Run(t, new(AccountTestSuite))
}
func (s *AccountTestSuite) SetupSuite() {
logger := hlog.New(zap.NewNop())
dal, err := mongo.New(context.Background(), mongoUri, "support", logger)
if s.NoError(err) {
s.dal = dal
}
s.svc = NewAccount(dal)
app := fiber.New()
app.Use(
middleware.JwtPlug,
)
s.app = app
for _, route := range s.svc.GetRoutes() {
app.Add(route.Method, route.Path, route.Handler).Name(route.Name)
}
b, err := json.Marshal(ReqCreateAccount{
Nickname: "SomeNickname",
Avatar: "/some/avatar.jpeg",
})
s.NoError(err)
req, err := http.NewRequest("POST", "/account", bytes.NewBuffer(b))
s.NoError(err)
req.Header.Set("Content-Type", "application/json")
resp, err := app.Test(req, 10)
s.NoError(err)
var result model.Account
err = json.NewDecoder(resp.Body).Decode(&result)
s.NoError(err)
s.arg = &result
s.Equal(200, resp.StatusCode)
}
func (s *AccountTestSuite) TearDownSuite() {
req, err := http.NewRequest("DELETE", "/account/delete/"+s.arg.UserID, nil)
req.Header.Set("Content-Type", "application/json")
resp, err := s.app.Test(req, 10)
s.NoError(err)
s.Equal(200, resp.StatusCode)
}
func (s *AccountTestSuite) TestAccountPagination() {
tests := []struct {
name string
args *ReqAccountPagination
want int
}{
{
name: "status 200",
args: &ReqAccountPagination{
Search: "",
Offset: 0,
Limit: 10,
},
want: fiber.StatusOK,
},
{
name: "status 400",
args: &ReqAccountPagination{
Offset: 0,
Limit: 0,
},
want: fiber.StatusBadRequest,
},
}
for _, tt := range tests {
s.Run(tt.name, func() {
b, err := json.Marshal(tt.args)
s.NoError(err)
req, err := http.NewRequest("GET", "/account/pagination", bytes.NewBuffer(b))
s.NoError(err)
req.Header.Set("Content-Type", "application/json")
resp, err := s.app.Test(req, 10)
s.NoError(err)
s.Equal(tt.want, resp.StatusCode)
})
}
}
func (s *AccountTestSuite) TestGetAccount() {
tests := []struct {
name string
args string
want int
}{
{
name: "status 200",
args: s.arg.UserID,
want: 200,
},
}
for _, tt := range tests {
s.Run(tt.name, func() {
req, err := http.NewRequest("GET", "/account/"+tt.args, nil)
s.NoError(err)
req.Header.Set("Content-Type", "application/json")
resp, err := s.app.Test(req, 10)
s.NoError(err)
s.Equal(tt.want, resp.StatusCode)
})
}
}
func (s *AccountTestSuite) TestSetAccountDelete() {
tests := []struct {
name string
args string
want int
}{
{
name: "status 200",
args: s.arg.UserID,
want: 200,
},
}
for _, tt := range tests {
s.Run(tt.name, func() {
req, err := http.NewRequest("DELETE", "/account/"+tt.args, nil)
s.NoError(err)
req.Header.Set("Content-Type", "application/json")
resp, err := s.app.Test(req, 10)
s.NoError(err)
s.Equal(tt.want, resp.StatusCode)
})
}
}
func (s *AccountTestSuite) TestAccountRestore() {
tests := []struct {
name string
args string
want int
}{
{
name: "status 200",
args: s.arg.UserID,
want: 200,
},
}
for _, tt := range tests {
s.Run(tt.name, func() {
req, err := http.NewRequest("POST", "/account/restore/"+tt.args, nil)
s.NoError(err)
req.Header.Set("Content-Type", "application/json")
resp, err := s.app.Test(req, 10)
s.NoError(err)
s.Equal(tt.want, resp.StatusCode)
})
}
}
func (s *AccountTestSuite) TestSetAccountRole() {
tests := []struct {
name string
args *ReqSetAccountRole
want int
}{
{
name: "status 200",
args: &ReqSetAccountRole{
UserID: s.arg.UserID,
Role: "test",
},
want: fiber.StatusOK,
},
{
name: "status 400",
args: &ReqSetAccountRole{},
want: fiber.StatusBadRequest,
},
}
for _, tt := range tests {
s.Run(tt.name, func() {
b, err := json.Marshal(tt.args)
s.NoError(err)
req, err := http.NewRequest("PATCH", "/account/role", bytes.NewBuffer(b))
s.NoError(err)
req.Header.Set("Content-Type", "application/json")
resp, err := s.app.Test(req, 10)
s.NoError(err)
s.Equal(tt.want, resp.StatusCode)
})
}
}
func (s *AccountTestSuite) TestSetAccountNickname() {
tests := []struct {
name string
args *ReqSetAccountNickname
want int
}{
{
name: "status 200",
args: &ReqSetAccountNickname{
UserID: s.arg.UserID,
Nickname: "test",
},
want: fiber.StatusOK,
},
{
name: "status 400",
args: &ReqSetAccountNickname{},
want: fiber.StatusBadRequest,
},
}
for _, tt := range tests {
s.Run(tt.name, func() {
b, err := json.Marshal(tt.args)
s.NoError(err)
req, err := http.NewRequest("PATCH", "/account/nickname", bytes.NewBuffer(b))
s.NoError(err)
req.Header.Set("Content-Type", "application/json")
resp, err := s.app.Test(req, 10)
s.NoError(err)
s.Equal(tt.want, resp.StatusCode)
})
}
}
func (s *AccountTestSuite) TestSetAccountAvatar() {
tests := []struct {
name string
args *ReqSetAccountAvatar
want int
}{
{
name: "status 200",
args: &ReqSetAccountAvatar{
UserID: s.arg.UserID,
Avatar: "/test.jpeg",
},
want: fiber.StatusOK,
},
{
name: "status 400",
args: &ReqSetAccountAvatar{},
want: fiber.StatusBadRequest,
},
}
for _, tt := range tests {
s.Run(tt.name, func() {
b, err := json.Marshal(tt.args)
s.NoError(err)
req, err := http.NewRequest("PATCH", "/account/avatar", bytes.NewBuffer(b))
s.NoError(err)
req.Header.Set("Content-Type", "application/json")
resp, err := s.app.Test(req, 10)
s.NoError(err)
s.Equal(tt.want, resp.StatusCode)
})
}
}