package resultsync import ( "context" "fmt" "testing" "queryorchestration/internal/database/repository" "queryorchestration/internal/serviceconfig" queryc "queryorchestration/internal/serviceconfig/queue/query" queuemock "queryorchestration/mocks/queue" "github.com/stretchr/testify/require" "github.com/aws/aws-sdk-go-v2/service/sqs" "github.com/google/uuid" "github.com/pashagolub/pgxmock/v3" "github.com/stretchr/testify/mock" ) type ResultSyncConfig struct { serviceconfig.BaseConfig queryc.QueryConfig } func TestTriggerSync(t *testing.T) { ctx := context.Background() pool, err := pgxmock.NewPool() require.NoError(t, err) cfg := &ResultSyncConfig{} cfg.DBPool = pool cfg.DBQueries = repository.New(pool) mockSQS := queuemock.NewMockSQSClient(t) cfg.QueueClient = mockSQS cfg.QueryURL = "/i/am/here" svc := Service{ cfg: cfg, } params := &Body{ DocumentID: uuid.New(), QueryID: uuid.New(), } mockSQS.EXPECT(). SendMessage( mock.Anything, mock.MatchedBy(func(in *sqs.SendMessageInput) bool { return *in.QueueUrl == cfg.QueryURL && *in.MessageBody == fmt.Sprintf("{\"document_id\":\"%s\",\"query_id\":\"%s\"}", params.DocumentID.String(), params.QueryID.String()) }), mock.Anything, ). Return(&sqs.SendMessageOutput{}, nil) err = svc.TriggerSync(ctx, params) require.NoError(t, err) } func TestTriggerMultiSync(t *testing.T) { ctx := context.Background() pool, err := pgxmock.NewPool() require.NoError(t, err) cfg := &ResultSyncConfig{} cfg.DBPool = pool cfg.DBQueries = repository.New(pool) mockSQS := queuemock.NewMockSQSClient(t) cfg.QueueClient = mockSQS cfg.QueryURL = "/i/am/here" svc := Service{ cfg: cfg, } docId := uuid.New() queryIDOne := uuid.New() queryIDTwo := uuid.New() mockSQS.EXPECT(). SendMessage( mock.Anything, mock.MatchedBy(func(in *sqs.SendMessageInput) bool { return *in.QueueUrl == cfg.QueryURL && *in.MessageBody == fmt.Sprintf("{\"document_id\":\"%s\",\"query_id\":\"%s\"}", docId.String(), queryIDOne.String()) }), mock.Anything, ). Return(&sqs.SendMessageOutput{}, nil) mockSQS.EXPECT(). SendMessage( mock.Anything, mock.MatchedBy(func(in *sqs.SendMessageInput) bool { return *in.QueueUrl == cfg.QueryURL && *in.MessageBody == fmt.Sprintf("{\"document_id\":\"%s\",\"query_id\":\"%s\"}", docId.String(), queryIDTwo.String()) }), mock.Anything, ). Return(&sqs.SendMessageOutput{}, nil) err = svc.TriggerMultiSync(ctx, docId, []*uuid.UUID{&queryIDOne, &queryIDTwo}) require.NoError(t, err) }