45 lines
1.4 KiB
Go
45 lines
1.4 KiB
Go
package integration
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
biz "kra/internal/biz/integration"
|
|
"kra/internal/service/dto"
|
|
"testing"
|
|
)
|
|
|
|
type smsSenderFake struct{ calls int }
|
|
|
|
func (f *smsSenderFake) Send(context.Context, *biz.SMSMessage) (*biz.SMSResult, error) {
|
|
f.calls++
|
|
return &biz.SMSResult{MessageID: "test"}, nil
|
|
}
|
|
|
|
func TestSMSRejectsInvalidInputBeforeDelivery(t *testing.T) {
|
|
fake := &smsSenderFake{}
|
|
s := &SMSService{uc: fake}
|
|
for _, tt := range []struct{ provider, phone, params string }{
|
|
{"aliyun", "+8613800138000", `[]`}, {"tencent", "+8613800138000", `{}`},
|
|
{"tencent", "+8613800138000", `null`}, {"tencent", "+8613800138000", `[123]`},
|
|
{"tencent", "+8613800138000", `[null]`}, {"aliyun", "+8613800138000", `{"code":null}`},
|
|
{"aliyun", "13800138000", `{}`}, {"aliyun", "+12025550123", `{}`},
|
|
{"aliyun", "+8613800138000,+8613800138001", `{}`}, {"other", "+8613800138000", `{}`},
|
|
} {
|
|
if _, err := s.Send(context.Background(), tt.provider, &dto.SMSSendRequest{Phone: tt.phone, Params: json.RawMessage(tt.params)}); err == nil {
|
|
t.Fatalf("accepted invalid input: %+v", tt)
|
|
}
|
|
}
|
|
if fake.calls != 0 {
|
|
t.Fatal("invalid input reached sender")
|
|
}
|
|
for _, provider := range []string{"aliyun", "tencent"} {
|
|
params := `{}`
|
|
if provider == "tencent" {
|
|
params = `[]`
|
|
}
|
|
if _, err := s.Send(context.Background(), provider, &dto.SMSSendRequest{Phone: "+8613800138000", Params: json.RawMessage(params)}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
}
|