2025-02-12 19:00:25 +00:00
|
|
|
package endtoend_test
|
2025-01-13 15:02:43 +00:00
|
|
|
|
|
|
|
|
import (
|
2025-03-05 12:05:46 +00:00
|
|
|
"regexp"
|
|
|
|
|
"testing"
|
|
|
|
|
|
2025-01-13 15:02:43 +00:00
|
|
|
"queryorchestration/internal/test"
|
2025-03-17 18:14:15 +00:00
|
|
|
queryapi "queryorchestration/pkg/queryAPI"
|
2025-01-13 15:02:43 +00:00
|
|
|
|
2025-03-19 11:54:14 +00:00
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
|
|
2025-01-24 14:52:56 +00:00
|
|
|
"github.com/oapi-codegen/runtime/types"
|
2025-01-13 15:02:43 +00:00
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
|
)
|
|
|
|
|
|
2025-03-17 18:14:15 +00:00
|
|
|
func TestQueryAPI(t *testing.T) {
|
2025-05-23 10:51:33 +00:00
|
|
|
t.Run("list no queries", func(t *testing.T) {
|
|
|
|
|
cfg := &Config{}
|
|
|
|
|
|
|
|
|
|
c, cleanup := test.CreateAPINetworkWithParams(t, cfg, test.QueryAPI, &test.FullDependenciesParams{
|
|
|
|
|
NoObjectStore: true,
|
|
|
|
|
Runners: &[]test.RunnerName{},
|
|
|
|
|
})
|
|
|
|
|
defer cleanup()
|
|
|
|
|
|
|
|
|
|
client, err := queryapi.NewClientWithResponses(c.API.URI)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
queriesRes, err := client.ListQueriesWithResponse(t.Context())
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.Len(t, queriesRes.JSON200.Queries, 0)
|
|
|
|
|
})
|
2025-05-12 20:54:16 +00:00
|
|
|
t.Run("create and get query", func(t *testing.T) {
|
2025-06-03 13:52:10 +00:00
|
|
|
ctx := t.Context()
|
2025-01-13 15:02:43 +00:00
|
|
|
|
2025-05-12 20:54:16 +00:00
|
|
|
cfg := &Config{}
|
2025-02-14 10:56:24 +00:00
|
|
|
|
2025-05-12 20:54:16 +00:00
|
|
|
c, cleanup := test.CreateAPINetworkWithParams(t, cfg, test.QueryAPI, &test.FullDependenciesParams{
|
|
|
|
|
NoObjectStore: true,
|
|
|
|
|
Runners: &[]test.RunnerName{},
|
|
|
|
|
})
|
|
|
|
|
defer cleanup()
|
2025-01-13 15:02:43 +00:00
|
|
|
|
2025-05-12 20:54:16 +00:00
|
|
|
client, err := queryapi.NewClientWithResponses(c.API.URI)
|
|
|
|
|
require.NoError(t, err)
|
2025-01-13 15:02:43 +00:00
|
|
|
|
2025-05-12 20:54:16 +00:00
|
|
|
jcfg := `{"path": "createkey"}`
|
|
|
|
|
idRes, err := client.CreateQueryWithResponse(ctx, queryapi.QueryCreate{
|
|
|
|
|
Type: queryapi.JSONEXTRACTOR,
|
|
|
|
|
Config: &jcfg,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.NotNil(t, idRes)
|
|
|
|
|
assert.NotNil(t, idRes.JSON201)
|
|
|
|
|
jsonID := idRes.JSON201.Id
|
|
|
|
|
|
|
|
|
|
queryRes, err := client.GetQueryWithResponse(ctx, jsonID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.Equal(t, jsonID, queryRes.JSON200.Id)
|
|
|
|
|
assert.Equal(t, queryapi.JSONEXTRACTOR, queryRes.JSON200.Type)
|
|
|
|
|
assert.Equal(t, int32(1), queryRes.JSON200.ActiveVersion)
|
|
|
|
|
assert.Equal(t, int32(1), queryRes.JSON200.LatestVersion)
|
|
|
|
|
assert.Equal(t, jcfg, *queryRes.JSON200.Config)
|
|
|
|
|
assert.Nil(t, queryRes.JSON200.RequiredQueries)
|
|
|
|
|
|
|
|
|
|
queriesRes, err := client.ListQueriesWithResponse(ctx)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.Len(t, queriesRes.JSON200.Queries, 1)
|
|
|
|
|
assert.Equal(t, jcfg, *queriesRes.JSON200.Queries[0].Config)
|
2025-01-13 15:02:43 +00:00
|
|
|
})
|
2025-05-12 20:54:16 +00:00
|
|
|
t.Run("update query", func(t *testing.T) {
|
2025-06-03 13:52:10 +00:00
|
|
|
ctx := t.Context()
|
2025-05-12 20:54:16 +00:00
|
|
|
|
|
|
|
|
cfg := &Config{}
|
|
|
|
|
|
|
|
|
|
c, cleanup := test.CreateAPINetworkWithParams(t, cfg, test.QueryAPI, &test.FullDependenciesParams{
|
|
|
|
|
NoObjectStore: true,
|
|
|
|
|
Runners: &[]test.RunnerName{test.QueryVersionSyncRunnerName},
|
|
|
|
|
})
|
|
|
|
|
defer cleanup()
|
|
|
|
|
|
|
|
|
|
client, err := queryapi.NewClientWithResponses(c.API.URI)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
jcfg := "{}"
|
|
|
|
|
idRes, err := client.CreateQueryWithResponse(ctx, queryapi.QueryCreate{
|
|
|
|
|
Type: queryapi.JSONEXTRACTOR,
|
|
|
|
|
Config: &jcfg,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.NotNil(t, idRes)
|
|
|
|
|
assert.NotNil(t, idRes.JSON201)
|
|
|
|
|
jsonID := idRes.JSON201.Id
|
|
|
|
|
|
|
|
|
|
aV := int32(2)
|
|
|
|
|
newJcfg := `{"path": "keyone"}`
|
|
|
|
|
res, err := client.UpdateQueryWithResponse(ctx, jsonID, queryapi.QueryUpdate{
|
|
|
|
|
ActiveVersion: &aV,
|
|
|
|
|
Config: &newJcfg,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.NotNil(t, res)
|
|
|
|
|
|
2025-05-23 00:20:01 +00:00
|
|
|
test.AssertMessageBody(t, cfg, c.Dependencies.QueueURLs[test.QueryVersionSyncRunnerName], regexp.MustCompile(`{"id":".+"}`))
|
2025-05-12 20:54:16 +00:00
|
|
|
|
|
|
|
|
queryRes, err := client.GetQueryWithResponse(ctx, jsonID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.Equal(t, jsonID, queryRes.JSON200.Id)
|
|
|
|
|
assert.Equal(t, queryapi.JSONEXTRACTOR, queryRes.JSON200.Type)
|
|
|
|
|
assert.Equal(t, int32(2), queryRes.JSON200.ActiveVersion)
|
|
|
|
|
assert.Equal(t, int32(2), queryRes.JSON200.LatestVersion)
|
|
|
|
|
assert.Equal(t, newJcfg, *queryRes.JSON200.Config)
|
|
|
|
|
assert.Nil(t, queryRes.JSON200.RequiredQueries)
|
2025-01-20 13:31:48 +00:00
|
|
|
})
|
2025-05-12 20:54:16 +00:00
|
|
|
t.Run("multiple dependent queries", func(t *testing.T) {
|
2025-06-03 13:52:10 +00:00
|
|
|
ctx := t.Context()
|
2025-05-12 20:54:16 +00:00
|
|
|
|
|
|
|
|
cfg := &Config{}
|
|
|
|
|
|
|
|
|
|
c, cleanup := test.CreateAPINetworkWithParams(t, cfg, test.QueryAPI, &test.FullDependenciesParams{
|
|
|
|
|
NoObjectStore: true,
|
|
|
|
|
Runners: &[]test.RunnerName{},
|
|
|
|
|
})
|
|
|
|
|
defer cleanup()
|
|
|
|
|
|
|
|
|
|
client, err := queryapi.NewClientWithResponses(c.API.URI)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
idRes, err := client.CreateQueryWithResponse(ctx, queryapi.QueryCreate{
|
|
|
|
|
Type: queryapi.CONTEXTFULL,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.NotNil(t, idRes)
|
|
|
|
|
assert.NotNil(t, idRes.JSON201)
|
|
|
|
|
contextID := idRes.JSON201.Id
|
|
|
|
|
assert.NotEmpty(t, contextID)
|
|
|
|
|
|
|
|
|
|
jcfg := "{}"
|
|
|
|
|
idRes, err = client.CreateQueryWithResponse(ctx, queryapi.QueryCreate{
|
|
|
|
|
Type: queryapi.JSONEXTRACTOR,
|
|
|
|
|
Config: &jcfg,
|
|
|
|
|
RequiredQueries: &[]types.UUID{
|
|
|
|
|
contextID,
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.NotNil(t, idRes)
|
|
|
|
|
assert.NotNil(t, idRes.JSON201)
|
|
|
|
|
jsonID := idRes.JSON201.Id
|
|
|
|
|
|
|
|
|
|
queryRes, err := client.GetQueryWithResponse(ctx, jsonID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.Equal(t, jsonID, queryRes.JSON200.Id)
|
|
|
|
|
assert.Equal(t, queryapi.JSONEXTRACTOR, queryRes.JSON200.Type)
|
|
|
|
|
assert.Equal(t, int32(1), queryRes.JSON200.ActiveVersion)
|
|
|
|
|
assert.Equal(t, int32(1), queryRes.JSON200.LatestVersion)
|
|
|
|
|
assert.Equal(t, jcfg, *queryRes.JSON200.Config)
|
|
|
|
|
assert.ElementsMatch(t, []types.UUID{contextID}, *queryRes.JSON200.RequiredQueries)
|
2025-01-13 15:02:43 +00:00
|
|
|
})
|
|
|
|
|
}
|