Merged in feature/lessmocks (pull request #151)

Less Mocks

* lessmocks
This commit is contained in:
Michael McGuinness
2025-05-23 10:10:48 +00:00
parent 33d68b7e04
commit b2cfeb3078
5 changed files with 134 additions and 168 deletions
+58 -83
View File
@@ -5,10 +5,11 @@ import (
"testing"
"time"
queuemock "queryorchestration/mocks/queue"
"queryorchestration/internal/serviceconfig/objectstore"
"queryorchestration/internal/serviceconfig/queue"
"queryorchestration/internal/test"
runnermock "queryorchestration/mocks/runner"
"github.com/aws/aws-sdk-go-v2/service/sqs"
"github.com/aws/aws-sdk-go-v2/service/sqs/types"
"github.com/go-playground/validator/v10"
"github.com/stretchr/testify/assert"
@@ -19,29 +20,20 @@ import (
type MockStruct struct{}
func TestPollMessages(t *testing.T) {
ctx := context.Background()
cfg := &struct {
BaseConfig[MockStruct]
objectstore.ObjectStoreConfig
}{}
acfg := test.CreateAWSContainer(t, cfg)
test.SetQueueClient(t, t.Context(), cfg, acfg.ExternalEndpoint)
cfg.QueueURL = test.CreateQueue(t, cfg, test.QueryRunnerName)
cfg := &BaseConfig[MockStruct]{}
mockSQS := queuemock.NewMockSQSClient(t)
cfg.QueueClient = mockSQS
mockController := runnermock.NewMockController[MockStruct](t)
cfg.Controller = mockController
cfg.QueueURL = "/i/am/here"
cfg.Validator = validator.New()
res := sqs.ReceiveMessageOutput{Messages: []types.Message{}}
mockSQS.EXPECT().
ReceiveMessage(
mock.Anything,
mock.MatchedBy(func(in *sqs.ReceiveMessageInput) bool {
return *in.QueueUrl == cfg.QueueURL
}),
mock.Anything,
).
Return(&res, nil)
ctx, cancel := context.WithTimeout(ctx, time.Second)
ctx, cancel := context.WithTimeout(t.Context(), time.Second)
defer cancel()
scfg := &Server[MockStruct]{
@@ -52,14 +44,17 @@ func TestPollMessages(t *testing.T) {
}
func TestPollMessage(t *testing.T) {
ctx := context.Background()
cfg := &struct {
BaseConfig[MockStruct]
objectstore.ObjectStoreConfig
}{}
acfg := test.CreateAWSContainer(t, cfg)
test.SetQueueClient(t, t.Context(), cfg, acfg.ExternalEndpoint)
cfg.QueueURL = test.CreateQueue(t, cfg, test.QueryRunnerName)
cfg := &BaseConfig[MockStruct]{}
mockSQS := queuemock.NewMockSQSClient(t)
cfg.QueueClient = mockSQS
mockController := runnermock.NewMockController[MockStruct](t)
cfg.Controller = mockController
cfg.QueueURL = "/i/am/here"
cfg.Validator = validator.New()
ser := &Server[MockStruct]{
@@ -67,28 +62,6 @@ func TestPollMessage(t *testing.T) {
cleanup: func() error { return nil },
}
id := "example_id"
body := "{}"
receipt := "receipts"
mockSQS.EXPECT().
ReceiveMessage(
mock.Anything,
mock.MatchedBy(func(in *sqs.ReceiveMessageInput) bool {
return *in.QueueUrl == cfg.QueueURL
}),
mock.Anything,
).
Return(&sqs.ReceiveMessageOutput{
Messages: []types.Message{
{
MessageId: &id,
Body: &body,
ReceiptHandle: &receipt,
},
},
}, nil)
mockController.EXPECT().
Process(
mock.Anything,
@@ -98,29 +71,34 @@ func TestPollMessage(t *testing.T) {
).
Return(true)
mockSQS.EXPECT().
DeleteMessage(
mock.Anything,
mock.MatchedBy(func(in *sqs.DeleteMessageInput) bool {
return *in.QueueUrl == cfg.QueueURL && *in.ReceiptHandle == receipt
}),
mock.Anything,
).
Return(&sqs.DeleteMessageOutput{}, nil)
err := ser.pollMessage(ctx)
err := cfg.SendToQueue(t.Context(), &queue.SendParams{
QueueURL: cfg.GetQueueURL(),
Body: struct{}{},
})
require.NoError(t, err)
err = ser.pollMessage(t.Context())
require.NoError(t, err)
ares, err := cfg.ReceiveFromQueue(t.Context(), &queue.ReceiveParams{
QueueURL: cfg.GetQueueURL(),
})
require.NoError(t, err)
require.Len(t, ares.Messages, 0)
}
func TestProcessMessage(t *testing.T) {
ctx := context.Background()
cfg := &struct {
BaseConfig[MockStruct]
objectstore.ObjectStoreConfig
}{}
acfg := test.CreateAWSContainer(t, cfg)
test.SetQueueClient(t, t.Context(), cfg, acfg.ExternalEndpoint)
cfg.QueueURL = test.CreateQueue(t, cfg, test.QueryRunnerName)
cfg := &BaseConfig[MockStruct]{}
mockSQS := queuemock.NewMockSQSClient(t)
cfg.QueueClient = mockSQS
mockController := runnermock.NewMockController[MockStruct](t)
cfg.Controller = mockController
cfg.QueueURL = "/i/am/here"
cfg.Validator = validator.New()
ser := &Server[MockStruct]{
@@ -128,15 +106,6 @@ func TestProcessMessage(t *testing.T) {
cleanup: func() error { return nil },
}
id := "example_id"
body := "{}"
receipt := "receipts"
msg := &types.Message{
MessageId: &id,
Body: &body,
ReceiptHandle: &receipt,
}
mockController.EXPECT().
Process(
mock.Anything,
@@ -146,18 +115,24 @@ func TestProcessMessage(t *testing.T) {
).
Return(true)
mockSQS.EXPECT().
DeleteMessage(
mock.Anything,
mock.MatchedBy(func(in *sqs.DeleteMessageInput) bool {
return *in.QueueUrl == cfg.QueueURL && *in.ReceiptHandle == receipt
}),
mock.Anything,
).
Return(&sqs.DeleteMessageOutput{}, nil)
err := ser.processMessage(ctx, msg)
err := cfg.SendToQueue(t.Context(), &queue.SendParams{
QueueURL: cfg.GetQueueURL(),
Body: struct{}{},
})
require.NoError(t, err)
msg := test.AssertMessage(t, cfg, &queue.ReceiveParams{
QueueURL: cfg.GetQueueURL(),
})
err = ser.processMessage(t.Context(), &msg)
require.NoError(t, err)
ares, err := cfg.ReceiveFromQueue(t.Context(), &queue.ReceiveParams{
QueueURL: cfg.GetQueueURL(),
})
require.NoError(t, err)
require.Len(t, ares.Messages, 0)
}
func TestProcessBody(t *testing.T) {
+6 -18
View File
@@ -6,11 +6,10 @@ import (
"testing"
"queryorchestration/internal/serviceconfig/queue"
queuemock "queryorchestration/mocks/queue"
"queryorchestration/internal/test"
"github.com/aws/aws-sdk-go-v2/service/sqs"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
)
@@ -31,24 +30,13 @@ func TestSetQueueClient(t *testing.T) {
}
func TestPingQueueByURL(t *testing.T) {
ctx := context.Background()
mockSQS := queuemock.NewMockSQSClient(t)
c := queue.QueueConfig{
QueueClient: mockSQS,
}
url := "i/am/here"
cfg := &AWSConfig{}
acfg := test.CreateAWSContainer(t, cfg)
mockSQS.EXPECT().
GetQueueAttributes(
mock.Anything,
mock.MatchedBy(func(in *sqs.GetQueueAttributesInput) bool {
return *in.QueueUrl == url
}),
mock.Anything,
).
Return(&sqs.GetQueueAttributesOutput{}, nil)
test.SetQueueClient(t, t.Context(), cfg, acfg.ExternalEndpoint)
cfg.QueryURL = test.CreateQueue(t, cfg, test.QueryRunnerName)
err := c.PingQueueByURL(ctx, url)
err := cfg.PingQueueByURL(t.Context(), cfg.QueryURL)
require.NoError(t, err)
}
func TestGetSQSEndpoint(t *testing.T) {
+27 -23
View File
@@ -1,39 +1,43 @@
package queue_test
import (
"context"
"testing"
"queryorchestration/internal/serviceconfig/queue"
queuemock "queryorchestration/mocks/queue"
"queryorchestration/internal/test"
"github.com/stretchr/testify/require"
"github.com/aws/aws-sdk-go-v2/service/sqs"
"github.com/stretchr/testify/mock"
)
func TestDelete(t *testing.T) {
ctx := context.Background()
mockSQS := queuemock.NewMockSQSClient(t)
cfg := queue.QueueConfig{}
cfg.QueueClient = mockSQS
handle := "iamahandler"
cfg := &AWSConfig{}
acfg := test.CreateAWSContainer(t, cfg)
test.SetQueueClient(t, t.Context(), cfg, acfg.ExternalEndpoint)
cfg.QueryURL = test.CreateQueue(t, cfg, test.QueryRunnerName)
err := cfg.SendToQueue(t.Context(), &queue.SendParams{
QueueURL: cfg.GetQueryURL(),
Body: struct {
}{},
})
require.NoError(t, err)
msg := test.AssertMessage(t, cfg, &queue.ReceiveParams{
QueueURL: cfg.GetQueryURL(),
})
params := &queue.DeleteParams{
ReceiptHandle: &handle,
QueueURL: "/i/am/here",
ReceiptHandle: msg.ReceiptHandle,
QueueURL: cfg.GetQueryURL(),
}
mockSQS.EXPECT().
DeleteMessage(
mock.Anything,
mock.MatchedBy(func(in *sqs.DeleteMessageInput) bool {
return *in.QueueUrl == params.QueueURL && *in.ReceiptHandle == handle
}),
mock.Anything,
).
Return(&sqs.DeleteMessageOutput{}, nil)
err := cfg.DeleteFromQueue(ctx, params)
err = cfg.DeleteFromQueue(t.Context(), params)
require.NoError(t, err)
ares, err := cfg.ReceiveFromQueue(t.Context(), &queue.ReceiveParams{
QueueURL: cfg.GetQueryURL(),
})
require.NoError(t, err)
require.Len(t, ares.Messages, 0)
}
+21 -24
View File
@@ -1,41 +1,38 @@
package queue_test
import (
"context"
"testing"
"queryorchestration/internal/serviceconfig/queue"
queuemock "queryorchestration/mocks/queue"
"queryorchestration/internal/test"
"github.com/aws/aws-sdk-go-v2/service/sqs"
"github.com/aws/aws-sdk-go-v2/service/sqs/types"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
)
func TestReceive(t *testing.T) {
ctx := context.Background()
mockSQS := queuemock.NewMockSQSClient(t)
cfg := queue.QueueConfig{}
cfg.QueueClient = mockSQS
cfg := &AWSConfig{}
acfg := test.CreateAWSContainer(t, cfg)
test.SetQueueClient(t, t.Context(), cfg, acfg.ExternalEndpoint)
cfg.QueryURL = test.CreateQueue(t, cfg, test.QueryRunnerName)
err := cfg.SendToQueue(t.Context(), &queue.SendParams{
QueueURL: cfg.GetQueryURL(),
Body: struct {
Field string
}{
Field: "value",
},
})
require.NoError(t, err)
params := &queue.ReceiveParams{
QueueURL: "/i/am/here",
QueueURL: cfg.GetQueryURL(),
}
res := sqs.ReceiveMessageOutput{Messages: []types.Message{}}
mockSQS.EXPECT().
ReceiveMessage(
mock.Anything,
mock.MatchedBy(func(in *sqs.ReceiveMessageInput) bool {
return *in.QueueUrl == params.QueueURL
}),
mock.Anything,
).
Return(&res, nil)
ares, err := cfg.ReceiveFromQueue(ctx, params)
ares, err := cfg.ReceiveFromQueue(t.Context(), params)
require.NoError(t, err)
assert.EqualExportedValues(t, res, *ares)
require.Len(t, ares.Messages, 1)
assert.Equal(t, *ares.Messages[0].Body, `{"Field":"value"}`)
}
+22 -20
View File
@@ -1,37 +1,39 @@
package queue_test
import (
"context"
"regexp"
"testing"
"queryorchestration/internal/serviceconfig"
"queryorchestration/internal/serviceconfig/objectstore"
"queryorchestration/internal/serviceconfig/queue"
queuemock "queryorchestration/mocks/queue"
"queryorchestration/internal/serviceconfig/queue/query"
"queryorchestration/internal/test"
"github.com/aws/aws-sdk-go-v2/service/sqs"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
)
type AWSConfig struct {
serviceconfig.BaseConfig
queue.QueueConfig
objectstore.ObjectStoreConfig
query.QueryConfig
}
func TestSend(t *testing.T) {
ctx := context.Background()
mockSQS := queuemock.NewMockSQSClient(t)
cfg := queue.QueueConfig{}
cfg.QueueClient = mockSQS
cfg := &AWSConfig{}
acfg := test.CreateAWSContainer(t, cfg)
test.SetQueueClient(t, t.Context(), cfg, acfg.ExternalEndpoint)
cfg.QueryURL = test.CreateQueue(t, cfg, test.QueryRunnerName)
params := &queue.SendParams{
QueueURL: "/i/am/here",
QueueURL: cfg.GetQueryURL(),
Body: struct{}{},
}
mockSQS.EXPECT().
SendMessage(
mock.Anything,
mock.MatchedBy(func(in *sqs.SendMessageInput) bool {
return *in.QueueUrl == params.QueueURL && *in.MessageBody == "{}"
}),
mock.Anything,
).
Return(&sqs.SendMessageOutput{}, nil)
err := cfg.SendToQueue(ctx, params)
err := cfg.SendToQueue(t.Context(), params)
require.NoError(t, err)
test.AssertMessageBody(t, cfg, cfg.GetQueryURL(), regexp.MustCompile("{}"))
}