Files
query-orchestration/internal/job/collector/update/update_test.go
T

89 lines
2.8 KiB
Go
Raw Normal View History

package collectorupdate_test
2025-01-23 14:56:20 +00:00
import (
"context"
"fmt"
2025-01-23 14:56:20 +00:00
"queryorchestration/internal/database"
"queryorchestration/internal/database/repository"
"queryorchestration/internal/job/collector"
collectorupdate "queryorchestration/internal/job/collector/update"
"queryorchestration/internal/serviceconfig"
"queryorchestration/internal/serviceconfig/queue/jobsync"
queuemock "queryorchestration/mocks/queue"
2025-01-23 14:56:20 +00:00
"testing"
"github.com/aws/aws-sdk-go-v2/service/sqs"
2025-01-23 14:56:20 +00:00
"github.com/google/uuid"
"github.com/jackc/pgx/v5"
"github.com/pashagolub/pgxmock/v3"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
2025-01-23 14:56:20 +00:00
)
type CollectorUpdateConfig struct {
serviceconfig.BaseConfig
jobsync.JobSyncConfig
}
2025-01-23 14:56:20 +00:00
func TestUpdate(t *testing.T) {
ctx := context.Background()
pool, err := pgxmock.NewPool()
if err != nil {
t.Fatalf("failed to open pgxmock database: %v", err)
}
cfg := &CollectorUpdateConfig{}
cfg.DBPool = pool
cfg.DBQueries = repository.New(pool)
mockSQS := queuemock.NewMockSQSClient(t)
cfg.QueueClient = mockSQS
cfg.JobSyncURL = "here"
2025-01-23 14:56:20 +00:00
svc := collectorupdate.New(cfg, &collectorupdate.Services{
Collector: collector.New(cfg, &collector.Services{}),
2025-01-23 14:56:20 +00:00
})
current := collector.Collector{
JobID: uuid.New(),
ActiveVersion: 1,
LatestVersion: 4,
}
av := int32(2)
mv := int32(1)
update := collectorupdate.UpdateParams{
JobID: current.JobID,
ActiveVersion: &av,
MinCleanVersion: &mv,
2025-01-23 14:56:20 +00:00
}
pool.ExpectQuery("name: GetCollectorByJobID :one").WithArgs(database.MustToDBUUID(update.JobID)).
WillReturnRows(
pgxmock.NewRows([]string{"jobId", "minCleanVersion", "minTextVersion", "activeVersion", "latestVersion", "fields"}).
AddRow(database.MustToDBUUID(current.JobID), current.MinCleanVersion, current.MinTextVersion, current.ActiveVersion, current.LatestVersion, []byte("")),
2025-01-23 14:56:20 +00:00
)
pool.ExpectBeginTx(pgx.TxOptions{})
rv := current.LatestVersion + 1
pool.ExpectQuery("name: AddLatestCollectorVersion :one").WithArgs(database.MustToDBUUID(current.JobID)).WillReturnRows(
pgxmock.NewRows([]string{"version"}).
AddRow(rv),
)
pool.ExpectExec("name: SetActiveCollectorVersion :exec").WithArgs(database.MustToDBUUID(current.JobID), int32(2)).
WillReturnResult(pgxmock.NewResult("", 1))
pool.ExpectExec("name: SetCollectorCleanVersion :exec").WithArgs(database.MustToDBUUID(current.JobID), rv, *update.MinCleanVersion).
WillReturnResult(pgxmock.NewResult("", 1))
2025-01-23 14:56:20 +00:00
pool.ExpectCommit()
mockSQS.EXPECT().
SendMessage(
mock.Anything,
mock.MatchedBy(func(in *sqs.SendMessageInput) bool {
return *in.QueueUrl == cfg.JobSyncURL && *in.MessageBody == fmt.Sprintf("{\"id\":\"%s\"}", update.JobID.String())
}),
mock.Anything,
).
Return(&sqs.SendMessageOutput{}, nil)
2025-01-23 14:56:20 +00:00
err = svc.UpdateByJobId(ctx, &update)
assert.NoError(t, err)
2025-01-23 14:56:20 +00:00
}