package gameplatform import ( "context" "kra/internal/biz/integration" "testing" ) type resetSMSSender struct{ message *integration.SMSMessage } func (s *resetSMSSender) Send(_ context.Context, m *integration.SMSMessage) (*integration.SMSResult, error) { s.message = m return &integration.SMSResult{}, nil } func TestPasswordSMSUsesConfiguredProviderAndTemplateShape(t *testing.T) { for _, provider := range []string{"tencent", "aliyun"} { t.Run(provider, func(t *testing.T) { t.Setenv("SW_PASSWORD_RESET_SMS_PROVIDER", provider) sender := &resetSMSSender{} if err := NewPasswordSMS(sender).SendCode(context.Background(), "13800138000", "123456"); err != nil { t.Fatal(err) } m := sender.message if m.Phone != "+8613800138000" || m.Provider != provider { t.Fatalf("手机号或提供商不正确: %+v", m) } if provider == "tencent" && (len(m.Params) != 1 || m.Params[0] != "123456") { t.Fatal("腾讯云参数未按模板顺序传递") } if provider == "aliyun" && m.NamedParams["code"] != "123456" { t.Fatal("阿里云参数未使用 code 键") } }) } }