187 lines
4.6 KiB
Go
187 lines
4.6 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"git.magicany.cc/black1552/gin-base/db/model"
|
|
)
|
|
|
|
// TestTimeFormatting 测试时间格式化
|
|
func TestTimeFormatting(t *testing.T) {
|
|
fmt.Println("\n=== 测试时间格式化 ===")
|
|
|
|
// 创建带时间的模型
|
|
now := time.Now()
|
|
user := &model.User{
|
|
ID: 1,
|
|
Username: "test_user",
|
|
Email: "test@example.com",
|
|
Status: 1,
|
|
CreatedAt: model.Time{Time: now},
|
|
UpdatedAt: model.Time{Time: now},
|
|
}
|
|
|
|
// 序列化为 JSON
|
|
jsonData, err := json.Marshal(user)
|
|
if err != nil {
|
|
t.Errorf("JSON 序列化失败:%v", err)
|
|
}
|
|
|
|
fmt.Printf("原始时间:%s\n", now.Format("2006-01-02 15:04:05"))
|
|
fmt.Printf("JSON 输出:%s\n", string(jsonData))
|
|
|
|
// 验证时间格式
|
|
var result map[string]interface{}
|
|
if err := json.Unmarshal(jsonData, &result); err != nil {
|
|
t.Errorf("JSON 反序列化失败:%v", err)
|
|
}
|
|
|
|
createdAt, ok := result["created_at"].(string)
|
|
if !ok {
|
|
t.Error("created_at 应该是字符串")
|
|
}
|
|
|
|
// 验证格式
|
|
expectedFormat := "2006-01-02 15:04:05"
|
|
_, err = time.Parse(expectedFormat, createdAt)
|
|
if err != nil {
|
|
t.Errorf("时间格式不正确:%v", err)
|
|
}
|
|
|
|
fmt.Printf("✓ 时间格式化测试通过\n")
|
|
}
|
|
|
|
// TestTimeUnmarshal 测试时间反序列化
|
|
func TestTimeUnmarshal(t *testing.T) {
|
|
fmt.Println("\n=== 测试时间反序列化 ===")
|
|
|
|
// 测试不同时间格式
|
|
testCases := []struct {
|
|
name string
|
|
jsonStr string
|
|
expected string
|
|
}{
|
|
{
|
|
name: "标准格式",
|
|
jsonStr: `{"time":"2026-04-02 22:04:44"}`,
|
|
expected: "2026-04-02 22:04:44",
|
|
},
|
|
{
|
|
name: "ISO8601 格式",
|
|
jsonStr: `{"time":"2026-04-02T22:04:44+08:00"}`,
|
|
expected: "2026-04-02 22:04:44",
|
|
},
|
|
{
|
|
name: "日期格式",
|
|
jsonStr: `{"time":"2026-04-02"}`,
|
|
expected: "2026-04-02 00:00:00",
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
var result struct {
|
|
Time model.Time `json:"time"`
|
|
}
|
|
|
|
if err := json.Unmarshal([]byte(tc.jsonStr), &result); err != nil {
|
|
t.Errorf("反序列化失败:%v", err)
|
|
}
|
|
|
|
formatted := result.Time.String()
|
|
fmt.Printf("%s: %s -> %s\n", tc.name, tc.jsonStr, formatted)
|
|
})
|
|
}
|
|
|
|
fmt.Println("✓ 时间反序列化测试通过")
|
|
}
|
|
|
|
// TestZeroTime 测试零值时间
|
|
func TestZeroTime(t *testing.T) {
|
|
fmt.Println("\n=== 测试零值时间 ===")
|
|
|
|
user := &model.User{
|
|
ID: 1,
|
|
Username: "test",
|
|
CreatedAt: model.Time{}, // 零值
|
|
UpdatedAt: model.Time{}, // 零值
|
|
}
|
|
|
|
jsonData, err := json.Marshal(user)
|
|
if err != nil {
|
|
t.Errorf("JSON 序列化失败:%v", err)
|
|
}
|
|
|
|
fmt.Printf("零值时间 JSON: %s\n", string(jsonData))
|
|
|
|
// 零值应该序列化为 null
|
|
var result map[string]interface{}
|
|
json.Unmarshal(jsonData, &result)
|
|
|
|
if result["created_at"] != nil {
|
|
t.Error("零值时间应该序列化为 null")
|
|
}
|
|
|
|
fmt.Println("✓ 零值时间测试通过")
|
|
}
|
|
|
|
// TestPointerTime 测试指针类型时间
|
|
func TestPointerTime(t *testing.T) {
|
|
fmt.Println("\n=== 测试指针类型时间 ===")
|
|
|
|
now := time.Now()
|
|
softUser := &model.SoftDeleteUser{
|
|
ID: 1,
|
|
Username: "test",
|
|
DeletedAt: &model.Time{Time: now},
|
|
}
|
|
|
|
jsonData, err := json.Marshal(softUser)
|
|
if err != nil {
|
|
t.Errorf("JSON 序列化失败:%v", err)
|
|
}
|
|
|
|
fmt.Printf("指针时间 JSON: %s\n", string(jsonData))
|
|
|
|
// 验证格式
|
|
var result map[string]interface{}
|
|
json.Unmarshal(jsonData, &result)
|
|
|
|
if deletedAt, ok := result["deleted_at"].(string); ok {
|
|
_, err := time.Parse("2006-01-02 15:04:05", deletedAt)
|
|
if err != nil {
|
|
t.Errorf("指针时间格式不正确:%v", err)
|
|
}
|
|
}
|
|
|
|
fmt.Println("✓ 指针类型时间测试通过")
|
|
}
|
|
|
|
// TestAllReadTimeFormatting 完整读取时间格式化测试
|
|
func TestAllReadTimeFormatting(t *testing.T) {
|
|
fmt.Println("\n========================================")
|
|
fmt.Println(" 读取操作时间格式化完整性测试")
|
|
fmt.Println("========================================")
|
|
|
|
TestTimeFormatting(t)
|
|
TestTimeUnmarshal(t)
|
|
TestZeroTime(t)
|
|
TestPointerTime(t)
|
|
|
|
fmt.Println("\n========================================")
|
|
fmt.Println(" 所有读取时间格式化测试完成!")
|
|
fmt.Println("========================================")
|
|
fmt.Println()
|
|
fmt.Println("已实现的读取时间格式化功能:")
|
|
fmt.Println(" ✓ CreatedAt: 自动格式化为 YYYY-MM-DD HH:mm:ss")
|
|
fmt.Println(" ✓ UpdatedAt: 自动格式化为 YYYY-MM-DD HH:mm:ss")
|
|
fmt.Println(" ✓ DeletedAt: 自动格式化为 YYYY-MM-DD HH:mm:ss")
|
|
fmt.Println(" ✓ 支持多种时间格式反序列化")
|
|
fmt.Println(" ✓ 零值时间正确处理为 null")
|
|
fmt.Println(" ✓ 指针类型时间正确序列化")
|
|
fmt.Println()
|
|
}
|