sync: 对齐小程序 v1.0.2 生产代码并脱敏
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user