This commit is contained in:
Michael McGuinness
2024-12-24 17:13:48 +00:00
parent 827d973053
commit 4dd050e390
46 changed files with 327 additions and 155 deletions
+2 -2
View File
@@ -26,7 +26,7 @@ func createContainer(t *testing.T, ctx context.Context, config *containerConfig)
}
req := testcontainers.ContainerRequest{
Image: "gotemplate_grpc:latest",
Image: "queryorchestration_grpc:latest",
Env: map[string]string{
"DB_USER": config.DB.User,
"DB_PASS": config.DB.Password,
@@ -85,7 +85,7 @@ func createDB(t *testing.T, ctx context.Context, network *testcontainers.DockerN
}
config := dbConfig{
Name: "gotemplate",
Name: "queryorchestration",
Password: "pass",
User: "postgres",
Port: port.Int(),
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"context"
"testing"
"gotemplate/api/grpc/spec"
"queryorchestration/api/grpc/spec"
"github.com/stretchr/testify/assert"
)
+2 -2
View File
@@ -32,7 +32,7 @@ func createContainer(t *testing.T, ctx context.Context, config containerConfig)
}
req := testcontainers.ContainerRequest{
Image: "gotemplate_queue:latest",
Image: "queryorchestration_queue:latest",
Env: map[string]string{
"QUEUE_URL": config.Queue.URL,
"AWS_DEFAULT_REGION": config.Queue.Region,
@@ -178,7 +178,7 @@ func createDB(t *testing.T, ctx context.Context, network *testcontainers.DockerN
}
config := dbConfig{
Name: "gotemplate",
Name: "queryorchestration",
Password: "pass",
User: "postgres",
Port: port.Int(),
+1 -1
View File
@@ -3,7 +3,7 @@ package queue_test
import (
"context"
"encoding/json"
"gotemplate/internal/document"
"queryorchestration/internal/document"
"testing"
"github.com/google/uuid"
+3 -3
View File
@@ -2,9 +2,9 @@ package document_test
import (
"context"
"gotemplate/internal/collector"
"gotemplate/internal/database"
"gotemplate/internal/database/repository"
"queryorchestration/internal/collector"
"queryorchestration/internal/database"
"queryorchestration/internal/database/repository"
"testing"
"github.com/google/uuid"
@@ -0,0 +1,38 @@
package document_test
import (
"context"
contextfull "queryorchestration/internal/contextFull"
"queryorchestration/internal/query"
"queryorchestration/internal/result"
"testing"
"github.com/google/uuid"
"github.com/stretchr/testify/assert"
)
func TestContextFull(t *testing.T) {
ctx := context.Background()
extractor := contextfull.New()
query := query.Query{
ID: uuid.New(),
Type: query.TypeJsonExtractor,
RequiredQueryID: uuid.Nil,
Version: int32(1),
}
values := &[]result.Value{}
value, err := extractor.Process(ctx, query, values)
assert.Nil(t, err)
assert.Equal(t, "", value)
values = &[]result.Value{
contextfull.NewResult("example_result"),
}
_, err = extractor.Process(ctx, query, values)
assert.EqualError(t, err, "no requirements expected")
}
+1 -1
View File
@@ -1,7 +1,7 @@
package database_test
import (
"gotemplate/internal/database"
"queryorchestration/internal/database"
"testing"
"github.com/google/uuid"
+3 -3
View File
@@ -2,9 +2,9 @@ package document_test
import (
"context"
"gotemplate/internal/database"
"gotemplate/internal/database/repository"
"gotemplate/internal/document"
"queryorchestration/internal/database"
"queryorchestration/internal/database/repository"
"queryorchestration/internal/document"
"testing"
"github.com/google/uuid"
+1 -1
View File
@@ -1,8 +1,8 @@
package env_test
import (
"gotemplate/internal/env"
"os"
"queryorchestration/internal/env"
"testing"
"github.com/stretchr/testify/assert"
+1 -1
View File
@@ -1,8 +1,8 @@
package env_test
import (
"gotemplate/internal/env"
"os"
"queryorchestration/internal/env"
"testing"
"github.com/stretchr/testify/assert"
@@ -3,11 +3,12 @@ package document_test
import (
"context"
"fmt"
"gotemplate/internal/database"
"gotemplate/internal/database/repository"
jsonextractor "gotemplate/internal/jsonExtractor"
"gotemplate/internal/query"
"gotemplate/internal/result"
contextfull "queryorchestration/internal/contextFull"
"queryorchestration/internal/database"
"queryorchestration/internal/database/repository"
jsonextractor "queryorchestration/internal/jsonExtractor"
"queryorchestration/internal/query"
"queryorchestration/internal/result"
"testing"
"github.com/google/uuid"
@@ -39,7 +40,7 @@ func TestJSONProcess(t *testing.T) {
jsonString := fmt.Sprintf("{\"key\": \"%s\"}", entryValue)
values := &[]result.Value{
{ID: uuid.New(), QueryID: uuid.New(), Value: jsonString},
contextfull.NewResult(jsonString),
}
config := "{\"path\":\"key\"}"
@@ -57,7 +58,7 @@ func TestJSONProcess(t *testing.T) {
entryValue = ""
jsonString = fmt.Sprintf("{\"key\": \"%s\"}", entryValue)
values = &[]result.Value{
{ID: uuid.New(), QueryID: uuid.New(), Value: jsonString},
contextfull.NewResult(jsonString),
}
db.ExpectQuery("name: GetQueryConfig :one").WithArgs(database.MustToDBUUID(query.ID), query.Version).
WillReturnRows(
@@ -72,7 +73,7 @@ func TestJSONProcess(t *testing.T) {
entryValue = "1"
jsonString = fmt.Sprintf("{\"key\": %s", entryValue)
values = &[]result.Value{
{ID: uuid.New(), QueryID: uuid.New(), Value: jsonString},
contextfull.NewResult(jsonString),
}
db.ExpectQuery("name: GetQueryConfig :one").WithArgs(database.MustToDBUUID(query.ID), query.Version).
WillReturnRows(
@@ -108,7 +109,7 @@ func TestJSONProcessJSON(t *testing.T) {
jsonString := fmt.Sprintf("{\"key\": \"%s\"}", entryValue)
values := &[]result.Value{
{ID: uuid.New(), QueryID: uuid.New(), Value: jsonString},
contextfull.NewResult(jsonString),
}
config := "{\"path\":\"invalid_key\"}"
@@ -185,17 +186,17 @@ func TestJSONProcessResults(t *testing.T) {
assert.Empty(t, value)
results = &[]result.Value{
{ID: uuid.New(), QueryID: uuid.New(), Value: ""},
{ID: uuid.New(), QueryID: uuid.New(), Value: ""},
contextfull.NewResult(""),
contextfull.NewResult(""),
}
value, err = extractor.Process(ctx, query, results)
assert.EqualError(t, err, "JSON Extraction requires 1 result")
assert.Empty(t, value)
results = &[]result.Value{
{ID: uuid.New(), QueryID: uuid.New(), Value: ""},
{ID: uuid.New(), QueryID: uuid.New(), Value: ""},
{ID: uuid.New(), QueryID: uuid.New(), Value: ""},
contextfull.NewResult(""),
contextfull.NewResult(""),
contextfull.NewResult(""),
}
value, err = extractor.Process(ctx, query, results)
assert.EqualError(t, err, "JSON Extraction requires 1 result")
+12 -2
View File
@@ -1,8 +1,8 @@
package document_test
import (
"gotemplate/internal/database/repository"
"gotemplate/internal/query"
"queryorchestration/internal/database/repository"
"queryorchestration/internal/query"
"testing"
"github.com/google/uuid"
@@ -43,6 +43,11 @@ func TestParseDBType(t *testing.T) {
qType = repository.NullQuerytype{Valid: true}
_, err = query.ParseDBType(qType)
assert.EqualError(t, err, "invalid database query type")
qType = repository.NullQuerytype{Valid: true, Querytype: repository.QuerytypeContextFull}
value, err = query.ParseDBType(qType)
assert.Nil(t, err)
assert.Equal(t, query.Type(query.TypeContextFull), value)
}
func TestToDBQueryType(t *testing.T) {
@@ -54,4 +59,9 @@ func TestToDBQueryType(t *testing.T) {
dbQueryType = query.Type(-1)
_, err = query.ToDBQueryType(dbQueryType)
assert.EqualError(t, err, "invalid database query type")
dbQueryType = query.Type(query.TypeContextFull)
value, err = query.ToDBQueryType(dbQueryType)
assert.Nil(t, err)
assert.Equal(t, repository.NullQuerytype{Querytype: repository.QuerytypeContextFull, Valid: true}, value)
}
+2 -2
View File
@@ -2,8 +2,8 @@ package document_test
import (
"context"
"gotemplate/internal/database/repository"
"gotemplate/internal/query"
"queryorchestration/internal/database/repository"
"queryorchestration/internal/query"
"testing"
"github.com/pashagolub/pgxmock/v3"
+74 -24
View File
@@ -2,12 +2,13 @@ package document_test
import (
"context"
"gotemplate/internal/collector"
"gotemplate/internal/database"
"gotemplate/internal/database/repository"
"gotemplate/internal/query"
"gotemplate/internal/queryQueue"
"gotemplate/internal/result"
"fmt"
"queryorchestration/internal/collector"
"queryorchestration/internal/database"
"queryorchestration/internal/database/repository"
"queryorchestration/internal/query"
"queryorchestration/internal/queryQueue"
"queryorchestration/internal/result"
"testing"
"github.com/google/uuid"
@@ -52,14 +53,16 @@ func TestQueue(t *testing.T) {
queryFiveVersion := int32(5)
querySixID := uuid.New()
querySixVersion := int32(6)
contextID := uuid.New()
contextVersion := int32(1)
collectorQueries := []query.Query{
{ID: queryOneID, Type: query.TypeJsonExtractor, RequiredQueryID: uuid.Nil, Version: queryOneVersion},
{ID: contextID, Type: query.TypeContextFull, RequiredQueryID: uuid.Nil, Version: contextVersion},
{ID: queryOneID, Type: query.TypeJsonExtractor, RequiredQueryID: contextID, 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: queryFourID, Type: query.TypeJsonExtractor, RequiredQueryID: contextID, Version: queryFourVersion},
{ID: queryFiveID, Type: query.TypeJsonExtractor, RequiredQueryID: querySixID, Version: queryFiveVersion},
{ID: querySixID, Type: query.TypeJsonExtractor, RequiredQueryID: uuid.Nil, Version: querySixVersion},
{ID: querySixID, Type: query.TypeJsonExtractor, RequiredQueryID: contextID, Version: querySixVersion},
}
rows := pgxmock.NewRows([]string{"collectorId", "queryId", "type", "requiredQueryId", "queryVersion"})
@@ -74,18 +77,20 @@ func TestQueue(t *testing.T) {
db.ExpectQuery("name: GetCollectorQueries :many").WithArgs(dbCollectorID).WillReturnRows(rows)
contextResultID := uuid.New()
results := []result.Result{
{ID: contextResultID, QueryID: contextID, QueryVersion: contextVersion},
{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{
{ID: querySixID, Type: query.TypeJsonExtractor, RequiredQueryID: uuid.Nil, Version: querySixVersion},
{ID: querySixID, Type: query.TypeJsonExtractor, RequiredQueryID: contextID, Version: querySixVersion},
{ID: queryFiveID, Type: query.TypeJsonExtractor, RequiredQueryID: querySixID, Version: queryFiveVersion},
{ID: queryThreeID, Type: query.TypeJsonExtractor, RequiredQueryID: queryTwoID, Version: queryThreeVersion},
{ID: queryOneID, Type: query.TypeJsonExtractor, RequiredQueryID: contextID, Version: queryOneVersion},
{ID: queryThreeID, Type: query.TypeJsonExtractor, RequiredQueryID: queryOneID, Version: queryThreeVersion},
{ID: queryTwoID, Type: query.TypeJsonExtractor, RequiredQueryID: queryOneID, Version: queryTwoVersion},
{ID: queryOneID, Type: query.TypeJsonExtractor, RequiredQueryID: uuid.Nil, Version: queryOneVersion},
}
docID := uuid.New()
@@ -96,22 +101,67 @@ func TestQueue(t *testing.T) {
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).
keyLayerOne := "key"
keyLayerTwo := "key5"
valueLayerTwo := "value"
valueLayerOne := fmt.Sprintf("{\"%s\":\"%s\"}", keyLayerTwo, valueLayerTwo)
valueContext := fmt.Sprintf("{\"%s\":%s}", keyLayerOne, valueLayerOne)
db.ExpectQuery("name: ListResultValuesByID :many").WithArgs([]pgtype.UUID{database.MustToDBUUID(contextResultID)}).WillReturnRows(
pgxmock.NewRows([]string{"id", "queryId", "value"}).
AddRow(database.MustToDBUUID(contextResultID), database.MustToDBUUID(contextID), valueContext),
)
db.ExpectQuery("name: GetQueryConfig :one").WithArgs(database.MustToDBUUID(querySixID), querySixVersion).WillReturnRows(
pgxmock.NewRows([]string{"id", "config"}).
AddRow(pgtype.UUID{}, []byte(fmt.Sprintf("{\"path\":\"%s\"}", keyLayerOne))),
)
db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(querySixID), database.MustToDBUUID(docID), valueLayerOne, 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).
db.ExpectQuery("name: ListResultValuesByID :many").WithArgs(pgxmock.AnyArg()).WillReturnRows(
pgxmock.NewRows([]string{"id", "queryId", "value"}).
AddRow(pgtype.UUID{}, database.MustToDBUUID(querySixID), valueLayerOne),
)
db.ExpectQuery("name: GetQueryConfig :one").WithArgs(database.MustToDBUUID(queryFiveID), queryFiveVersion).WillReturnRows(
pgxmock.NewRows([]string{"id", "config"}).
AddRow(pgtype.UUID{}, []byte(fmt.Sprintf("{\"path\":\"%s\"}", keyLayerTwo))),
)
db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(queryFiveID), database.MustToDBUUID(docID), valueLayerTwo, 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).
db.ExpectQuery("name: ListResultValuesByID :many").WithArgs(pgxmock.AnyArg()).WillReturnRows(
pgxmock.NewRows([]string{"id", "queryId", "value"}).
AddRow(database.MustToDBUUID(contextResultID), database.MustToDBUUID(contextID), valueContext),
)
db.ExpectQuery("name: GetQueryConfig :one").WithArgs(database.MustToDBUUID(queryOneID), queryOneVersion).WillReturnRows(
pgxmock.NewRows([]string{"id", "config"}).
AddRow(pgtype.UUID{}, []byte(fmt.Sprintf("{\"path\":\"%s\"}", keyLayerOne))),
)
db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(queryOneID), database.MustToDBUUID(docID), valueLayerOne, cleanVersion, textVersion, queryOneVersion).
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).
db.ExpectQuery("name: ListResultValuesByID :many").WithArgs(pgxmock.AnyArg()).WillReturnRows(
pgxmock.NewRows([]string{"id", "queryId", "value"}).
AddRow(pgtype.UUID{}, database.MustToDBUUID(queryOneID), valueLayerOne),
)
db.ExpectQuery("name: GetQueryConfig :one").WithArgs(database.MustToDBUUID(queryThreeID), queryThreeVersion).WillReturnRows(
pgxmock.NewRows([]string{"id", "config"}).
AddRow(pgtype.UUID{}, []byte(fmt.Sprintf("{\"path\":\"%s\"}", keyLayerTwo))),
)
db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(queryThreeID), database.MustToDBUUID(docID), valueLayerTwo, 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(queryOneID), database.MustToDBUUID(docID), pgxmock.AnyArg(), cleanVersion, textVersion, queryOneVersion).
db.ExpectQuery("name: ListResultValuesByID :many").WithArgs(pgxmock.AnyArg()).WillReturnRows(
pgxmock.NewRows([]string{"id", "queryId", "value"}).
AddRow(pgtype.UUID{}, database.MustToDBUUID(queryOneID), valueLayerOne),
)
db.ExpectQuery("name: GetQueryConfig :one").WithArgs(database.MustToDBUUID(queryTwoID), queryTwoVersion).WillReturnRows(
pgxmock.NewRows([]string{"id", "config"}).
AddRow(pgtype.UUID{}, []byte(fmt.Sprintf("{\"path\":\"%s\"}", keyLayerTwo))),
)
db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(queryTwoID), database.MustToDBUUID(docID), valueLayerTwo, cleanVersion, textVersion, queryTwoVersion).
WillReturnResult(pgxmock.NewResult("", 1))
err = q.Execute(ctx)
assert.EqualError(t, err, "JSON Extraction requires 1 result")
assert.Nil(t, err)
}
+2 -15
View File
@@ -1,8 +1,8 @@
package document_test
import (
"gotemplate/internal/database/repository"
"gotemplate/internal/result"
"queryorchestration/internal/database/repository"
"queryorchestration/internal/result"
"testing"
"github.com/google/uuid"
@@ -10,19 +10,6 @@ import (
"github.com/stretchr/testify/assert"
)
func TestParseValue(t *testing.T) {
dbResult := repository.ListResultValuesByIDRow{
ID: pgtype.UUID{},
Queryid: pgtype.UUID{},
Value: "",
}
value := result.ParseValue(&dbResult)
assert.Equal(t, dbResult.Value, value.Value)
assert.Equal(t, uuid.Nil, value.ID)
assert.Equal(t, uuid.Nil, value.QueryID)
}
func TestParseResultValue(t *testing.T) {
dbResult := repository.ListResultsByDocumentIDRow{
ID: pgtype.UUID{},
+3 -3
View File
@@ -3,9 +3,9 @@ package document_test
import (
"context"
"fmt"
"gotemplate/internal/database"
"gotemplate/internal/database/repository"
"gotemplate/internal/result"
"queryorchestration/internal/database"
"queryorchestration/internal/database/repository"
"queryorchestration/internal/result"
"testing"
"github.com/google/uuid"