- Deleted the Token model and its repository, transitioning to a Redis-based token management system. - Updated the service layer to utilize Redis for token storage, enhancing performance and scalability. - Refactored the container to remove TokenRepository and integrate the new token service. - Cleaned up the Dockerfile and other files by removing unnecessary whitespace and comments. - Enhanced error handling and logging for Redis initialization and usage.
88 lines
2.2 KiB
Go
88 lines
2.2 KiB
Go
package database
|
||
|
||
import (
|
||
"carrotskin/pkg/config"
|
||
"testing"
|
||
|
||
"go.uber.org/zap/zaptest"
|
||
)
|
||
|
||
// TestGetDB_NotInitialized 测试未初始化时获取数据库实例
|
||
func TestGetDB_NotInitialized(t *testing.T) {
|
||
dbInstance = nil
|
||
_, err := GetDB()
|
||
if err == nil {
|
||
t.Error("未初始化时应该返回错误")
|
||
}
|
||
|
||
expectedError := "数据库未初始化,请先调用 database.Init()"
|
||
if err.Error() != expectedError {
|
||
t.Errorf("错误消息 = %q, want %q", err.Error(), expectedError)
|
||
}
|
||
}
|
||
|
||
// TestMustGetDB_Panic 测试MustGetDB在未初始化时panic
|
||
func TestMustGetDB_Panic(t *testing.T) {
|
||
dbInstance = nil
|
||
defer func() {
|
||
if r := recover(); r == nil {
|
||
t.Error("MustGetDB 应该在未初始化时panic")
|
||
}
|
||
}()
|
||
|
||
_ = MustGetDB()
|
||
}
|
||
|
||
// TestInit_Database 测试数据库初始化逻辑
|
||
func TestInit_Database(t *testing.T) {
|
||
dbInstance = nil
|
||
cfg := config.DatabaseConfig{
|
||
Driver: "postgres",
|
||
Host: "localhost",
|
||
Port: 5432,
|
||
Username: "postgres",
|
||
Password: "password",
|
||
Database: "testdb",
|
||
SSLMode: "disable",
|
||
Timezone: "Asia/Shanghai",
|
||
MaxIdleConns: 10,
|
||
MaxOpenConns: 100,
|
||
ConnMaxLifetime: 0,
|
||
}
|
||
|
||
logger := zaptest.NewLogger(t)
|
||
|
||
// 验证Init函数存在且可调用
|
||
// 注意:实际连接可能失败,这是可以接受的
|
||
err := Init(cfg, logger)
|
||
if err != nil {
|
||
t.Skipf("数据库未运行,跳过连接测试: %v", err)
|
||
}
|
||
}
|
||
|
||
// TestAutoMigrate_ErrorHandling 测试AutoMigrate的错误处理逻辑
|
||
func TestAutoMigrate_ErrorHandling(t *testing.T) {
|
||
logger := zaptest.NewLogger(t)
|
||
|
||
// 测试未初始化时的错误处理
|
||
err := AutoMigrate(logger)
|
||
if err == nil {
|
||
// 如果数据库已初始化,这是正常的
|
||
t.Log("AutoMigrate() 成功(数据库可能已初始化)")
|
||
} else {
|
||
// 如果数据库未初始化,应该返回错误
|
||
if err.Error() == "" {
|
||
t.Error("AutoMigrate() 应该返回有意义的错误消息")
|
||
}
|
||
}
|
||
}
|
||
|
||
// TestClose_NotInitialized 测试未初始化时关闭数据库
|
||
func TestClose_NotInitialized(t *testing.T) {
|
||
// 未初始化时关闭应该不返回错误
|
||
err := Close()
|
||
if err != nil {
|
||
t.Errorf("Close() 在未初始化时应该返回nil,实际返回: %v", err)
|
||
}
|
||
}
|