mirror of
https://github.com/nikoksr/notify.git
synced 2025-02-09 13:13:44 +02:00
test(service): add mocks and tests for amazonses
This commit is contained in:
parent
17d7077484
commit
4f76f7ed4c
@ -11,9 +11,17 @@ import (
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
//go:generate mockery --name=sesClient --output=. --case=underscore --inpackage
|
||||
type sesClient interface {
|
||||
SendEmail(ctx context.Context, params *ses.SendEmailInput, optFns ...func(options *ses.Options)) (*ses.SendEmailOutput, error)
|
||||
}
|
||||
|
||||
// Compile-time check to ensure that ses.Client implements the sesClient interface.
|
||||
var _ sesClient = new(ses.Client)
|
||||
|
||||
// AmazonSES struct holds necessary data to communicate with the Amazon Simple Email Service API.
|
||||
type AmazonSES struct {
|
||||
client *ses.Client
|
||||
client sesClient
|
||||
senderAddress *string
|
||||
receiverAddresses []string
|
||||
}
|
||||
|
115
service/amazonses/amazon_ses_test.go
Normal file
115
service/amazonses/amazon_ses_test.go
Normal file
@ -0,0 +1,115 @@
|
||||
package amazonses
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/aws/aws-sdk-go-v2/aws"
|
||||
"github.com/aws/aws-sdk-go-v2/service/ses"
|
||||
"github.com/aws/aws-sdk-go-v2/service/ses/types"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestNew(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
assert := require.New(t)
|
||||
|
||||
service, err := New("", "", "", "")
|
||||
assert.NotNil(service)
|
||||
assert.Nil(err)
|
||||
}
|
||||
|
||||
func TestAmazonSES_AddReceivers(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
assert := require.New(t)
|
||||
|
||||
service, err := New("", "", "", "")
|
||||
assert.NotNil(service)
|
||||
assert.Nil(err)
|
||||
|
||||
receivers := []string{"1", "2", "3", "4", "5"}
|
||||
service.AddReceivers(receivers...)
|
||||
|
||||
assert.Equal(service.receiverAddresses, receivers)
|
||||
|
||||
a6 := "6"
|
||||
receivers = append(receivers, a6)
|
||||
service.AddReceivers(a6)
|
||||
assert.Equal(service.receiverAddresses, receivers)
|
||||
}
|
||||
|
||||
func TestAmazonSES_Send(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
assert := require.New(t)
|
||||
|
||||
sender := "4"
|
||||
service, err := New("1", "2", "3", sender)
|
||||
assert.NotNil(service)
|
||||
assert.Nil(err)
|
||||
|
||||
// Example payload
|
||||
input := ses.SendEmailInput{
|
||||
Source: &sender,
|
||||
Destination: &types.Destination{
|
||||
ToAddresses: []string{},
|
||||
},
|
||||
Message: &types.Message{
|
||||
Body: &types.Body{
|
||||
Html: &types.Content{
|
||||
Data: aws.String("message"),
|
||||
},
|
||||
},
|
||||
Subject: &types.Content{
|
||||
Data: aws.String("subject"),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// No receivers added
|
||||
ctx := context.Background()
|
||||
|
||||
mockClient := newMockSesClient(t)
|
||||
mockClient.
|
||||
On("SendEmail", ctx, &input).
|
||||
Return(nil, nil)
|
||||
service.client = mockClient
|
||||
|
||||
err = service.Send(ctx, "subject", "message")
|
||||
assert.Nil(err)
|
||||
mockClient.AssertExpectations(t)
|
||||
|
||||
// Test with receivers
|
||||
receivers := []string{"1", "2"}
|
||||
input.Destination.ToAddresses = receivers
|
||||
service.AddReceivers(receivers...)
|
||||
|
||||
mockClient = newMockSesClient(t)
|
||||
mockClient.
|
||||
On("SendEmail", ctx, &input).
|
||||
Return(nil, nil)
|
||||
service.client = mockClient
|
||||
|
||||
err = service.Send(ctx, "subject", "message")
|
||||
assert.Nil(err)
|
||||
mockClient.AssertExpectations(t)
|
||||
|
||||
// Test with more receivers and error response
|
||||
receivers = []string{"1", "2", "3", "4", "5"}
|
||||
input.Destination.ToAddresses = receivers
|
||||
service.receiverAddresses = make([]string, 0)
|
||||
service.AddReceivers(receivers...)
|
||||
|
||||
mockClient = newMockSesClient(t)
|
||||
mockClient.
|
||||
On("SendEmail", ctx, &input).
|
||||
Return(nil, errors.New("some error"))
|
||||
service.client = mockClient
|
||||
|
||||
err = service.Send(ctx, "subject", "message")
|
||||
assert.NotNil(err)
|
||||
mockClient.AssertExpectations(t)
|
||||
}
|
60
service/amazonses/mock_ses_client.go
Normal file
60
service/amazonses/mock_ses_client.go
Normal file
@ -0,0 +1,60 @@
|
||||
// Code generated by mockery v2.14.0. DO NOT EDIT.
|
||||
|
||||
package amazonses
|
||||
|
||||
import (
|
||||
context "context"
|
||||
|
||||
ses "github.com/aws/aws-sdk-go-v2/service/ses"
|
||||
mock "github.com/stretchr/testify/mock"
|
||||
)
|
||||
|
||||
// mockSesClient is an autogenerated mock type for the sesClient type
|
||||
type mockSesClient struct {
|
||||
mock.Mock
|
||||
}
|
||||
|
||||
// SendEmail provides a mock function with given fields: ctx, params, optFns
|
||||
func (_m *mockSesClient) SendEmail(ctx context.Context, params *ses.SendEmailInput, optFns ...func(*ses.Options)) (*ses.SendEmailOutput, error) {
|
||||
_va := make([]interface{}, len(optFns))
|
||||
for _i := range optFns {
|
||||
_va[_i] = optFns[_i]
|
||||
}
|
||||
var _ca []interface{}
|
||||
_ca = append(_ca, ctx, params)
|
||||
_ca = append(_ca, _va...)
|
||||
ret := _m.Called(_ca...)
|
||||
|
||||
var r0 *ses.SendEmailOutput
|
||||
if rf, ok := ret.Get(0).(func(context.Context, *ses.SendEmailInput, ...func(*ses.Options)) *ses.SendEmailOutput); ok {
|
||||
r0 = rf(ctx, params, optFns...)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*ses.SendEmailOutput)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(1).(func(context.Context, *ses.SendEmailInput, ...func(*ses.Options)) error); ok {
|
||||
r1 = rf(ctx, params, optFns...)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
type mockConstructorTestingTnewMockSesClient interface {
|
||||
mock.TestingT
|
||||
Cleanup(func())
|
||||
}
|
||||
|
||||
// newMockSesClient creates a new instance of mockSesClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||
func newMockSesClient(t mockConstructorTestingTnewMockSesClient) *mockSesClient {
|
||||
mock := &mockSesClient{}
|
||||
mock.Mock.Test(t)
|
||||
|
||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||
|
||||
return mock
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user