fix gitea workflow path and runner label
Build docker and publish / build (20.15.1) (push) Failing after 7m54s
Build docker and publish / build (20.15.1) (push) Failing after 7m54s
This commit is contained in:
@@ -4,7 +4,6 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -14,6 +13,8 @@ import (
|
||||
"github.com/perfect-panel/server/internal/svc"
|
||||
"github.com/perfect-panel/server/pkg/constant"
|
||||
"github.com/perfect-panel/server/pkg/result"
|
||||
"github.com/perfect-panel/server/pkg/xerr"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// DeleteAccountHandler 注销账号处理器
|
||||
@@ -28,7 +29,7 @@ func DeleteAccountHandler(serverCtx *svc.ServiceContext) gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
var req deleteAccountReq
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request: " + err.Error()})
|
||||
result.ParamErrorResult(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -37,18 +38,13 @@ func DeleteAccountHandler(serverCtx *svc.ServiceContext) gin.HandlerFunc {
|
||||
|
||||
// 校验邮箱验证码
|
||||
if err := verifyEmailCode(c.Request.Context(), serverCtx, req.Email, req.Code); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
result.HttpResult(c, nil, err)
|
||||
return
|
||||
}
|
||||
|
||||
l := user.NewDeleteAccountLogic(c.Request.Context(), serverCtx)
|
||||
resp, err := l.DeleteAccountAll()
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
result.HttpResult(c, resp, err)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,7 +81,7 @@ func verifyEmailCode(ctx context.Context, serverCtx *svc.ServiceContext, email s
|
||||
}
|
||||
|
||||
if !verified {
|
||||
return fmt.Errorf("verification code error or expired")
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.VerifyCodeError), "verification code error or expired")
|
||||
}
|
||||
|
||||
// 验证成功后删除缓存
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
package user
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/perfect-panel/server/internal/config"
|
||||
"github.com/perfect-panel/server/internal/svc"
|
||||
"github.com/redis/go-redis/v9"
|
||||
)
|
||||
|
||||
type handlerResponse struct {
|
||||
Code uint32 `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data json.RawMessage `json:"data"`
|
||||
}
|
||||
|
||||
func newDeleteAccountTestRouter(serverCtx *svc.ServiceContext) *gin.Engine {
|
||||
gin.SetMode(gin.TestMode)
|
||||
router := gin.New()
|
||||
router.POST("/v1/public/user/delete_account", DeleteAccountHandler(serverCtx))
|
||||
return router
|
||||
}
|
||||
|
||||
func TestDeleteAccountHandlerInvalidParamsUsesUnifiedResponse(t *testing.T) {
|
||||
router := newDeleteAccountTestRouter(&svc.ServiceContext{})
|
||||
|
||||
reqBody := bytes.NewBufferString(`{"email":"invalid-email"}`)
|
||||
req := httptest.NewRequest(http.MethodPost, "/v1/public/user/delete_account", reqBody)
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
recorder := httptest.NewRecorder()
|
||||
|
||||
router.ServeHTTP(recorder, req)
|
||||
|
||||
if recorder.Code != http.StatusOK {
|
||||
t.Fatalf("expected HTTP 200, got %d", recorder.Code)
|
||||
}
|
||||
|
||||
var resp handlerResponse
|
||||
if err := json.Unmarshal(recorder.Body.Bytes(), &resp); err != nil {
|
||||
t.Fatalf("failed to decode response: %v", err)
|
||||
}
|
||||
|
||||
if resp.Code != 400 {
|
||||
t.Fatalf("expected business code 400, got %d, body=%s", resp.Code, recorder.Body.String())
|
||||
}
|
||||
|
||||
var raw map[string]interface{}
|
||||
if err := json.Unmarshal(recorder.Body.Bytes(), &raw); err != nil {
|
||||
t.Fatalf("failed to decode raw response: %v", err)
|
||||
}
|
||||
if _, exists := raw["error"]; exists {
|
||||
t.Fatalf("unexpected raw error field in response: %s", recorder.Body.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeleteAccountHandlerVerifyCodeErrorUsesUnifiedResponse(t *testing.T) {
|
||||
redisClient := redis.NewClient(&redis.Options{
|
||||
Addr: "invalid:6379",
|
||||
Dialer: func(_ context.Context, _, _ string) (net.Conn, error) {
|
||||
return nil, errors.New("dial disabled in test")
|
||||
},
|
||||
})
|
||||
defer redisClient.Close()
|
||||
|
||||
serverCtx := &svc.ServiceContext{
|
||||
Redis: redisClient,
|
||||
Config: config.Config{
|
||||
VerifyCode: config.VerifyCode{
|
||||
ExpireTime: 900,
|
||||
},
|
||||
},
|
||||
}
|
||||
router := newDeleteAccountTestRouter(serverCtx)
|
||||
|
||||
reqBody := bytes.NewBufferString(`{"email":"user@example.com","code":"123456"}`)
|
||||
req := httptest.NewRequest(http.MethodPost, "/v1/public/user/delete_account", reqBody)
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
recorder := httptest.NewRecorder()
|
||||
|
||||
router.ServeHTTP(recorder, req)
|
||||
|
||||
if recorder.Code != http.StatusOK {
|
||||
t.Fatalf("expected HTTP 200, got %d", recorder.Code)
|
||||
}
|
||||
|
||||
var resp handlerResponse
|
||||
if err := json.Unmarshal(recorder.Body.Bytes(), &resp); err != nil {
|
||||
t.Fatalf("failed to decode response: %v", err)
|
||||
}
|
||||
|
||||
if resp.Code != 70001 {
|
||||
t.Fatalf("expected business code 70001, got %d, body=%s", resp.Code, recorder.Body.String())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user