调整封装
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
package gormx_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"code.yun.ink/pkg/responsex/gormx"
|
||||
"github.com/glebarez/sqlite"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// newDB 创建内存 SQLite 数据库用于测试
|
||||
func newDB(t *testing.T) *gorm.DB {
|
||||
t.Helper()
|
||||
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
|
||||
if err != nil {
|
||||
t.Fatalf("open sqlite failed: %v", err)
|
||||
}
|
||||
return db
|
||||
}
|
||||
|
||||
func TestGetDbOffset(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
page, size int64
|
||||
wantOffset int
|
||||
wantLimit int
|
||||
}{
|
||||
{"page1 size10", 1, 10, 0, 10},
|
||||
{"page2 size10", 2, 10, 10, 10},
|
||||
{"page3 size20", 3, 20, 40, 20},
|
||||
{"page0 size10 default page to 1", 0, 10, 0, 10},
|
||||
{"page1 size0 default size to 10", 1, 0, 0, 10},
|
||||
{"both negative or zero max 1000", 0, 0, 0, 1000},
|
||||
{"negative page default to 1", -1, 10, 0, 10},
|
||||
{"negative size default to 10", 1, -1, 0, 10},
|
||||
{"both negative", -1, -1, 0, 1000},
|
||||
{"page5 size100", 5, 100, 400, 100},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
db := newDB(t)
|
||||
result := gormx.GetDbOffset(db, tt.page, tt.size)
|
||||
|
||||
stmt := result.Statement
|
||||
// 验证 Limit 被正确设置
|
||||
if stmt == nil {
|
||||
t.Fatal("statement is nil")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetDbOffset_Chaining(t *testing.T) {
|
||||
db := newDB(t)
|
||||
|
||||
db.AutoMigrate(&testModel{})
|
||||
|
||||
// 插入测试数据
|
||||
for i := 1; i <= 50; i++ {
|
||||
db.Create(&testModel{Value: i})
|
||||
}
|
||||
|
||||
// 分页查询:page=2, size=10 → offset=10, limit=10
|
||||
var results []testModel
|
||||
db2 := gormx.GetDbOffset(db, 2, 10)
|
||||
db2.Find(&results)
|
||||
|
||||
if len(results) != 10 {
|
||||
t.Errorf("results length = %d, want 10", len(results))
|
||||
}
|
||||
// 第一页是 1-10,第二页 offset=10 应该是 11-20
|
||||
if results[0].Value < 11 || results[0].Value > 20 {
|
||||
t.Errorf("first result Value = %d, should be in [11,20]", results[0].Value)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetDbOffset_FirstPage(t *testing.T) {
|
||||
db := newDB(t)
|
||||
db.AutoMigrate(&testModel{})
|
||||
for i := 1; i <= 15; i++ {
|
||||
db.Create(&testModel{Value: i})
|
||||
}
|
||||
|
||||
var results []testModel
|
||||
gormx.GetDbOffset(db, 1, 10).Find(&results)
|
||||
|
||||
if len(results) != 10 {
|
||||
t.Errorf("results length = %d, want 10", len(results))
|
||||
}
|
||||
if results[0].Value != 1 {
|
||||
t.Errorf("first value = %d, want 1", results[0].Value)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetDbOffset_NoLimit(t *testing.T) {
|
||||
db := newDB(t)
|
||||
db.AutoMigrate(&testModel{})
|
||||
for i := 1; i <= 50; i++ {
|
||||
db.Create(&testModel{Value: i})
|
||||
}
|
||||
|
||||
// page <= 0 && size <= 0 → limit = 1000
|
||||
var results []testModel
|
||||
gormx.GetDbOffset(db, 0, 0).Find(&results)
|
||||
|
||||
if len(results) != 50 {
|
||||
t.Errorf("results length = %d, want 50 (all records)", len(results))
|
||||
}
|
||||
}
|
||||
|
||||
type testModel struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
Value int
|
||||
}
|
||||
Reference in New Issue
Block a user