sync: 对齐小程序 v1.0.2 生产代码并脱敏

This commit is contained in:
MiFaZhan
2026-10-29 15:15:12 +08:00
parent a7abd476f0
commit 5fcf74deb0
423 changed files with 15001 additions and 6382 deletions
+70 -9
View File
@@ -2,7 +2,11 @@ package app
import (
"context"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"time"
"git.5iot.com/iotlcm-public/iotlcm-app/internal/consts"
"git.5iot.com/iotlcm-public/iotlcm-app/internal/model"
@@ -12,30 +16,47 @@ import (
"github.com/gogf/gf/v2/frame/g"
)
func TestPhoneRegisterParamAllowsEmptySmsCode(t *testing.T) {
func TestPhoneRegisterParamRequiresSmsCode(t *testing.T) {
err := g.Validator().Data(&model.AppPhoneRegisterParam{
TenantId: "000000",
Phone: "13800008000",
Password: "123456",
NickName: "测试用户",
}).Run(context.Background())
if err != nil {
t.Fatalf("AppPhoneRegisterParam should allow empty smsCode, got: %v", err)
if err == nil {
t.Fatal("AppPhoneRegisterParam should require smsCode")
}
}
func TestVerifyOptionalAppSmsCodeSkipsEmptyCode(t *testing.T) {
if err := verifyOptionalAppSmsCode(context.Background(), "000000", "13800008000", "register", ""); err != nil {
t.Fatalf("empty smsCode should skip sms verification, got: %v", err)
func TestAppSmsCodeHelpersUseRedisKeys(t *testing.T) {
key := appSmsCacheKey("", "13800008000", "login")
if key != "app:sms:000000:login:13800008000" {
t.Fatalf("unexpected sms cache key: %s", key)
}
if err := verifyOptionalAppSmsCode(context.Background(), "000000", "13800008000", "register", " "); err != nil {
t.Fatalf("blank smsCode should skip sms verification, got: %v", err)
if key := appSmsCooldownCacheKey("", "13800008000"); key != "app:sms:cooldown:000000:13800008000" {
t.Fatalf("unexpected sms cooldown key: %s", key)
}
}
func TestAppSmsCooldownScopeAndDuration(t *testing.T) {
if appSmsCooldownTTL != time.Minute {
t.Fatalf("sms cooldown = %v, want one minute", appSmsCooldownTTL)
}
key := appSmsCooldownCacheKey("000000", "13800008000")
if key != appSmsCooldownCacheKey("", "13800008000") {
t.Fatal("default tenant should share the same cooldown key")
}
if key == appSmsCooldownCacheKey("000000", "13800008001") {
t.Fatal("different phones should have independent cooldown keys")
}
if key == appSmsCooldownCacheKey("000001", "13800008000") {
t.Fatal("different tenants should have independent cooldown keys")
}
}
func TestDeletedRegisterUserNameFitsSysUserUniqueColumn(t *testing.T) {
name := deletedRegisterUserName(88, "18800004698")
if name != "del88_004698" {
if name != "del88_314698" {
t.Fatalf("unexpected deleted register username: %s", name)
}
if len(name) > 30 {
@@ -120,3 +141,43 @@ func appAuthTestUser(userId int64, username string, password string) *entity.Sys
Status: consts.SysUserStatusNormal,
}
}
func TestCallAppCodeHTTPUsesSceneTemplate(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var request struct {
Config struct {
Scene string `json:"scene"`
} `json:"config"`
Params struct {
PhoneNumber string `json:"phoneNumber"`
MsgContent string `json:"msgContent"`
} `json:"params"`
}
if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
t.Errorf("decode request: %v", err)
w.WriteHeader(http.StatusBadRequest)
return
}
if request.Config.Scene != "bind_phone" {
t.Errorf("scene = %q, want bind_phone", request.Config.Scene)
}
if request.Params.PhoneNumber != "13800008000" {
t.Errorf("phoneNumber = %q, want 13800008000", request.Params.PhoneNumber)
}
if request.Params.MsgContent != "123456" {
t.Errorf("msgContent = %q, want raw verification code", request.Params.MsgContent)
}
w.Header().Set("Content-Type", "application/json")
_, _ = w.Write([]byte(`{"code":0,"message":"发送成功"}`))
}))
defer server.Close()
err := callAppCodeHTTP(context.Background(), appCodeHttpSenderConfig{
Url: server.URL,
Method: http.MethodPost,
BodyTemplate: `{"config":{"scene":"{scene}"},"params":{"phoneNumber":"{contact}","msgContent":"{code}"}}`,
}, "13800008000", "123456", appSmsServiceScene("wechatBindPhone"))
if err != nil {
t.Fatalf("callAppCodeHTTP returned error: %v", err)
}
}