mirror of
https://github.com/zhufuyi/sponge.git
synced 2025-10-22 00:20:08 +08:00
159 lines
3.7 KiB
Go
159 lines
3.7 KiB
Go
package dao
|
||
|
||
import (
|
||
"testing"
|
||
"time"
|
||
|
||
"github.com/zhufuyi/sponge/internal/cache"
|
||
"github.com/zhufuyi/sponge/internal/model"
|
||
"github.com/zhufuyi/sponge/pkg/gotest"
|
||
"github.com/zhufuyi/sponge/pkg/mysql/query"
|
||
|
||
"github.com/DATA-DOG/go-sqlmock"
|
||
"gorm.io/gorm"
|
||
)
|
||
|
||
func newUserExampleDao() *gotest.Dao {
|
||
testData := &model.UserExample{}
|
||
testData.ID = 1
|
||
testData.CreatedAt = time.Now()
|
||
testData.UpdatedAt = testData.CreatedAt
|
||
|
||
// 初始化mock cache
|
||
c := gotest.NewCache(map[string]interface{}{"no cache": testData}) // 为了测试mysql,禁止缓存
|
||
c.ICache = cache.NewUserExampleCache(c.RedisClient)
|
||
|
||
// 初始化mock dao
|
||
d := gotest.NewDao(c, testData)
|
||
d.IDao = NewUserExampleDao(d.DB, c.ICache.(cache.UserExampleCache))
|
||
|
||
return d
|
||
}
|
||
|
||
func Test_userExampleDao_Create(t *testing.T) {
|
||
d := newUserExampleDao()
|
||
defer d.Close()
|
||
testData := d.TestData.(*model.UserExample)
|
||
|
||
d.SqlMock.ExpectBegin()
|
||
d.SqlMock.ExpectExec("INSERT INTO .*").
|
||
WithArgs(d.GetAnyArgs(testData)...).
|
||
WillReturnResult(sqlmock.NewResult(1, 1))
|
||
d.SqlMock.ExpectCommit()
|
||
|
||
err := d.IDao.(UserExampleDao).Create(d.Ctx, testData)
|
||
if err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
}
|
||
|
||
func Test_userExampleDao_DeleteByID(t *testing.T) {
|
||
d := newUserExampleDao()
|
||
defer d.Close()
|
||
testData := d.TestData.(*model.UserExample)
|
||
|
||
testData.DeletedAt = gorm.DeletedAt{
|
||
Time: time.Now(),
|
||
Valid: false,
|
||
}
|
||
|
||
d.SqlMock.ExpectBegin()
|
||
d.SqlMock.ExpectExec("UPDATE .*").
|
||
WithArgs(d.AnyTime, testData.ID).
|
||
WillReturnResult(sqlmock.NewResult(int64(testData.ID), 1))
|
||
d.SqlMock.ExpectCommit()
|
||
|
||
err := d.IDao.(UserExampleDao).DeleteByID(d.Ctx, testData.ID)
|
||
if err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
}
|
||
|
||
func Test_userExampleDao_UpdateByID(t *testing.T) {
|
||
d := newUserExampleDao()
|
||
defer d.Close()
|
||
testData := d.TestData.(*model.UserExample)
|
||
|
||
d.SqlMock.ExpectBegin()
|
||
d.SqlMock.ExpectExec("UPDATE .*").
|
||
WithArgs(d.AnyTime, testData.ID).
|
||
WillReturnResult(sqlmock.NewResult(1, 1))
|
||
d.SqlMock.ExpectCommit()
|
||
|
||
err := d.IDao.(UserExampleDao).UpdateByID(d.Ctx, testData)
|
||
if err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
}
|
||
|
||
func Test_userExampleDao_GetByID(t *testing.T) {
|
||
d := newUserExampleDao()
|
||
defer d.Close()
|
||
testData := d.TestData.(*model.UserExample)
|
||
|
||
rows := sqlmock.NewRows([]string{"id", "created_at", "updated_at"}).
|
||
AddRow(testData.ID, testData.CreatedAt, testData.UpdatedAt)
|
||
|
||
d.SqlMock.ExpectQuery("SELECT .*").
|
||
WithArgs(testData.ID).
|
||
WillReturnRows(rows)
|
||
|
||
_, err := d.IDao.(UserExampleDao).GetByID(d.Ctx, testData.ID)
|
||
if err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
|
||
err = d.SqlMock.ExpectationsWereMet()
|
||
if err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
}
|
||
|
||
func Test_userExampleDao_GetByIDs(t *testing.T) {
|
||
d := newUserExampleDao()
|
||
defer d.Close()
|
||
testData := d.TestData.(*model.UserExample)
|
||
|
||
rows := sqlmock.NewRows([]string{"id", "created_at", "updated_at"}).
|
||
AddRow(testData.ID, testData.CreatedAt, testData.UpdatedAt)
|
||
|
||
d.SqlMock.ExpectQuery("SELECT .*").
|
||
WithArgs(testData.ID).
|
||
WillReturnRows(rows)
|
||
|
||
_, err := d.IDao.(UserExampleDao).GetByIDs(d.Ctx, []uint64{testData.ID})
|
||
if err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
|
||
err = d.SqlMock.ExpectationsWereMet()
|
||
if err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
}
|
||
|
||
func Test_userExampleDao_GetByColumns(t *testing.T) {
|
||
d := newUserExampleDao()
|
||
defer d.Close()
|
||
testData := d.TestData.(*model.UserExample)
|
||
|
||
rows := sqlmock.NewRows([]string{"id", "created_at", "updated_at"}).
|
||
AddRow(testData.ID, testData.CreatedAt, testData.UpdatedAt)
|
||
|
||
d.SqlMock.ExpectQuery("SELECT .*").WillReturnRows(rows)
|
||
|
||
_, _, err := d.IDao.(UserExampleDao).GetByColumns(d.Ctx, &query.Params{
|
||
Page: 0,
|
||
Size: 10,
|
||
Sort: "ignore count", // 忽略测试 select count(*)
|
||
})
|
||
if err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
|
||
err = d.SqlMock.ExpectationsWereMet()
|
||
if err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
}
|