package endtoend_test import ( "regexp" "testing" "queryorchestration/internal/test" queryapi "queryorchestration/pkg/queryAPI" "github.com/stretchr/testify/require" "github.com/oapi-codegen/runtime/types" "github.com/stretchr/testify/assert" ) func TestQueryAPI(t *testing.T) { 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) }) t.Run("create and get query", func(t *testing.T) { ctx := t.Context() 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) 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) }) t.Run("update query", func(t *testing.T) { ctx := t.Context() 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) test.AssertMessageBody(t, cfg, c.Dependencies.QueueURLs[test.QueryVersionSyncRunnerName], regexp.MustCompile(`{"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(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) }) t.Run("multiple dependent queries", func(t *testing.T) { ctx := t.Context() 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) }) }