2024-12-20 17:35:33 +00:00
|
|
|
package document_test
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"gotemplate/internal/collector"
|
|
|
|
|
"gotemplate/internal/database"
|
|
|
|
|
"gotemplate/internal/database/repository"
|
|
|
|
|
"gotemplate/internal/query"
|
2024-12-24 12:47:40 +00:00
|
|
|
"gotemplate/internal/queryQueue"
|
|
|
|
|
"gotemplate/internal/result"
|
2024-12-20 17:35:33 +00:00
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
|
"github.com/google/uuid"
|
|
|
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
|
|
|
"github.com/pashagolub/pgxmock/v3"
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestQueue(t *testing.T) {
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
|
|
|
|
db, err := pgxmock.NewConn()
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("failed to open pgxmock database: %v", err)
|
|
|
|
|
}
|
|
|
|
|
defer db.Close(ctx)
|
|
|
|
|
|
|
|
|
|
queries := repository.New(db)
|
|
|
|
|
jobID := uuid.New()
|
|
|
|
|
dbJobID := database.MustToDBUUID(jobID)
|
|
|
|
|
collectorID := uuid.New()
|
|
|
|
|
dbCollectorID := database.MustToDBUUID(collectorID)
|
|
|
|
|
|
|
|
|
|
db.ExpectQuery("name: GetCollectorFromJobID :one").WithArgs(dbJobID).
|
|
|
|
|
WillReturnRows(
|
|
|
|
|
pgxmock.NewRows([]string{"id", "jobId", "minCleanVersion", "minTextVersion"}).
|
|
|
|
|
AddRow(dbCollectorID, dbJobID, int32(1), int32(1)),
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
coll, err := collector.NewByJobId(ctx, queries, jobID)
|
|
|
|
|
assert.Nil(t, err)
|
|
|
|
|
|
|
|
|
|
queryOneID := uuid.New()
|
|
|
|
|
queryOneVersion := int32(1)
|
|
|
|
|
queryTwoID := uuid.New()
|
|
|
|
|
queryTwoVersion := int32(2)
|
|
|
|
|
queryThreeID := uuid.New()
|
|
|
|
|
queryThreeVersion := int32(3)
|
|
|
|
|
queryFourID := uuid.New()
|
|
|
|
|
queryFourVersion := int32(4)
|
|
|
|
|
queryFiveID := uuid.New()
|
|
|
|
|
queryFiveVersion := int32(5)
|
|
|
|
|
querySixID := uuid.New()
|
|
|
|
|
querySixVersion := int32(6)
|
|
|
|
|
collectorQueries := []query.Query{
|
2024-12-24 12:47:40 +00:00
|
|
|
{ID: queryOneID, Type: query.TypeJsonExtractor, RequiredQueryID: uuid.Nil, Version: queryOneVersion},
|
|
|
|
|
{ID: queryTwoID, Type: query.TypeJsonExtractor, RequiredQueryID: queryOneID, Version: queryTwoVersion},
|
|
|
|
|
{ID: queryThreeID, Type: query.TypeJsonExtractor, RequiredQueryID: queryOneID, Version: queryThreeVersion},
|
|
|
|
|
{ID: queryThreeID, Type: query.TypeJsonExtractor, RequiredQueryID: queryTwoID, Version: queryThreeVersion},
|
|
|
|
|
{ID: queryFourID, Type: query.TypeJsonExtractor, RequiredQueryID: uuid.Nil, Version: queryFourVersion},
|
|
|
|
|
{ID: queryFiveID, Type: query.TypeJsonExtractor, RequiredQueryID: querySixID, Version: queryFiveVersion},
|
|
|
|
|
{ID: querySixID, Type: query.TypeJsonExtractor, RequiredQueryID: uuid.Nil, Version: querySixVersion},
|
2024-12-20 17:35:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
rows := pgxmock.NewRows([]string{"collectorId", "queryId", "type", "requiredQueryId", "queryVersion"})
|
|
|
|
|
for _, q := range collectorQueries {
|
|
|
|
|
dbID := database.MustToDBUUID(q.ID)
|
|
|
|
|
dbReqID := database.MustToDBUUID(q.RequiredQueryID)
|
2024-12-24 12:47:40 +00:00
|
|
|
ty, err := query.ToDBQueryType(q.Type)
|
|
|
|
|
assert.Nil(t, err)
|
2024-12-20 17:35:33 +00:00
|
|
|
rows = rows.
|
2024-12-24 12:47:40 +00:00
|
|
|
AddRow(dbCollectorID, dbID, ty, dbReqID, pgtype.Int4{Int32: int32(q.Version), Valid: true})
|
2024-12-20 17:35:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
db.ExpectQuery("name: GetCollectorQueries :many").WithArgs(dbCollectorID).WillReturnRows(rows)
|
|
|
|
|
|
2024-12-24 12:47:40 +00:00
|
|
|
results := []result.Result{
|
2024-12-20 17:35:33 +00:00
|
|
|
{ID: uuid.New(), QueryID: queryFourID, QueryVersion: queryFourVersion},
|
|
|
|
|
{ID: uuid.New(), QueryID: querySixID, QueryVersion: querySixVersion - 1},
|
|
|
|
|
{ID: uuid.New(), QueryID: queryOneID, QueryVersion: queryOneVersion - 1},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
expectedQueries := []query.Query{
|
2024-12-24 12:47:40 +00:00
|
|
|
{ID: querySixID, Type: query.TypeJsonExtractor, RequiredQueryID: uuid.Nil, Version: querySixVersion},
|
|
|
|
|
{ID: queryFiveID, Type: query.TypeJsonExtractor, RequiredQueryID: querySixID, Version: queryFiveVersion},
|
|
|
|
|
{ID: queryThreeID, Type: query.TypeJsonExtractor, RequiredQueryID: queryTwoID, Version: queryThreeVersion},
|
|
|
|
|
{ID: queryTwoID, Type: query.TypeJsonExtractor, RequiredQueryID: queryOneID, Version: queryTwoVersion},
|
|
|
|
|
{ID: queryOneID, Type: query.TypeJsonExtractor, RequiredQueryID: uuid.Nil, Version: queryOneVersion},
|
2024-12-20 17:35:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
docID := uuid.New()
|
|
|
|
|
cleanVersion := int32(1)
|
|
|
|
|
textVersion := int32(1)
|
|
|
|
|
|
2024-12-24 12:47:40 +00:00
|
|
|
q, err := queryQueue.New(ctx, queries, coll, &results, docID, cleanVersion, textVersion)
|
2024-12-20 17:35:33 +00:00
|
|
|
assert.Nil(t, err)
|
|
|
|
|
assert.Equal(t, expectedQueries, q.GetQueue())
|
|
|
|
|
|
|
|
|
|
db.ExpectQuery("name: ListResultValuesByID :many").WithArgs([]pgtype.UUID{}).WillReturnRows(rows)
|
|
|
|
|
db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(querySixID), database.MustToDBUUID(docID), pgxmock.AnyArg(), cleanVersion, textVersion, querySixVersion).
|
|
|
|
|
WillReturnResult(pgxmock.NewResult("", 1))
|
|
|
|
|
db.ExpectQuery("name: ListResultValuesByID :many").WithArgs(pgxmock.AnyArg()).WillReturnRows(rows)
|
|
|
|
|
db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(queryFiveID), database.MustToDBUUID(docID), pgxmock.AnyArg(), cleanVersion, textVersion, queryFiveVersion).
|
|
|
|
|
WillReturnResult(pgxmock.NewResult("", 1))
|
|
|
|
|
db.ExpectQuery("name: ListResultValuesByID :many").WithArgs(pgxmock.AnyArg()).WillReturnRows(rows)
|
|
|
|
|
db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(queryThreeID), database.MustToDBUUID(docID), pgxmock.AnyArg(), cleanVersion, textVersion, queryThreeVersion).
|
|
|
|
|
WillReturnResult(pgxmock.NewResult("", 1))
|
|
|
|
|
db.ExpectQuery("name: ListResultValuesByID :many").WithArgs(pgxmock.AnyArg()).WillReturnRows(rows)
|
|
|
|
|
db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(queryTwoID), database.MustToDBUUID(docID), pgxmock.AnyArg(), cleanVersion, textVersion, queryTwoVersion).
|
|
|
|
|
WillReturnResult(pgxmock.NewResult("", 1))
|
|
|
|
|
db.ExpectQuery("name: ListResultValuesByID :many").WithArgs(pgxmock.AnyArg()).WillReturnRows(rows)
|
|
|
|
|
db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(queryOneID), database.MustToDBUUID(docID), pgxmock.AnyArg(), cleanVersion, textVersion, queryOneVersion).
|
|
|
|
|
WillReturnResult(pgxmock.NewResult("", 1))
|
|
|
|
|
|
|
|
|
|
err = q.Execute(ctx)
|
2024-12-23 12:26:05 +00:00
|
|
|
assert.EqualError(t, err, "JSON Extraction requires 1 result")
|
2024-12-20 17:35:33 +00:00
|
|
|
}
|