Files
user-system/internal/domain/user_helper_test.go
Your Name 9f0eefd2f5 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%
2026-05-29 14:57:49 +08:00

130 lines
2.8 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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))
}