342 lines
6.0 KiB
Go
342 lines
6.0 KiB
Go
package service
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"encoding/json"
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/stretchr/testify/suite"
|
|
"gitea.pena/PenaSide/hlog"
|
|
"go.uber.org/zap"
|
|
"heruvym/dal/mongo"
|
|
"heruvym/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)
|
|
})
|
|
}
|
|
}
|