test: improve coverage for pagination and domain packages

- Add comprehensive cursor pagination tests (95.7% coverage)
- Add domain helper functions tests (StrPtr, DerefStr)
- Add Gender and UserStatus constants tests
- Add User model tests (TableName, default values)
- Overall coverage improved from 53.2% to 53.5%
This commit is contained in:
Your Name
2026-05-29 14:57:49 +08:00
parent f0930489f1
commit 9f0eefd2f5
2 changed files with 347 additions and 0 deletions

View File

@@ -0,0 +1,129 @@
package domain
import (
"testing"
"github.com/stretchr/testify/assert"
)
// TestStrPtr 测试 StrPtr 函数
func TestStrPtr(t *testing.T) {
tests := []struct {
name string
input string
expected *string
}{
{
name: "empty string",
input: "",
expected: nil,
},
{
name: "non-empty string",
input: "test@example.com",
expected: strPtr("test@example.com"),
},
{
name: "whitespace string",
input: " ",
expected: strPtr(" "),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := StrPtr(tt.input)
if tt.expected == nil {
assert.Nil(t, got)
} else {
assert.NotNil(t, got)
assert.Equal(t, *tt.expected, *got)
}
})
}
}
// TestDerefStr 测试 DerefStr 函数
func TestDerefStr(t *testing.T) {
tests := []struct {
name string
input *string
expected string
}{
{
name: "nil pointer",
input: nil,
expected: "",
},
{
name: "non-nil pointer",
input: strPtr("test@example.com"),
expected: "test@example.com",
},
{
name: "empty string pointer",
input: strPtr(""),
expected: "",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := DerefStr(tt.input)
assert.Equal(t, tt.expected, got)
})
}
}
// strPtr 辅助函数,返回字符串指针
func strPtr(s string) *string {
return &s
}
// TestGender_Constants 测试性别常量
func TestGender_Constants(t *testing.T) {
assert.Equal(t, Gender(0), GenderUnknown)
assert.Equal(t, Gender(1), GenderMale)
assert.Equal(t, Gender(2), GenderFemale)
}
// TestUserStatus_Constants 测试用户状态常量
func TestUserStatus_Constants(t *testing.T) {
assert.Equal(t, UserStatus(0), UserStatusInactive)
assert.Equal(t, UserStatus(1), UserStatusActive)
assert.Equal(t, UserStatus(2), UserStatusLocked)
assert.Equal(t, UserStatus(3), UserStatusDisabled)
}
// TestUser_TableName 测试用户表名
func TestUser_TableName(t *testing.T) {
user := User{}
assert.Equal(t, "users", user.TableName())
}
// TestUser_DefaultValues 测试用户默认值
func TestUser_DefaultValues(t *testing.T) {
user := User{}
assert.Equal(t, GenderUnknown, user.Gender)
assert.Equal(t, UserStatusInactive, user.Status)
assert.False(t, user.TOTPEnabled)
}
// TestStrPtr_DerefStr_RoundTrip 测试往返
func TestStrPtr_DerefStr_RoundTrip(t *testing.T) {
original := "test@example.com"
ptr := StrPtr(original)
got := DerefStr(ptr)
assert.Equal(t, original, got)
// 注意StrPtr("") 返回 nil不是指向空字符串的指针
// 这是设计决定的,空字符串表示该字段未设置
}
// TestStrPtr_NilDeref 测试 nil 解引用
func TestStrPtr_NilDeref(t *testing.T) {
// 空字符串返回 nil
assert.Nil(t, StrPtr(""))
// nil 解引用返回空字符串
assert.Equal(t, "", DerefStr(nil))
}