49 lines
1.2 KiB
Go
49 lines
1.2 KiB
Go
|
|
package sms_test
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"fmt"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"gateway/internal/model/notification/provider/sms"
|
||
|
|
|
||
|
|
"github.com/stretchr/testify/assert"
|
||
|
|
"github.com/stretchr/testify/require"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestChain_Send_FailoverToSecondProvider(t *testing.T) {
|
||
|
|
primary := sms.NewMockSender(
|
||
|
|
sms.WithMockName("mitake"),
|
||
|
|
sms.WithMockSort(1),
|
||
|
|
sms.WithMockError(fmt.Errorf("mitake down")),
|
||
|
|
)
|
||
|
|
backup := sms.NewMockSender(
|
||
|
|
sms.WithMockName("twilio"),
|
||
|
|
sms.WithMockSort(2),
|
||
|
|
sms.WithMockMessageID("twilio-sid"),
|
||
|
|
)
|
||
|
|
|
||
|
|
chain := sms.NewChain(primary, backup)
|
||
|
|
provider, id, err := chain.Send(context.Background(), &sms.Message{
|
||
|
|
PhoneNumber: "+886912345678",
|
||
|
|
RecipientName: "User",
|
||
|
|
Body: "code 123456",
|
||
|
|
})
|
||
|
|
|
||
|
|
require.NoError(t, err)
|
||
|
|
assert.Equal(t, "twilio", provider)
|
||
|
|
assert.Equal(t, "twilio-sid", id)
|
||
|
|
assert.Len(t, primary.Calls(), 1)
|
||
|
|
assert.Len(t, backup.Calls(), 1)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestChain_Send_AllProvidersFail(t *testing.T) {
|
||
|
|
chain := sms.NewChain(
|
||
|
|
sms.ErrSender("a", 1, fmt.Errorf("a fail")),
|
||
|
|
sms.ErrSender("b", 2, fmt.Errorf("b fail")),
|
||
|
|
)
|
||
|
|
_, _, err := chain.Send(context.Background(), &sms.Message{PhoneNumber: "+886900000000"})
|
||
|
|
require.Error(t, err)
|
||
|
|
assert.Contains(t, err.Error(), "all providers failed")
|
||
|
|
}
|