package repository_test import ( "context" "log" "os" "path" "queryorchestration/internal/database/repository" "queryorchestration/internal/serviceconfig" "queryorchestration/internal/test" "testing" "github.com/jackc/pgx/v5/pgtype" "github.com/stretchr/testify/assert" ) func TestResults(t *testing.T) { if testing.Short() { t.Skip("Skipping long test in short mode") } ctx := context.Background() cfg := &serviceconfig.BaseConfig{} test.SetCfgProvider(t, cfg) cfg.SetBasePath(path.Join(os.Getenv("PWD"), "../../..")) _, cleanup := test.CreateDB(t, ctx, &test.CreateDatabaseConfig{ Cfg: cfg, RunMigrations: true, }) defer cleanup() queries := cfg.GetDBQueries() jsonQueryID, err := queries.CreateQuery(ctx, repository.Querytype(repository.QuerytypeJsonExtractor)) assert.NoError(t, err) clientId, err := queries.CreateClient(ctx, "example_client") assert.NoError(t, err) jobId, err := queries.CreateJob(ctx, clientId) assert.NoError(t, err) documentID, err := queries.CreateDocument(ctx, &repository.CreateDocumentParams{ Jobid: jobId, Hash: "example_hash", }) assert.NoError(t, err) jsonQuery, err := queries.GetQuery(ctx, jsonQueryID) assert.NoError(t, err) cleanVersion := int32(1) textVersion := int32(1) jsonResultValue := "example_value" err = queries.SetResult(ctx, &repository.SetResultParams{ Queryid: jsonQueryID, Documentid: documentID, Value: jsonResultValue, Cleanversion: cleanVersion, Textversion: textVersion, Queryversion: jsonQuery.Activeversion, }) assert.NoError(t, err) res, err := queries.GetResultValueWithVersion(ctx, &repository.GetResultValueWithVersionParams{ Queryid: jsonQueryID, Queryversion: jsonQuery.Activeversion, Documentid: documentID, Cleanversion: cleanVersion, Textversion: textVersion, }) assert.NoError(t, err) assert.EqualExportedValues(t, jsonResultValue, res.Value) } func TestResultValues(t *testing.T) { if testing.Short() { t.Skip("Skipping long test in short mode") } ctx := context.Background() cfg := &serviceconfig.BaseConfig{} test.SetCfgProvider(t, cfg) cfg.SetBasePath(path.Join(os.Getenv("PWD"), "../../..")) _, cleanup := test.CreateDB(t, ctx, &test.CreateDatabaseConfig{ Cfg: cfg, RunMigrations: true, }) defer cleanup() queries := cfg.GetDBQueries() jsonQueryID, err := queries.CreateQuery(ctx, repository.Querytype(repository.QuerytypeJsonExtractor)) assert.NoError(t, err) clientId, err := queries.CreateClient(ctx, "example_client") assert.NoError(t, err) jobId, err := queries.CreateJob(ctx, clientId) assert.NoError(t, err) documentID, err := queries.CreateDocument(ctx, &repository.CreateDocumentParams{ Jobid: jobId, Hash: "example_hash", }) assert.NoError(t, err) documentTwoID, err := queries.CreateDocument(ctx, &repository.CreateDocumentParams{ Jobid: jobId, Hash: "example_hash_two", }) assert.NoError(t, err) contextQueryID, err := queries.CreateQuery(ctx, repository.Querytype(repository.QuerytypeContextFull)) assert.NoError(t, err) jsonVersion := int32(1) err = queries.AddRequiredQuery(ctx, &repository.AddRequiredQueryParams{ Queryid: jsonQueryID, Requiredqueryid: contextQueryID, Addedversion: jsonVersion, }) assert.NoError(t, err) contextQuery, err := queries.GetQuery(ctx, contextQueryID) assert.NoError(t, err) qResults, err := queries.ListQueryRequirementValues(ctx, &repository.ListQueryRequirementValuesParams{ Queryid: jsonQueryID, Documentid: documentID, Version: jsonVersion, }) assert.NoError(t, err) assert.Len(t, qResults, 0) qResults, err = queries.ListQueryRequirementValues(ctx, &repository.ListQueryRequirementValuesParams{ Queryid: jsonQueryID, Documentid: documentTwoID, Version: jsonVersion, }) assert.NoError(t, err) assert.Len(t, qResults, 0) result := repository.SetResultParams{ Queryid: contextQueryID, Documentid: documentID, Value: "context_value_1", Cleanversion: 1, Textversion: 2, Queryversion: contextQuery.Activeversion, } err = queries.SetResult(ctx, &result) assert.NoError(t, err) qResults, err = queries.ListQueryRequirementValues(ctx, &repository.ListQueryRequirementValuesParams{ Queryid: jsonQueryID, Documentid: documentID, Version: jsonVersion, }) assert.NoError(t, err) assert.Len(t, qResults, 1) assert.EqualExportedValues(t, []*repository.ListQueryRequirementValuesRow{ { Queryid: contextQueryID, Type: repository.QuerytypeContextFull, Value: "context_value_1", }, }, qResults) qResults, err = queries.ListQueryRequirementValues(ctx, &repository.ListQueryRequirementValuesParams{ Queryid: jsonQueryID, Documentid: documentTwoID, Version: jsonVersion, }) assert.NoError(t, err) assert.Len(t, qResults, 0) err = queries.SetResult(ctx, &repository.SetResultParams{ Queryid: contextQueryID, Documentid: documentID, Value: "context_value_2", Cleanversion: 1, Textversion: 2, Queryversion: contextQuery.Activeversion - 1, }) assert.NoError(t, err) qResults, err = queries.ListQueryRequirementValues(ctx, &repository.ListQueryRequirementValuesParams{ Queryid: jsonQueryID, Documentid: documentID, Version: jsonVersion, }) assert.NoError(t, err) assert.Len(t, qResults, 1) assert.EqualExportedValues(t, []*repository.ListQueryRequirementValuesRow{ { Queryid: contextQueryID, Type: repository.QuerytypeContextFull, Value: "context_value_1", }, }, qResults) err = queries.SetResult(ctx, &repository.SetResultParams{ Queryid: contextQueryID, Documentid: documentID, Value: "context_value_3", Cleanversion: 2, Textversion: 2, Queryversion: contextQuery.Activeversion, }) assert.NoError(t, err) qResults, err = queries.ListQueryRequirementValues(ctx, &repository.ListQueryRequirementValuesParams{ Queryid: jsonQueryID, Documentid: documentID, Version: jsonVersion, }) assert.NoError(t, err) assert.Len(t, qResults, 1) assert.EqualExportedValues(t, []*repository.ListQueryRequirementValuesRow{ { Queryid: contextQueryID, Type: repository.QuerytypeContextFull, Value: "context_value_3", }, }, qResults) err = queries.SetResult(ctx, &repository.SetResultParams{ Queryid: jsonQueryID, Documentid: documentID, Value: "json_value_1", Cleanversion: 1, Textversion: 2, Queryversion: jsonVersion, }) assert.NoError(t, err) qResults, err = queries.ListQueryRequirementValues(ctx, &repository.ListQueryRequirementValuesParams{ Queryid: jsonQueryID, Documentid: documentID, Version: jsonVersion, }) for _, r := range qResults { log.Print(r) } assert.NoError(t, err) assert.Len(t, qResults, 1) assert.EqualExportedValues(t, []*repository.ListQueryRequirementValuesRow{ { Queryid: contextQueryID, Type: repository.QuerytypeContextFull, Value: "context_value_3", }, }, qResults) } func TestUnsyncedNoDepsQueries(t *testing.T) { if testing.Short() { t.Skip("Skipping long test in short mode") } ctx := context.Background() cfg := &serviceconfig.BaseConfig{} test.SetCfgProvider(t, cfg) cfg.SetBasePath(path.Join(os.Getenv("PWD"), "../../..")) _, cleanup := test.CreateDB(t, ctx, &test.CreateDatabaseConfig{ Cfg: cfg, RunMigrations: true, }) defer cleanup() queries := cfg.GetDBQueries() clientId, err := queries.CreateClient(ctx, "example_client") assert.NoError(t, err) jobId, err := queries.CreateJob(ctx, clientId) assert.NoError(t, err) collectorId, err := queries.CreateCollector(ctx, jobId) assert.NoError(t, err) documentID, err := queries.CreateDocument(ctx, &repository.CreateDocumentParams{ Jobid: jobId, Hash: "example_hash", }) assert.NoError(t, err) documentTwoID, err := queries.CreateDocument(ctx, &repository.CreateDocumentParams{ Jobid: jobId, Hash: "example_hash_two", }) assert.NoError(t, err) contextQueryID, err := queries.CreateQuery(ctx, repository.Querytype(repository.QuerytypeContextFull)) assert.NoError(t, err) jsonQueryID, err := queries.CreateQuery(ctx, repository.Querytype(repository.QuerytypeJsonExtractor)) assert.NoError(t, err) err = queries.AddRequiredQuery(ctx, &repository.AddRequiredQueryParams{ Queryid: jsonQueryID, Requiredqueryid: contextQueryID, Addedversion: 1, }) assert.NoError(t, err) err = queries.AddCollectorQuery(ctx, &repository.AddCollectorQueryParams{ Collectorid: collectorId, Name: "example_name", Queryid: jsonQueryID, Addedversion: 1, }) assert.NoError(t, err) qs, err := queries.ListUnsyncedNoDepsQueriesByDocId(ctx, documentID) assert.NoError(t, err) assert.Len(t, qs, 1) assert.ElementsMatch(t, []pgtype.UUID{contextQueryID}, qs) qs, err = queries.ListUnsyncedNoDepsQueriesByDocId(ctx, documentTwoID) assert.NoError(t, err) assert.Len(t, qs, 1) assert.ElementsMatch(t, []pgtype.UUID{contextQueryID}, qs) err = queries.SetResult(ctx, &repository.SetResultParams{ Queryid: contextQueryID, Documentid: documentID, Value: "context_value", Cleanversion: 1, Textversion: 2, Queryversion: 1, }) assert.NoError(t, err) qs, err = queries.ListUnsyncedNoDepsQueriesByDocId(ctx, documentID) assert.NoError(t, err) assert.Len(t, qs, 1) assert.ElementsMatch(t, []pgtype.UUID{jsonQueryID}, qs) qs, err = queries.ListUnsyncedNoDepsQueriesByDocId(ctx, documentTwoID) assert.NoError(t, err) assert.Len(t, qs, 1) assert.ElementsMatch(t, []pgtype.UUID{contextQueryID}, qs) err = queries.UpdateQuery(ctx, &repository.UpdateQueryParams{ Latestversion: 2, Activeversion: 2, ID: contextQueryID, }) assert.NoError(t, err) qs, err = queries.ListUnsyncedNoDepsQueriesByDocId(ctx, documentID) assert.NoError(t, err) assert.Len(t, qs, 1) assert.ElementsMatch(t, []pgtype.UUID{contextQueryID}, qs) err = queries.SetResult(ctx, &repository.SetResultParams{ Queryid: contextQueryID, Documentid: documentID, Value: "context_value", Cleanversion: 1, Textversion: 2, Queryversion: 2, }) assert.NoError(t, err) err = queries.SetResult(ctx, &repository.SetResultParams{ Queryid: jsonQueryID, Documentid: documentID, Value: "context_value", Cleanversion: 1, Textversion: 2, Queryversion: 1, }) assert.NoError(t, err) qs, err = queries.ListUnsyncedNoDepsQueriesByDocId(ctx, documentID) assert.NoError(t, err) assert.Len(t, qs, 0) err = queries.UpdateQuery(ctx, &repository.UpdateQueryParams{ Latestversion: 2, Activeversion: 2, ID: jsonQueryID, }) assert.NoError(t, err) qs, err = queries.ListUnsyncedNoDepsQueriesByDocId(ctx, documentID) assert.NoError(t, err) assert.Len(t, qs, 1) assert.ElementsMatch(t, []pgtype.UUID{jsonQueryID}, qs) err = queries.SetResult(ctx, &repository.SetResultParams{ Queryid: jsonQueryID, Documentid: documentID, Value: "context_value", Cleanversion: 1, Textversion: 2, Queryversion: 2, }) assert.NoError(t, err) qs, err = queries.ListUnsyncedNoDepsQueriesByDocId(ctx, documentID) assert.NoError(t, err) assert.Len(t, qs, 0) err = queries.UpdateQuery(ctx, &repository.UpdateQueryParams{ Latestversion: 3, Activeversion: 3, ID: contextQueryID, }) assert.NoError(t, err) qs, err = queries.ListUnsyncedNoDepsQueriesByDocId(ctx, documentID) assert.NoError(t, err) assert.Len(t, qs, 1) assert.ElementsMatch(t, []pgtype.UUID{contextQueryID}, qs) }