package sms import ( "context" "errors" "testing" ) type stubProvider struct{ called bool } func (p *stubProvider) Send(context.Context, Config, Message) (Result, error) { p.called = true return Result{Code: 0, Message: "ok"}, nil } func TestRegistrySend(t *testing.T) { provider := &stubProvider{} registry := NewRegistry() registry.Register(ServiceAliyun, provider) config := Config{ ServiceType: ServiceAliyun, AccessKeyID: "id", AccessKeySecret: "secret", SignName: "sign", TemplateID: "template", } result, err := registry.Send(context.Background(), config, Message{PhoneNumber: "138****8000"}) if err != nil || result.Code != 0 || !provider.called { t.Fatalf("result=%+v err=%v called=%v", result, err, provider.called) } } func TestRegistryValidatesBeforeProvider(t *testing.T) { registry := NewRegistry() _, err := registry.Send(context.Background(), Config{ServiceType: ServiceTencent}, Message{}) if !errors.Is(err, ErrInvalidRequest) { t.Fatalf("err = %v, want ErrInvalidRequest", err) } } func TestSplitAndTrim(t *testing.T) { got := SplitAndTrim(" 138****8000, ,138****8000 ", ",") if len(got) != 2 || got[0] != "138****8000" || got[1] != "138****8000" { t.Fatalf("unexpected split result: %#v", got) } }