- backend: withdrawal presenter 增加 privateCertificateURLs 兼容转换历史公网 payment-cert 路径 - frontend: AuthImage 与 fetchFileBlobByURL 兼容私有凭证 key,后台上下文通过管理员私有对象接口安全加载 - frontend: 按对象接口路径与 key 前缀精确判定,避免外链带 ?key= 被误代理到后台私有对象接口 - tests: 补充 TestPrivateCertificateURLs 单元测试
59 lines
1.9 KiB
Go
59 lines
1.9 KiB
Go
package withdrawal
|
|
|
|
import (
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func TestReviewWithdrawalRequestBindApprovedFalse(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
|
|
c, _ := gin.CreateTestContext(httptest.NewRecorder())
|
|
c.Request = httptest.NewRequest("POST", "/admin/withdrawals/1/review", strings.NewReader(`{"approved":false,"remark":"资料不符"}`))
|
|
c.Request.Header.Set("Content-Type", "application/json")
|
|
|
|
var req ReviewWithdrawalRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
t.Fatalf("approved=false 应该通过参数绑定: %v", err)
|
|
}
|
|
if req.Approved == nil {
|
|
t.Fatal("approved 字段应该被识别为已传入")
|
|
}
|
|
if *req.Approved {
|
|
t.Fatal("approved=false 不应该被绑定成 true")
|
|
}
|
|
}
|
|
|
|
func TestReviewWithdrawalRequestBindMissingApproved(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
|
|
c, _ := gin.CreateTestContext(httptest.NewRecorder())
|
|
c.Request = httptest.NewRequest("POST", "/admin/withdrawals/1/review", strings.NewReader(`{"remark":"资料不符"}`))
|
|
c.Request.Header.Set("Content-Type", "application/json")
|
|
|
|
var req ReviewWithdrawalRequest
|
|
if err := c.ShouldBindJSON(&req); err == nil {
|
|
t.Fatal("缺少 approved 字段时应该参数绑定失败")
|
|
}
|
|
}
|
|
|
|
func TestPrivateCertificateURLs(t *testing.T) {
|
|
values := privateCertificateURLs([]string{
|
|
"/api/public/files/object?key=payment-cert%2F2026%2F09%2F16%2Fqr.webp",
|
|
"/api/public/files/object?key=avatar%2Fuser.jpg",
|
|
"/api/files/object?key=payment-cert%2Falready_private.webp",
|
|
})
|
|
if values[0] != "/api/files/object?key=payment-cert%2F2026%2F09%2F16%2Fqr.webp" {
|
|
t.Fatalf("expected private URL for payment-cert, got %q", values[0])
|
|
}
|
|
if values[1] != "/api/public/files/object?key=avatar%2Fuser.jpg" {
|
|
t.Fatalf("non-payment-cert URL should not be changed, got %q", values[1])
|
|
}
|
|
if values[2] != "/api/files/object?key=payment-cert%2Falready_private.webp" {
|
|
t.Fatalf("already private URL should not be changed, got %q", values[2])
|
|
}
|
|
}
|