1
0
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:
Niko Köser 2022-09-12 08:45:52 +02:00
parent 17d7077484
commit 4f76f7ed4c
No known key found for this signature in database
GPG Key ID: F3F28C118DAA6375
3 changed files with 184 additions and 1 deletions

View File

@ -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
}

View 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)
}

View 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
}