mirror of
https://github.com/go-eagle/eagle.git
synced 2025-09-26 20:41:26 +08:00
129 lines
3.2 KiB
Go
129 lines
3.2 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"regexp"
|
|
"testing"
|
|
"time"
|
|
|
|
sqlmock "github.com/DATA-DOG/go-sqlmock"
|
|
"github.com/go-test/deep"
|
|
"github.com/jinzhu/gorm"
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/stretchr/testify/suite"
|
|
|
|
"github.com/go-eagle/eagle/internal/model"
|
|
)
|
|
|
|
type Suite struct {
|
|
suite.Suite
|
|
db *gorm.DB
|
|
mock sqlmock.Sqlmock
|
|
|
|
repository repository
|
|
}
|
|
|
|
func (s *Suite) SetupSuite() {
|
|
var (
|
|
db *sql.DB
|
|
err error
|
|
)
|
|
|
|
db, s.mock, err = sqlmock.New()
|
|
require.NoError(s.T(), err)
|
|
|
|
gdb, err := gorm.Open("mysql", db)
|
|
require.NoError(s.T(), err)
|
|
|
|
s.db = gdb
|
|
s.db.LogMode(true)
|
|
|
|
//s.repository = New(s.db)
|
|
}
|
|
|
|
func (s *Suite) AfterTest(_, _ string) {
|
|
require.NoError(s.T(), s.mock.ExpectationsWereMet())
|
|
}
|
|
|
|
//nolint: golint
|
|
func TestInit(t *testing.T) {
|
|
suite.Run(t, new(Suite))
|
|
}
|
|
|
|
func (s *Suite) Test_repository_Create() {
|
|
user := model.UserBaseModel{
|
|
Username: "test-name",
|
|
Password: "123456",
|
|
Phone: 123455678,
|
|
Email: "test@test.com",
|
|
Avatar: "/statics/avatar/1.jpg",
|
|
Sex: 1,
|
|
CreatedAt: time.Now(),
|
|
UpdatedAt: time.Now(),
|
|
}
|
|
|
|
const sqlInsert = `INSERT INTO "user_base" ("username","password","phone","email","avatar","sex","created_at","updated_at") VALUES ($1,$2,$3,$4,$5,$6,$7,$8) RETURNING "user_base"."id"`
|
|
const newID = 1
|
|
|
|
s.mock.ExpectBegin()
|
|
s.mock.ExpectQuery(regexp.QuoteMeta(sqlInsert)).
|
|
WithArgs(user.Username, user.Password, user.Phone, user.Email, user.Avatar, user.Sex, user.CreatedAt, user.UpdatedAt).
|
|
WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(newID))
|
|
s.mock.ExpectCommit()
|
|
|
|
_, err := s.repository.CreateUser(context.TODO(), &user)
|
|
|
|
require.NoError(s.T(), err)
|
|
}
|
|
|
|
func (s *Suite) Test_repository_GetUserByID() {
|
|
var (
|
|
id uint64 = 2
|
|
username = "test-name"
|
|
)
|
|
|
|
s.mock.ExpectQuery(regexp.QuoteMeta(
|
|
`SELECT * FROM "user_base" WHERE (id = $1)`)).
|
|
WithArgs(id).WillReturnRows(sqlmock.NewRows([]string{"id", "username"}).AddRow(id, username))
|
|
|
|
res, err := s.repository.GetUser(context.TODO(), id)
|
|
|
|
require.NoError(s.T(), err)
|
|
require.Nil(s.T(), deep.Equal(&model.UserBaseModel{ID: id, Username: username}, res))
|
|
}
|
|
|
|
func (s *Suite) Test_repository_GetUserByPhone() {
|
|
var (
|
|
id uint64 = 2
|
|
username = "test-phone"
|
|
phone int64 = 13011112222
|
|
)
|
|
|
|
s.mock.ExpectQuery(regexp.QuoteMeta(
|
|
`SELECT * FROM "user_base" WHERE (phone = $1)`)).
|
|
WithArgs(phone).WillReturnRows(sqlmock.NewRows([]string{"id", "username", "phone"}).AddRow(id, username, phone))
|
|
|
|
res, err := s.repository.GetUserByPhone(context.TODO(), phone)
|
|
|
|
require.NoError(s.T(), err)
|
|
require.Nil(s.T(), deep.Equal(&model.UserBaseModel{ID: id, Username: username, Phone: phone}, res))
|
|
}
|
|
|
|
func (s *Suite) Test_repository_GetUserByEmail() {
|
|
var (
|
|
id uint64 = 2
|
|
username = "test-email"
|
|
email = "test-email@test.com"
|
|
)
|
|
|
|
s.mock.ExpectQuery(regexp.QuoteMeta(
|
|
`SELECT * FROM "user_base" WHERE (email = $1)`)).
|
|
WithArgs(email).WillReturnRows(sqlmock.NewRows([]string{"id", "username", "email"}).AddRow(id, username, email))
|
|
|
|
res, err := s.repository.GetUserByEmail(context.TODO(), email)
|
|
|
|
require.NoError(s.T(), err)
|
|
require.Nil(s.T(), deep.Equal(&model.UserBaseModel{ID: id, Username: username, Email: email}, res))
|
|
}
|