Files
atom/modules/auth/dao/role_test.go
2023-02-09 14:57:32 +08:00

152 lines
3.4 KiB
Go
Executable File

package dao
import (
"context"
"log"
"testing"
// 这里的依赖需要被导入,否则会报错
"atom/container"
"atom/database/models"
"atom/database/query"
_ "atom/providers"
"atom/utils"
"github.com/brianvoe/gofakeit/v6"
. "github.com/smartystreets/goconvey/convey"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
"go.uber.org/dig"
"gorm.io/gorm"
)
type RoleInjectParams struct {
dig.In
DB *gorm.DB
Dao *RoleDao
Query *query.Query
Faker *gofakeit.Faker
}
type RoleSuite struct {
suite.Suite
RoleInjectParams
}
func init() {
if err := container.Container.Provide(NewRoleDao); err != nil {
log.Fatal(err)
}
}
func Test_RoleSuite(t *testing.T) {
err := container.Container.Invoke(func(p RoleInjectParams) {
s := &RoleSuite{}
s.RoleInjectParams = p
suite.Run(t, s)
})
assert.NoError(t, err)
}
func (s *RoleSuite) BeforeTest(suiteName, testName string) {
log.Println("BeforeTest: ", testName)
utils.TruncateTable(s.DB, s.Query.SysRole.TableName())
switch testName {
case "Test_FindByID", "Test_UpdateByID", "Test_DeleteByID", "Test_DeletePermanentlyByID":
log.Println("BeforeTest: insert test data")
_, _ = s.Dao.Create(context.Background(), &models.SysRole{
UUID: s.Faker.UUID(),
Name: s.Faker.Name(),
ParentID: s.Faker.Uint64(),
DefaultRouter: s.Faker.Animal(),
})
}
}
func (s *RoleSuite) AfterTest(suiteName, testName string) {
}
///////////////////
// start testing cases
//////////////////
func (s *RoleSuite) Test_Create() {
Convey("Test_Create", s.T(), func() {
Reset(func() {
s.BeforeTest("_", "Test_Create")
})
Convey("create", func() {
model, err := s.Dao.Create(context.Background(), &models.SysRole{
UUID: s.Faker.UUID(),
Name: s.Faker.Name(),
ParentID: s.Faker.Uint64(),
DefaultRouter: s.Faker.Animal(),
})
So(err, ShouldBeNil)
So(model.ID, ShouldEqual, 1)
})
})
}
func (s *RoleSuite) Test_FindByID() {
Convey("Test_FindByID", s.T(), func() {
model, err := s.Dao.FindByID(context.Background(), 1)
So(err, ShouldBeNil)
So(model.ID, ShouldEqual, 1)
})
}
func (s *RoleSuite) Test_UpdateByID() {
Convey("Test_UpdateByID", s.T(), func() {
model, err := s.Dao.FindByID(context.Background(), 1)
So(err, ShouldBeNil)
So(model.ID, ShouldEqual, 1)
name := "TEST_UpdateByID"
model.Name = name
newModel, err := s.Dao.UpdateByID(context.Background(), model)
So(err, ShouldBeNil)
So(newModel.Name, ShouldEqual, name)
})
}
func (s *RoleSuite) Test_DeleteByID() {
Convey("Test_DeleteByID", s.T(), func() {
model, err := s.Dao.FindByID(context.Background(), 1)
So(err, ShouldBeNil)
So(model.ID, ShouldEqual, 1)
err = s.Dao.DeleteByID(context.Background(), model.ID)
So(err, ShouldBeNil)
model, err = s.Query.SysRole.
WithContext(context.TODO()).
Unscoped().
Where(s.Query.SysRole.ID.Eq(1)).
First()
So(err, ShouldBeNil)
So(model.DeletedAt, ShouldNotBeNil)
})
}
func (s *RoleSuite) Test_DeletePermanentlyByID() {
Convey("Test_DeletePermanentlyByID", s.T(), func() {
model, err := s.Dao.FindByID(context.Background(), 1)
So(err, ShouldBeNil)
So(model.ID, ShouldEqual, 1)
err = s.Dao.DeletePermanentlyByID(context.Background(), model.ID)
So(err, ShouldBeNil)
_, err = s.Query.SysRole.
WithContext(context.TODO()).
Unscoped().
Where(s.Query.SysRole.ID.Eq(1)).
First()
So(err, ShouldNotBeNil)
})
}