94 lines
2.7 KiB
Go
94 lines
2.7 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
|
|
appErrors "github.com/topfans/backend/pkg/errors"
|
|
"github.com/topfans/backend/pkg/models"
|
|
pb "github.com/topfans/backend/pkg/proto/user"
|
|
"github.com/topfans/backend/services/userService/repository"
|
|
)
|
|
|
|
// §12.4 Test #1: 账号被封禁 → 业务码 403(不再是 500),typed error 可被 errors.Is 识别
|
|
func TestLogin_BannedAccount_Returns403(t *testing.T) {
|
|
skipIfNoTestEnv(t)
|
|
db := setupTestDB(t)
|
|
defer cleanupTestDB(t, db)
|
|
|
|
userRepo := repository.NewUserRepository()
|
|
fanProfileRepo := repository.NewFanProfileRepository()
|
|
starRepo := repository.NewStarRepository()
|
|
|
|
// 创建用户 + 封号状态
|
|
user := createTestUser(t, db, userRepo, "13800002001")
|
|
defer deleteTestUser(t, db, userRepo, user.ID)
|
|
|
|
reason := "违规发言"
|
|
if err := db.Create(&models.UserAccountStatus{
|
|
UserID: user.ID,
|
|
Status: "banned",
|
|
Reason: &reason,
|
|
}).Error; err != nil {
|
|
t.Fatalf("create banned status: %v", err)
|
|
}
|
|
|
|
svc := NewAuthService(userRepo, fanProfileRepo, starRepo, db)
|
|
_, err := svc.Login(&pb.LoginRequest{
|
|
Mobile: user.Mobile,
|
|
Password: "password123",
|
|
})
|
|
|
|
if !errors.Is(err, appErrors.ErrAccountBanned) {
|
|
t.Errorf("expected ErrAccountBanned, got %v", err)
|
|
}
|
|
|
|
// 验证 ToStatusCode 返回 403(而非 500)
|
|
if code := appErrors.ToStatusCode(err); code.String() != "STATUS_FORBIDDEN" {
|
|
t.Errorf("expected STATUS_FORBIDDEN, got %s", code.String())
|
|
}
|
|
}
|
|
|
|
// §12.4 Test #2: 账号被冻结 → 业务码 403,typed error 可识别
|
|
func TestLogin_FrozenAccount_Returns403(t *testing.T) {
|
|
skipIfNoTestEnv(t)
|
|
db := setupTestDB(t)
|
|
defer cleanupTestDB(t, db)
|
|
|
|
userRepo := repository.NewUserRepository()
|
|
fanProfileRepo := repository.NewFanProfileRepository()
|
|
starRepo := repository.NewStarRepository()
|
|
|
|
user := createTestUser(t, db, userRepo, "13800002002")
|
|
defer deleteTestUser(t, db, userRepo, user.ID)
|
|
|
|
reason := "异常登录"
|
|
// frozenUntil 设为未来时间,确保仍处于冻结状态
|
|
frozenUntil := int64(9999999999999)
|
|
if err := db.Create(&models.UserAccountStatus{
|
|
UserID: user.ID,
|
|
Status: "frozen",
|
|
Reason: &reason,
|
|
FrozenUntil: &frozenUntil,
|
|
}).Error; err != nil {
|
|
t.Fatalf("create frozen status: %v", err)
|
|
}
|
|
|
|
svc := NewAuthService(userRepo, fanProfileRepo, starRepo, db)
|
|
_, err := svc.Login(&pb.LoginRequest{
|
|
Mobile: user.Mobile,
|
|
Password: "password123",
|
|
})
|
|
|
|
if !errors.Is(err, appErrors.ErrAccountFrozen) {
|
|
t.Errorf("expected ErrAccountFrozen, got %v", err)
|
|
}
|
|
|
|
if code := appErrors.ToStatusCode(err); code.String() != "STATUS_FORBIDDEN" {
|
|
t.Errorf("expected STATUS_FORBIDDEN, got %s", code.String())
|
|
}
|
|
}
|
|
|
|
// 引用 context 包避免 unused import(测试可能 skip)
|
|
var _ = context.Background |