2025-03-17 18:14:15 +00:00
|
|
|
package repository_test
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"testing"
|
2025-04-08 12:44:09 +00:00
|
|
|
"time"
|
2025-03-17 18:14:15 +00:00
|
|
|
|
|
|
|
|
"queryorchestration/internal/database/repository"
|
|
|
|
|
"queryorchestration/internal/serviceconfig"
|
|
|
|
|
"queryorchestration/internal/test"
|
|
|
|
|
|
2025-04-23 17:51:44 +00:00
|
|
|
"github.com/google/uuid"
|
2025-04-08 12:44:09 +00:00
|
|
|
"github.com/jackc/pgx/v5/pgtype"
|
2025-03-17 18:14:15 +00:00
|
|
|
"github.com/stretchr/testify/assert"
|
2025-03-19 11:54:14 +00:00
|
|
|
"github.com/stretchr/testify/require"
|
2025-03-17 18:14:15 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestListClientDocumentIDs(t *testing.T) {
|
2025-04-22 14:40:16 +00:00
|
|
|
t.Parallel()
|
2025-03-17 18:14:15 +00:00
|
|
|
if testing.Short() {
|
|
|
|
|
t.Skip("Skipping long test in short mode")
|
|
|
|
|
}
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
|
|
|
|
cfg := &serviceconfig.BaseConfig{}
|
2025-04-22 14:40:16 +00:00
|
|
|
net := test.DepNetwork.Get(t, ctx)
|
2025-04-25 17:02:50 +00:00
|
|
|
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{})
|
2025-03-17 18:14:15 +00:00
|
|
|
|
|
|
|
|
queries := cfg.GetDBQueries()
|
|
|
|
|
|
2025-04-02 18:50:03 +00:00
|
|
|
id := "EXAMPLE"
|
|
|
|
|
err := queries.CreateClient(ctx, &repository.CreateClientParams{
|
|
|
|
|
Name: "example_client",
|
|
|
|
|
ID: id,
|
2025-03-17 18:14:15 +00:00
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
|
|
|
|
|
ids, err := queries.ListDocumentIDsBatch(ctx, &repository.ListDocumentIDsBatchParams{
|
|
|
|
|
Clientid: id,
|
|
|
|
|
Batchsize: 1,
|
|
|
|
|
Pageoffset: 0,
|
|
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
assert.Len(t, ids, 0)
|
|
|
|
|
|
|
|
|
|
docOne, err := queries.CreateDocument(ctx, &repository.CreateDocumentParams{
|
|
|
|
|
Clientid: id,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
|
|
|
|
|
ids, err = queries.ListDocumentIDsBatch(ctx, &repository.ListDocumentIDsBatchParams{
|
|
|
|
|
Clientid: id,
|
|
|
|
|
Batchsize: 1,
|
|
|
|
|
Pageoffset: 0,
|
|
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
assert.Len(t, ids, 1)
|
|
|
|
|
total := int64(1)
|
|
|
|
|
assert.ElementsMatch(t, []*repository.ListDocumentIDsBatchRow{
|
|
|
|
|
{
|
2025-03-20 11:06:41 +00:00
|
|
|
ID: &docOne,
|
2025-03-17 18:14:15 +00:00
|
|
|
Totalcount: &total,
|
|
|
|
|
},
|
|
|
|
|
}, ids)
|
|
|
|
|
|
|
|
|
|
docTwo, err := queries.CreateDocument(ctx, &repository.CreateDocumentParams{
|
|
|
|
|
Clientid: id,
|
|
|
|
|
Hash: "example_hash_two",
|
|
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
|
|
|
|
|
ids, err = queries.ListDocumentIDsBatch(ctx, &repository.ListDocumentIDsBatchParams{
|
|
|
|
|
Clientid: id,
|
|
|
|
|
Batchsize: 1,
|
|
|
|
|
Pageoffset: 0,
|
|
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
assert.Len(t, ids, 1)
|
|
|
|
|
total = int64(2)
|
|
|
|
|
assert.ElementsMatch(t, []*repository.ListDocumentIDsBatchRow{
|
|
|
|
|
{
|
2025-03-20 11:06:41 +00:00
|
|
|
ID: &docOne,
|
2025-03-17 18:14:15 +00:00
|
|
|
Totalcount: &total,
|
|
|
|
|
},
|
|
|
|
|
}, ids)
|
|
|
|
|
|
|
|
|
|
ids, err = queries.ListDocumentIDsBatch(ctx, &repository.ListDocumentIDsBatchParams{
|
|
|
|
|
Clientid: id,
|
|
|
|
|
Batchsize: 1,
|
|
|
|
|
Pageoffset: 1,
|
|
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
assert.Len(t, ids, 1)
|
|
|
|
|
assert.ElementsMatch(t, []*repository.ListDocumentIDsBatchRow{
|
|
|
|
|
{
|
2025-03-20 11:06:41 +00:00
|
|
|
ID: &docTwo,
|
2025-03-17 18:14:15 +00:00
|
|
|
Totalcount: &total,
|
|
|
|
|
},
|
|
|
|
|
}, ids)
|
|
|
|
|
|
|
|
|
|
ids, err = queries.ListDocumentIDsBatch(ctx, &repository.ListDocumentIDsBatchParams{
|
|
|
|
|
Clientid: id,
|
|
|
|
|
Batchsize: 2,
|
|
|
|
|
Pageoffset: 0,
|
|
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
assert.Len(t, ids, 2)
|
|
|
|
|
assert.ElementsMatch(t, []*repository.ListDocumentIDsBatchRow{
|
|
|
|
|
{
|
2025-03-20 11:06:41 +00:00
|
|
|
ID: &docOne,
|
2025-03-17 18:14:15 +00:00
|
|
|
Totalcount: &total,
|
|
|
|
|
},
|
|
|
|
|
{
|
2025-03-20 11:06:41 +00:00
|
|
|
ID: &docTwo,
|
2025-03-17 18:14:15 +00:00
|
|
|
Totalcount: &total,
|
|
|
|
|
},
|
|
|
|
|
}, ids)
|
|
|
|
|
}
|
|
|
|
|
|
2025-04-23 17:51:44 +00:00
|
|
|
func createDependentQueries(t testing.TB, ctx context.Context, queries *repository.Queries) (uuid.UUID, uuid.UUID) {
|
2025-03-17 18:14:15 +00:00
|
|
|
contextQueryID, err := queries.CreateQuery(ctx, repository.Querytype(repository.QuerytypeContextFull))
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
contextQueryVersion, err := queries.AddLatestQueryVersion(ctx, contextQueryID)
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
err = queries.AddActiveQueryVersion(ctx, &repository.AddActiveQueryVersionParams{
|
|
|
|
|
Queryid: contextQueryID,
|
|
|
|
|
Versionid: contextQueryVersion,
|
|
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
jsonQueryID, err := queries.CreateQuery(ctx, repository.Querytype(repository.QuerytypeJsonExtractor))
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
jsonQueryVersion, err := queries.AddLatestQueryVersion(ctx, jsonQueryID)
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
err = queries.AddActiveQueryVersion(ctx, &repository.AddActiveQueryVersionParams{
|
|
|
|
|
Queryid: jsonQueryID,
|
|
|
|
|
Versionid: jsonQueryVersion,
|
|
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
err = queries.AddRequiredQuery(ctx, &repository.AddRequiredQueryParams{
|
|
|
|
|
Queryid: jsonQueryID,
|
|
|
|
|
Requiredqueryid: contextQueryID,
|
|
|
|
|
Addedversion: jsonQueryVersion,
|
|
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
|
2025-04-23 17:51:44 +00:00
|
|
|
return contextQueryID, jsonQueryID
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func createClientWithCollector(t testing.TB, ctx context.Context, queries *repository.Queries) string {
|
2025-04-02 18:50:03 +00:00
|
|
|
clientId := "EXAMPLE"
|
2025-04-23 17:51:44 +00:00
|
|
|
err := queries.CreateClient(ctx, &repository.CreateClientParams{
|
2025-04-02 18:50:03 +00:00
|
|
|
Name: "example_client",
|
|
|
|
|
ID: clientId,
|
2025-03-17 18:14:15 +00:00
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
|
|
|
|
|
collectorVersion, err := queries.AddLatestCollectorVersion(ctx, clientId)
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
err = queries.SetActiveCollectorVersion(ctx, &repository.SetActiveCollectorVersionParams{
|
|
|
|
|
Versionid: collectorVersion,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
|
2025-04-23 17:51:44 +00:00
|
|
|
return clientId
|
|
|
|
|
}
|
2025-03-17 18:14:15 +00:00
|
|
|
|
2025-04-23 17:51:44 +00:00
|
|
|
func TestClientSync(t *testing.T) {
|
|
|
|
|
if testing.Short() {
|
|
|
|
|
t.Skip("Skipping long test in short mode")
|
|
|
|
|
}
|
2025-03-17 18:14:15 +00:00
|
|
|
|
|
|
|
|
t.Run("document fail clean", func(t *testing.T) {
|
2025-04-23 17:51:44 +00:00
|
|
|
t.Parallel()
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
|
|
|
|
cfg := &serviceconfig.BaseConfig{}
|
|
|
|
|
net := test.DepNetwork.Get(t, ctx)
|
2025-04-25 17:02:50 +00:00
|
|
|
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{})
|
2025-04-23 17:51:44 +00:00
|
|
|
|
|
|
|
|
queries := cfg.GetDBQueries()
|
|
|
|
|
|
|
|
|
|
_, jsonQueryID := createDependentQueries(t, ctx, queries)
|
|
|
|
|
clientId := createClientWithCollector(t, ctx, queries)
|
|
|
|
|
|
|
|
|
|
err := queries.AddCollectorQuery(ctx, &repository.AddCollectorQueryParams{
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Queryid: jsonQueryID,
|
|
|
|
|
Addedversion: 1,
|
|
|
|
|
Name: "first_key",
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err := queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.True(t, isSynced)
|
|
|
|
|
|
2025-03-17 18:14:15 +00:00
|
|
|
documentID, err := queries.CreateDocument(ctx, &repository.CreateDocumentParams{
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_noclean",
|
|
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
|
2025-04-02 18:50:03 +00:00
|
|
|
docExternal, err := queries.GetDocumentExternal(ctx, documentID)
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
2025-04-02 18:50:03 +00:00
|
|
|
Clientid: clientId,
|
2025-03-17 18:14:15 +00:00
|
|
|
Hash: "example_noclean",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
2025-03-20 11:06:41 +00:00
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
assert.False(t, isSynced)
|
|
|
|
|
|
|
|
|
|
cleanid, err := queries.AddDocumentClean(ctx, &repository.AddDocumentCleanParams{
|
|
|
|
|
Documentid: documentID,
|
|
|
|
|
Fail: repository.NullCleanfailtype{
|
|
|
|
|
Valid: true,
|
|
|
|
|
Cleanfailtype: repository.CleanfailtypeInvalidMimetype,
|
|
|
|
|
},
|
|
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
err = queries.AddDocumentCleanEntry(ctx, &repository.AddDocumentCleanEntryParams{
|
|
|
|
|
Cleanid: cleanid,
|
|
|
|
|
Version: 1,
|
|
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
|
2025-03-20 11:06:41 +00:00
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
assert.True(t, isSynced)
|
2025-04-02 18:50:03 +00:00
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
2025-04-02 18:50:03 +00:00
|
|
|
Clientid: clientId,
|
2025-03-17 18:14:15 +00:00
|
|
|
Hash: "example_noclean",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
})
|
|
|
|
|
|
2025-04-28 00:12:29 +00:00
|
|
|
t.Run("standard extraction", func(t *testing.T) {
|
2025-04-23 17:51:44 +00:00
|
|
|
t.Parallel()
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
|
|
|
|
cfg := &serviceconfig.BaseConfig{}
|
|
|
|
|
net := test.DepNetwork.Get(t, ctx)
|
2025-04-25 17:02:50 +00:00
|
|
|
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{})
|
2025-04-23 17:51:44 +00:00
|
|
|
|
|
|
|
|
queries := cfg.GetDBQueries()
|
|
|
|
|
|
|
|
|
|
contextQueryID, jsonQueryID := createDependentQueries(t, ctx, queries)
|
|
|
|
|
clientId := createClientWithCollector(t, ctx, queries)
|
|
|
|
|
|
|
|
|
|
err := queries.AddCollectorQuery(ctx, &repository.AddCollectorQueryParams{
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Queryid: jsonQueryID,
|
|
|
|
|
Addedversion: 1,
|
|
|
|
|
Name: "first_key",
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err := queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.True(t, isSynced)
|
|
|
|
|
|
|
|
|
|
bucket := "example_bucket"
|
|
|
|
|
|
2025-03-17 18:14:15 +00:00
|
|
|
documentID, err := queries.CreateDocument(ctx, &repository.CreateDocumentParams{
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
|
2025-03-20 11:06:41 +00:00
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
assert.False(t, isSynced)
|
|
|
|
|
|
2025-04-02 18:50:03 +00:00
|
|
|
docExternal, err := queries.GetDocumentExternal(ctx, documentID)
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
2025-04-02 18:50:03 +00:00
|
|
|
Clientid: clientId,
|
2025-03-17 18:14:15 +00:00
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
key := "example_key"
|
2025-04-02 18:50:03 +00:00
|
|
|
hash := "hahssh"
|
2025-03-17 18:14:15 +00:00
|
|
|
cleanId, err := queries.AddDocumentClean(ctx, &repository.AddDocumentCleanParams{
|
|
|
|
|
Documentid: documentID,
|
|
|
|
|
Bucket: &bucket,
|
|
|
|
|
Key: &key,
|
2025-04-02 18:50:03 +00:00
|
|
|
Hash: &hash,
|
2025-03-17 18:14:15 +00:00
|
|
|
Mimetype: repository.NullCleanmimetype{
|
|
|
|
|
Valid: true,
|
|
|
|
|
Cleanmimetype: repository.CleanmimetypeApplicationPdf,
|
|
|
|
|
},
|
|
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
err = queries.AddDocumentCleanEntry(ctx, &repository.AddDocumentCleanEntryParams{
|
|
|
|
|
Cleanid: cleanId,
|
|
|
|
|
Version: 1,
|
|
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
|
2025-03-20 11:06:41 +00:00
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
assert.False(t, isSynced)
|
2025-04-02 18:50:03 +00:00
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
2025-04-02 18:50:03 +00:00
|
|
|
Clientid: clientId,
|
2025-03-17 18:14:15 +00:00
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
2025-04-22 14:40:16 +00:00
|
|
|
textId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
2025-04-02 18:50:03 +00:00
|
|
|
Cleanid: cleanId,
|
2025-04-08 12:44:09 +00:00
|
|
|
Part: 0,
|
|
|
|
|
Createdat: pgtype.Timestamp{
|
|
|
|
|
Time: time.Now().UTC(),
|
|
|
|
|
Valid: true,
|
|
|
|
|
},
|
2025-04-02 18:50:03 +00:00
|
|
|
Bucket: "hi",
|
|
|
|
|
Key: "hello",
|
|
|
|
|
Hash: "example",
|
2025-03-20 11:06:41 +00:00
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
err = queries.AddDocumentTextEntry(ctx, &repository.AddDocumentTextEntryParams{
|
2025-04-22 14:40:16 +00:00
|
|
|
Version: 1,
|
|
|
|
|
Textid: textId,
|
2025-03-17 18:14:15 +00:00
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
|
2025-03-20 11:06:41 +00:00
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
assert.False(t, isSynced)
|
2025-04-02 18:50:03 +00:00
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
2025-04-02 18:50:03 +00:00
|
|
|
Clientid: clientId,
|
2025-03-17 18:14:15 +00:00
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
2025-04-28 00:12:29 +00:00
|
|
|
contextResultId, err := queries.AddResult(ctx, &repository.AddResultParams{
|
|
|
|
|
Queryid: contextQueryID,
|
|
|
|
|
Value: "example_context",
|
|
|
|
|
Textentryid: textId,
|
|
|
|
|
Queryversion: 1,
|
2025-03-17 18:14:15 +00:00
|
|
|
})
|
2025-04-28 00:12:29 +00:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.False(t, isSynced)
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
jsonResultId, err := queries.AddResult(ctx, &repository.AddResultParams{
|
|
|
|
|
Queryid: jsonQueryID,
|
|
|
|
|
Value: "json_value",
|
|
|
|
|
Textentryid: textId,
|
|
|
|
|
Queryversion: 1,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.False(t, isSynced)
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
err = queries.AddResultDependency(ctx, &repository.AddResultDependencyParams{
|
|
|
|
|
Resultid: jsonResultId,
|
|
|
|
|
Requiredresultid: contextResultId,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.True(t, isSynced)
|
|
|
|
|
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": "json_value"}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("update upstream query", func(t *testing.T) {
|
|
|
|
|
t.Parallel()
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
|
|
|
|
cfg := &serviceconfig.BaseConfig{}
|
|
|
|
|
net := test.DepNetwork.Get(t, ctx)
|
|
|
|
|
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{})
|
|
|
|
|
|
|
|
|
|
queries := cfg.GetDBQueries()
|
|
|
|
|
|
|
|
|
|
contextQueryID, jsonQueryID := createDependentQueries(t, ctx, queries)
|
|
|
|
|
clientId := createClientWithCollector(t, ctx, queries)
|
|
|
|
|
documentID, _, textId := createDocumentWithCollectorAndResults(t, ctx, queries, clientId, contextQueryID, jsonQueryID)
|
2025-03-17 18:14:15 +00:00
|
|
|
|
|
|
|
|
contextLatestVersion, err := queries.AddLatestQueryVersion(ctx, contextQueryID)
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
err = queries.AddActiveQueryVersion(ctx, &repository.AddActiveQueryVersionParams{
|
|
|
|
|
Queryid: contextQueryID,
|
|
|
|
|
Versionid: contextLatestVersion,
|
|
|
|
|
})
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
|
2025-04-28 00:12:29 +00:00
|
|
|
isSynced, err := queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.False(t, isSynced)
|
|
|
|
|
docExternal, err := queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
contextResultId, err := queries.AddResult(ctx, &repository.AddResultParams{
|
|
|
|
|
Queryid: contextQueryID,
|
|
|
|
|
Value: "context_version_2",
|
|
|
|
|
Textentryid: textId,
|
|
|
|
|
Queryversion: contextLatestVersion,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.False(t, isSynced)
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
jsonResultId, err := queries.AddResult(ctx, &repository.AddResultParams{
|
|
|
|
|
Queryid: jsonQueryID,
|
|
|
|
|
Value: "updated_context_value",
|
|
|
|
|
Textentryid: textId,
|
|
|
|
|
Queryversion: 1,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.False(t, isSynced)
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
err = queries.AddResultDependency(ctx, &repository.AddResultDependencyParams{
|
|
|
|
|
Resultid: jsonResultId,
|
|
|
|
|
Requiredresultid: contextResultId,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.True(t, isSynced)
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": "updated_context_value"}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("update text extry", func(t *testing.T) {
|
|
|
|
|
t.Parallel()
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
|
|
|
|
cfg := &serviceconfig.BaseConfig{}
|
|
|
|
|
net := test.DepNetwork.Get(t, ctx)
|
|
|
|
|
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{})
|
|
|
|
|
|
|
|
|
|
queries := cfg.GetDBQueries()
|
|
|
|
|
|
|
|
|
|
contextQueryID, jsonQueryID := createDependentQueries(t, ctx, queries)
|
|
|
|
|
clientId := createClientWithCollector(t, ctx, queries)
|
|
|
|
|
documentID, cleanId, _ := createDocumentWithCollectorAndResults(t, ctx, queries, clientId, contextQueryID, jsonQueryID)
|
|
|
|
|
|
|
|
|
|
textId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
|
|
|
|
Bucket: "hi",
|
|
|
|
|
Key: "hello",
|
|
|
|
|
Part: 0,
|
|
|
|
|
Createdat: pgtype.Timestamp{
|
|
|
|
|
Time: time.Now().UTC(),
|
|
|
|
|
Valid: true,
|
|
|
|
|
},
|
|
|
|
|
Cleanid: cleanId,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
err = queries.AddDocumentTextEntry(ctx, &repository.AddDocumentTextEntryParams{
|
|
|
|
|
Version: 1,
|
|
|
|
|
Textid: textId,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err := queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.False(t, isSynced)
|
|
|
|
|
docExternal, err := queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
contextResultID, err := queries.AddResult(ctx, &repository.AddResultParams{
|
|
|
|
|
Queryid: contextQueryID,
|
|
|
|
|
Value: "updated_text_context",
|
|
|
|
|
Textentryid: textId,
|
|
|
|
|
Queryversion: 1,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.False(t, isSynced)
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
jsonResultID, err := queries.AddResult(ctx, &repository.AddResultParams{
|
|
|
|
|
Queryid: jsonQueryID,
|
|
|
|
|
Value: "updated_text_json",
|
|
|
|
|
Textentryid: textId,
|
|
|
|
|
Queryversion: 1,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
2025-03-20 11:06:41 +00:00
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
assert.False(t, isSynced)
|
2025-04-02 18:50:03 +00:00
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
2025-03-19 11:54:14 +00:00
|
|
|
require.NoError(t, err)
|
2025-03-17 18:14:15 +00:00
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
2025-04-02 18:50:03 +00:00
|
|
|
Clientid: clientId,
|
2025-03-17 18:14:15 +00:00
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
2025-04-28 00:12:29 +00:00
|
|
|
err = queries.AddResultDependency(ctx, &repository.AddResultDependencyParams{
|
|
|
|
|
Resultid: jsonResultID,
|
|
|
|
|
Requiredresultid: contextResultID,
|
2025-03-17 18:14:15 +00:00
|
|
|
})
|
2025-04-28 00:12:29 +00:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.True(t, isSynced)
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": "updated_text_json"}`),
|
|
|
|
|
}, docExternal)
|
2025-03-17 18:14:15 +00:00
|
|
|
})
|
2025-04-28 00:12:29 +00:00
|
|
|
|
|
|
|
|
t.Run("update clean entry", func(t *testing.T) {
|
|
|
|
|
t.Parallel()
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
|
|
|
|
cfg := &serviceconfig.BaseConfig{}
|
|
|
|
|
net := test.DepNetwork.Get(t, ctx)
|
|
|
|
|
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{})
|
|
|
|
|
|
|
|
|
|
queries := cfg.GetDBQueries()
|
|
|
|
|
|
|
|
|
|
contextQueryID, jsonQueryID := createDependentQueries(t, ctx, queries)
|
|
|
|
|
clientId := createClientWithCollector(t, ctx, queries)
|
|
|
|
|
documentID, _, _ := createDocumentWithCollectorAndResults(t, ctx, queries, clientId, contextQueryID, jsonQueryID)
|
|
|
|
|
|
|
|
|
|
bucket := "cu"
|
|
|
|
|
key := "kk"
|
|
|
|
|
hash := "hash"
|
|
|
|
|
cleanthreeid, err := queries.AddDocumentClean(ctx, &repository.AddDocumentCleanParams{
|
|
|
|
|
Documentid: documentID,
|
|
|
|
|
Bucket: &bucket,
|
|
|
|
|
Key: &key,
|
|
|
|
|
Hash: &hash,
|
|
|
|
|
Mimetype: repository.NullCleanmimetype{
|
|
|
|
|
Valid: true,
|
|
|
|
|
Cleanmimetype: repository.CleanmimetypeApplicationPdf,
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
err = queries.AddDocumentCleanEntry(ctx, &repository.AddDocumentCleanEntryParams{
|
|
|
|
|
Cleanid: cleanthreeid,
|
|
|
|
|
Version: 1,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err := queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.False(t, isSynced)
|
|
|
|
|
docExternal, err := queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
textThreeId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
|
|
|
|
Bucket: "hi",
|
|
|
|
|
Key: "hello",
|
|
|
|
|
Part: 0,
|
|
|
|
|
Createdat: pgtype.Timestamp{
|
|
|
|
|
Time: time.Now().UTC(),
|
|
|
|
|
Valid: true,
|
|
|
|
|
},
|
|
|
|
|
Cleanid: cleanthreeid,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
err = queries.AddDocumentTextEntry(ctx, &repository.AddDocumentTextEntryParams{
|
|
|
|
|
Version: 1,
|
|
|
|
|
Textid: textThreeId,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.False(t, isSynced)
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
contextResultId, err := queries.AddResult(ctx, &repository.AddResultParams{
|
|
|
|
|
Queryid: contextQueryID,
|
|
|
|
|
Value: "update_clean_context",
|
|
|
|
|
Textentryid: textThreeId,
|
|
|
|
|
Queryversion: 1,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.False(t, isSynced)
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
jsonResultID, err := queries.AddResult(ctx, &repository.AddResultParams{
|
|
|
|
|
Queryid: jsonQueryID,
|
|
|
|
|
Value: "update_clean_json",
|
|
|
|
|
Textentryid: textThreeId,
|
|
|
|
|
Queryversion: 1,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.False(t, isSynced)
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
err = queries.AddResultDependency(ctx, &repository.AddResultDependencyParams{
|
|
|
|
|
Resultid: jsonResultID,
|
|
|
|
|
Requiredresultid: contextResultId,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.True(t, isSynced)
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": "update_clean_json"}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("change collector name", func(t *testing.T) {
|
|
|
|
|
t.Parallel()
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
|
|
|
|
cfg := &serviceconfig.BaseConfig{}
|
|
|
|
|
net := test.DepNetwork.Get(t, ctx)
|
|
|
|
|
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{})
|
|
|
|
|
|
|
|
|
|
queries := cfg.GetDBQueries()
|
|
|
|
|
|
|
|
|
|
contextQueryID, jsonQueryID := createDependentQueries(t, ctx, queries)
|
|
|
|
|
clientId := createClientWithCollector(t, ctx, queries)
|
|
|
|
|
documentID, _, _ := createDocumentWithCollectorAndResults(t, ctx, queries, clientId, contextQueryID, jsonQueryID)
|
|
|
|
|
|
|
|
|
|
latestCollectorVersion, err := queries.AddLatestCollectorVersion(ctx, clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err := queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.True(t, isSynced)
|
|
|
|
|
docExternal, err := queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": "json_value"}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
err = queries.SetActiveCollectorVersion(ctx, &repository.SetActiveCollectorVersionParams{
|
|
|
|
|
Versionid: latestCollectorVersion,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.True(t, isSynced)
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": "json_value"}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
err = queries.RemoveCollectorQuery(ctx, &repository.RemoveCollectorQueryParams{
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Queryid: jsonQueryID,
|
|
|
|
|
Removedversion: &latestCollectorVersion,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.True(t, isSynced)
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
err = queries.AddCollectorQuery(ctx, &repository.AddCollectorQueryParams{
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Queryid: jsonQueryID,
|
|
|
|
|
Addedversion: latestCollectorVersion,
|
|
|
|
|
Name: "second_key",
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.True(t, isSynced)
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"second_key": "json_value"}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("add existing query", func(t *testing.T) {
|
|
|
|
|
t.Parallel()
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
|
|
|
|
cfg := &serviceconfig.BaseConfig{}
|
|
|
|
|
net := test.DepNetwork.Get(t, ctx)
|
|
|
|
|
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{})
|
|
|
|
|
|
|
|
|
|
queries := cfg.GetDBQueries()
|
|
|
|
|
|
|
|
|
|
contextQueryID, jsonQueryID := createDependentQueries(t, ctx, queries)
|
|
|
|
|
clientId := createClientWithCollector(t, ctx, queries)
|
|
|
|
|
documentID, _, _ := createDocumentWithCollectorAndResults(t, ctx, queries, clientId, contextQueryID, jsonQueryID)
|
|
|
|
|
|
|
|
|
|
err := queries.AddCollectorQuery(ctx, &repository.AddCollectorQueryParams{
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Queryid: contextQueryID,
|
|
|
|
|
Addedversion: 1,
|
|
|
|
|
Name: "example_key",
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err := queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.True(t, isSynced)
|
|
|
|
|
docExternal, err := queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": "json_value", "example_key": "example_context"}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("add super query", func(t *testing.T) {
|
|
|
|
|
t.Parallel()
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
|
|
|
|
|
cfg := &serviceconfig.BaseConfig{}
|
|
|
|
|
net := test.DepNetwork.Get(t, ctx)
|
|
|
|
|
_ = test.CreateDB(t, ctx, cfg, net, &test.CreateDatabaseConfig{})
|
|
|
|
|
|
|
|
|
|
queries := cfg.GetDBQueries()
|
|
|
|
|
|
|
|
|
|
contextQueryID, jsonQueryID := createDependentQueries(t, ctx, queries)
|
|
|
|
|
clientId := createClientWithCollector(t, ctx, queries)
|
|
|
|
|
documentID, _, textId := createDocumentWithCollectorAndResults(t, ctx, queries, clientId, contextQueryID, jsonQueryID)
|
|
|
|
|
|
|
|
|
|
superQueryID, err := queries.CreateQuery(ctx, repository.Querytype(repository.QuerytypeJsonExtractor))
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
superQueryVersion, err := queries.AddLatestQueryVersion(ctx, superQueryID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
err = queries.AddActiveQueryVersion(ctx, &repository.AddActiveQueryVersionParams{
|
|
|
|
|
Queryid: superQueryID,
|
|
|
|
|
Versionid: superQueryVersion,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
err = queries.AddRequiredQuery(ctx, &repository.AddRequiredQueryParams{
|
|
|
|
|
Queryid: contextQueryID,
|
|
|
|
|
Requiredqueryid: superQueryID,
|
|
|
|
|
Addedversion: superQueryVersion,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
superResultId, err := queries.AddResult(ctx, &repository.AddResultParams{
|
|
|
|
|
Queryid: superQueryID,
|
|
|
|
|
Value: "super_value",
|
|
|
|
|
Textentryid: textId,
|
|
|
|
|
Queryversion: superQueryVersion,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err := queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.False(t, isSynced)
|
|
|
|
|
docExternal, err := queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
contextResultId, err := queries.AddResult(ctx, &repository.AddResultParams{
|
|
|
|
|
Queryid: contextQueryID,
|
|
|
|
|
Value: "context_with_super_value",
|
|
|
|
|
Textentryid: textId,
|
|
|
|
|
Queryversion: 1,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.False(t, isSynced)
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
jsonResultId, err := queries.AddResult(ctx, &repository.AddResultParams{
|
|
|
|
|
Queryid: jsonQueryID,
|
|
|
|
|
Value: "json_with_super",
|
|
|
|
|
Textentryid: textId,
|
|
|
|
|
Queryversion: 1,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.False(t, isSynced)
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
err = queries.AddResultDependency(ctx, &repository.AddResultDependencyParams{
|
|
|
|
|
Resultid: contextResultId,
|
|
|
|
|
Requiredresultid: superResultId,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.False(t, isSynced)
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": null}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
|
|
|
|
|
err = queries.AddResultDependency(ctx, &repository.AddResultDependencyParams{
|
|
|
|
|
Resultid: jsonResultId,
|
|
|
|
|
Requiredresultid: contextResultId,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
isSynced, err = queries.IsClientSynced(ctx, &clientId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.True(t, isSynced)
|
|
|
|
|
docExternal, err = queries.GetDocumentExternal(ctx, documentID)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{
|
|
|
|
|
ID: documentID,
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
Fields: []byte(`{"first_key": "json_with_super"}`),
|
|
|
|
|
}, docExternal)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func createDocumentWithCollectorAndResults(t testing.TB, ctx context.Context, queries *repository.Queries, clientId string, contextQueryID, jsonQueryID uuid.UUID) (uuid.UUID, uuid.UUID, uuid.UUID) {
|
|
|
|
|
err := queries.AddCollectorQuery(ctx, &repository.AddCollectorQueryParams{
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Queryid: jsonQueryID,
|
|
|
|
|
Addedversion: 1,
|
|
|
|
|
Name: "first_key",
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
bucket := "example_bucket"
|
|
|
|
|
|
|
|
|
|
documentID, err := queries.CreateDocument(ctx, &repository.CreateDocumentParams{
|
|
|
|
|
Clientid: clientId,
|
|
|
|
|
Hash: "example_hash",
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
key := "example_key"
|
|
|
|
|
hash := "hahssh"
|
|
|
|
|
cleanId, err := queries.AddDocumentClean(ctx, &repository.AddDocumentCleanParams{
|
|
|
|
|
Documentid: documentID,
|
|
|
|
|
Bucket: &bucket,
|
|
|
|
|
Key: &key,
|
|
|
|
|
Hash: &hash,
|
|
|
|
|
Mimetype: repository.NullCleanmimetype{
|
|
|
|
|
Valid: true,
|
|
|
|
|
Cleanmimetype: repository.CleanmimetypeApplicationPdf,
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
err = queries.AddDocumentCleanEntry(ctx, &repository.AddDocumentCleanEntryParams{
|
|
|
|
|
Cleanid: cleanId,
|
|
|
|
|
Version: 1,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
textId, err := queries.AddDocumentText(ctx, &repository.AddDocumentTextParams{
|
|
|
|
|
Cleanid: cleanId,
|
|
|
|
|
Part: 0,
|
|
|
|
|
Createdat: pgtype.Timestamp{
|
|
|
|
|
Time: time.Now().UTC(),
|
|
|
|
|
Valid: true,
|
|
|
|
|
},
|
|
|
|
|
Bucket: "hi",
|
|
|
|
|
Key: "hello",
|
|
|
|
|
Hash: "example",
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
err = queries.AddDocumentTextEntry(ctx, &repository.AddDocumentTextEntryParams{
|
|
|
|
|
Version: 1,
|
|
|
|
|
Textid: textId,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
contextResultId, err := queries.AddResult(ctx, &repository.AddResultParams{
|
|
|
|
|
Queryid: contextQueryID,
|
|
|
|
|
Value: "example_context",
|
|
|
|
|
Textentryid: textId,
|
|
|
|
|
Queryversion: 1,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
jsonResultId, err := queries.AddResult(ctx, &repository.AddResultParams{
|
|
|
|
|
Queryid: jsonQueryID,
|
|
|
|
|
Value: "json_value",
|
|
|
|
|
Textentryid: textId,
|
|
|
|
|
Queryversion: 1,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
err = queries.AddResultDependency(ctx, &repository.AddResultDependencyParams{
|
|
|
|
|
Resultid: jsonResultId,
|
|
|
|
|
Requiredresultid: contextResultId,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
return documentID, cleanId, textId
|
2025-03-17 18:14:15 +00:00
|
|
|
}
|