Skip to content

Commit

Permalink
test: add unite test for mock package
Browse files Browse the repository at this point in the history
  • Loading branch information
vvatanabe committed Nov 24, 2023
1 parent a4208ca commit ef7d0d3
Show file tree
Hide file tree
Showing 4 changed files with 166 additions and 50 deletions.
4 changes: 2 additions & 2 deletions internal/cmd/interactive_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ func TestRunInteractiveAllShouldReturnError(t *testing.T) {
}

func TestRunInteractiveAllShouldSucceed(t *testing.T) {
testRunInteractiveAll(t, successfulMockClient, false)
testRunInteractiveAll(t, mock.SuccessfulMockClient, false)
}

func TestRunInteractiveSelectedMessageID(t *testing.T) {
Expand Down Expand Up @@ -169,7 +169,7 @@ func TestRunInteractiveSelectedMessageID(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := &cmd.Interactive{
Client: successfulMockClient,
Client: mock.SuccessfulMockClient,
Message: tt.message,
}
err := c.Run(context.Background(), tt.command, []string{})
Expand Down
49 changes: 1 addition & 48 deletions internal/cmd/root_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ func TestRunAllCommandShouldDynamoMQClientError(t *testing.T) {
func TestRunAllCommandShouldDynamoMQClientSucceed(t *testing.T) {
testRunAllCommand(t, cmd.CommandFactory{
CreateDynamoMQClient: func(ctx context.Context, flags *cmd.Flags) (dynamomq.Client[any], aws.Config, error) {
return successfulMockClient, aws.Config{}, nil
return mock.SuccessfulMockClient, aws.Config{}, nil
},
}, nil)
}
Expand Down Expand Up @@ -197,50 +197,3 @@ func TestParseInput(t *testing.T) {
})
}
}

var successfulMockClient = &mock.Client[any]{
SendMessageFunc: func(ctx context.Context, params *dynamomq.SendMessageInput[any]) (*dynamomq.SendMessageOutput[any], error) {
return &dynamomq.SendMessageOutput[any]{
Result: &dynamomq.Result{},
Message: &dynamomq.Message[any]{},
}, nil
},
ReceiveMessageFunc: func(ctx context.Context, params *dynamomq.ReceiveMessageInput) (*dynamomq.ReceiveMessageOutput[any], error) {
return &dynamomq.ReceiveMessageOutput[any]{
Result: &dynamomq.Result{},
PeekedMessageObject: &dynamomq.Message[any]{},
}, nil
},
UpdateMessageAsVisibleFunc: func(ctx context.Context, params *dynamomq.UpdateMessageAsVisibleInput) (*dynamomq.UpdateMessageAsVisibleOutput[any], error) {
return &dynamomq.UpdateMessageAsVisibleOutput[any]{
Result: &dynamomq.Result{},
Message: &dynamomq.Message[any]{},
}, nil
},
DeleteMessageFunc: func(ctx context.Context, params *dynamomq.DeleteMessageInput) (*dynamomq.DeleteMessageOutput, error) {
return &dynamomq.DeleteMessageOutput{}, nil
},
MoveMessageToDLQFunc: func(ctx context.Context, params *dynamomq.MoveMessageToDLQInput) (*dynamomq.MoveMessageToDLQOutput, error) {
return &dynamomq.MoveMessageToDLQOutput{}, nil
},
RedriveMessageFunc: func(ctx context.Context, params *dynamomq.RedriveMessageInput) (*dynamomq.RedriveMessageOutput, error) {
return &dynamomq.RedriveMessageOutput{}, nil
},
GetMessageFunc: func(ctx context.Context, params *dynamomq.GetMessageInput) (*dynamomq.GetMessageOutput[any], error) {
return &dynamomq.GetMessageOutput[any]{
Message: &dynamomq.Message[any]{},
}, nil
},
GetQueueStatsFunc: func(ctx context.Context, params *dynamomq.GetQueueStatsInput) (*dynamomq.GetQueueStatsOutput, error) {
return &dynamomq.GetQueueStatsOutput{}, nil
},
GetDLQStatsFunc: func(ctx context.Context, params *dynamomq.GetDLQStatsInput) (*dynamomq.GetDLQStatsOutput, error) {
return &dynamomq.GetDLQStatsOutput{}, nil
},
ListMessagesFunc: func(ctx context.Context, params *dynamomq.ListMessagesInput) (*dynamomq.ListMessagesOutput[any], error) {
return &dynamomq.ListMessagesOutput[any]{}, nil
},
ReplaceMessageFunc: func(ctx context.Context, params *dynamomq.ReplaceMessageInput[any]) (*dynamomq.ReplaceMessageOutput, error) {
return &dynamomq.ReplaceMessageOutput{}, nil
},
}
47 changes: 47 additions & 0 deletions internal/mock/mock.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,53 @@ func (m Client[T]) ReplaceMessage(ctx context.Context, params *dynamomq.ReplaceM
return nil, ErrNotImplemented
}

var SuccessfulMockClient = &Client[any]{
SendMessageFunc: func(ctx context.Context, params *dynamomq.SendMessageInput[any]) (*dynamomq.SendMessageOutput[any], error) {
return &dynamomq.SendMessageOutput[any]{
Result: &dynamomq.Result{},
Message: &dynamomq.Message[any]{},
}, nil
},
ReceiveMessageFunc: func(ctx context.Context, params *dynamomq.ReceiveMessageInput) (*dynamomq.ReceiveMessageOutput[any], error) {
return &dynamomq.ReceiveMessageOutput[any]{
Result: &dynamomq.Result{},
PeekedMessageObject: &dynamomq.Message[any]{},
}, nil
},
UpdateMessageAsVisibleFunc: func(ctx context.Context, params *dynamomq.UpdateMessageAsVisibleInput) (*dynamomq.UpdateMessageAsVisibleOutput[any], error) {
return &dynamomq.UpdateMessageAsVisibleOutput[any]{
Result: &dynamomq.Result{},
Message: &dynamomq.Message[any]{},
}, nil
},
DeleteMessageFunc: func(ctx context.Context, params *dynamomq.DeleteMessageInput) (*dynamomq.DeleteMessageOutput, error) {
return &dynamomq.DeleteMessageOutput{}, nil
},
MoveMessageToDLQFunc: func(ctx context.Context, params *dynamomq.MoveMessageToDLQInput) (*dynamomq.MoveMessageToDLQOutput, error) {
return &dynamomq.MoveMessageToDLQOutput{}, nil
},
RedriveMessageFunc: func(ctx context.Context, params *dynamomq.RedriveMessageInput) (*dynamomq.RedriveMessageOutput, error) {
return &dynamomq.RedriveMessageOutput{}, nil
},
GetMessageFunc: func(ctx context.Context, params *dynamomq.GetMessageInput) (*dynamomq.GetMessageOutput[any], error) {
return &dynamomq.GetMessageOutput[any]{
Message: &dynamomq.Message[any]{},
}, nil
},
GetQueueStatsFunc: func(ctx context.Context, params *dynamomq.GetQueueStatsInput) (*dynamomq.GetQueueStatsOutput, error) {
return &dynamomq.GetQueueStatsOutput{}, nil
},
GetDLQStatsFunc: func(ctx context.Context, params *dynamomq.GetDLQStatsInput) (*dynamomq.GetDLQStatsOutput, error) {
return &dynamomq.GetDLQStatsOutput{}, nil
},
ListMessagesFunc: func(ctx context.Context, params *dynamomq.ListMessagesInput) (*dynamomq.ListMessagesOutput[any], error) {
return &dynamomq.ListMessagesOutput[any]{}, nil
},
ReplaceMessageFunc: func(ctx context.Context, params *dynamomq.ReplaceMessageInput[any]) (*dynamomq.ReplaceMessageOutput, error) {
return &dynamomq.ReplaceMessageOutput{}, nil
},
}

type Clock struct {
T time.Time
}
Expand Down
116 changes: 116 additions & 0 deletions internal/mock/mock_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package mock_test

import (
"context"
"errors"
"reflect"
"testing"
"time"

"github.com/vvatanabe/dynamomq"
"github.com/vvatanabe/dynamomq/internal/mock"
)

func TestMockClient(t *testing.T) {
ctx := context.Background()
notImplementedClient := &mock.Client[any]{}
tests := []struct {
name string
method func(client *mock.Client[any]) (any, error)
}{
{
name: "SendMessage",
method: func(client *mock.Client[any]) (any, error) {
return client.SendMessage(ctx, nil)
},
},
{
name: "ReceiveMessage",
method: func(client *mock.Client[any]) (any, error) {
return client.ReceiveMessage(ctx, nil)
},
},
{
name: "UpdateMessageAsVisible",
method: func(client *mock.Client[any]) (any, error) {
return client.UpdateMessageAsVisible(ctx, nil)
},
},
{
name: "DeleteMessage",
method: func(client *mock.Client[any]) (any, error) {
return client.DeleteMessage(ctx, nil)
},
},
{
name: "MoveMessageToDLQ",
method: func(client *mock.Client[any]) (any, error) {
return client.MoveMessageToDLQ(ctx, nil)
},
},
{
name: "RedriveMessage",
method: func(client *mock.Client[any]) (any, error) {
return client.RedriveMessage(ctx, nil)
},
},
{
name: "GetMessage",
method: func(client *mock.Client[any]) (any, error) {
return client.GetMessage(ctx, nil)
},
},
{
name: "GetQueueStats",
method: func(client *mock.Client[any]) (any, error) {
return client.GetQueueStats(ctx, nil)
},
},
{
name: "GetDLQStats",
method: func(client *mock.Client[any]) (any, error) {
return client.GetDLQStats(ctx, nil)
},
},
{
name: "ListMessages",
method: func(client *mock.Client[any]) (any, error) {
return client.ListMessages(ctx, nil)
},
},
{
name: "ReplaceMessage",
method: func(client *mock.Client[any]) (any, error) {
return client.ReplaceMessage(ctx, nil)
},
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
_, err := tt.method(mock.SuccessfulMockClient)
if err != nil {
t.Errorf("with implementation: error %v", err)
}
_, err = tt.method(notImplementedClient)
if !errors.Is(err, mock.ErrNotImplemented) {
t.Errorf("without implementation: got error %v, want %v", err, mock.ErrNotImplemented)
}
})
}
}

func TestMockClockNow(t *testing.T) {
now := time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC)
m := mock.Clock{
T: now,
}
if got := m.Now(); !reflect.DeepEqual(got, now) {
t.Errorf("Now() = %v, want %v", got, now)
}
opt := &dynamomq.ClientOptions{}
mock.WithClock(m)(opt)
if got := opt.Clock.Now(); !reflect.DeepEqual(got, now) {
t.Errorf("Now() = %v, want %v", got, now)
}
}

0 comments on commit ef7d0d3

Please sign in to comment.