package repository_test import ( "context" "testing" "queryorchestration/internal/database/repository" "queryorchestration/internal/serviceconfig" "queryorchestration/internal/test" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestDocument(t *testing.T) { if testing.Short() { t.Skip("Skipping long test in short mode") } ctx := context.Background() cfg := &serviceconfig.BaseConfig{} test.SetCfgProviderWithBasePath(t, cfg, "../../..") _, cleanup := test.CreateDB(t, ctx, &test.CreateDatabaseConfig{ Cfg: cfg, RunMigrations: true, }) defer cleanup() queries := cfg.GetDBQueries() externalId := "example_id" clientId, err := queries.CreateClient(ctx, &repository.CreateClientParams{ Name: "example_name", Externalid: externalId, }) require.NoError(t, err) docs, err := queries.ListDocumentsByClientExternalId(ctx, externalId) require.NoError(t, err) assert.Len(t, docs, 0) hash := "example_hash" id, err := queries.CreateDocument(ctx, &repository.CreateDocumentParams{ Clientid: clientId, Hash: hash, }) require.NoError(t, err) assert.NotEmpty(t, id) bucketone := "bucketone" keyone := "keyone" err = queries.AddDocumentEntry(ctx, &repository.AddDocumentEntryParams{ Documentid: id, Bucket: bucketone, Key: keyone, }) require.NoError(t, err) docs, err = queries.ListDocumentsByClientExternalId(ctx, externalId) require.NoError(t, err) assert.Len(t, docs, 1) assert.Equal(t, hash, docs[0].Hash) documentTwoID, err := queries.CreateDocument(ctx, &repository.CreateDocumentParams{ Clientid: clientId, Hash: "example_hash_two", }) require.NoError(t, err) assert.NotEmpty(t, documentTwoID) buckettwo := "buckettwo" keytwo := "keytwo" err = queries.AddDocumentEntry(ctx, &repository.AddDocumentEntryParams{ Documentid: documentTwoID, Bucket: buckettwo, Key: keytwo, }) require.NoError(t, err) docs, err = queries.ListDocumentsByClientExternalId(ctx, externalId) require.NoError(t, err) assert.Len(t, docs, 2) externalTwoId := "EXAMPLE TWO" clientTwoId, err := queries.CreateClient(ctx, &repository.CreateClientParams{ Name: "example_name_two", Externalid: externalTwoId, }) require.NoError(t, err) docs, err = queries.ListDocumentsByClientExternalId(ctx, externalId) require.NoError(t, err) assert.Len(t, docs, 2) docs, err = queries.ListDocumentsByClientExternalId(ctx, externalTwoId) require.NoError(t, err) assert.Len(t, docs, 0) documentThreeId, err := queries.CreateDocument(ctx, &repository.CreateDocumentParams{ Clientid: clientTwoId, Hash: hash, }) require.NoError(t, err) bucketthree := "buckettwo" keythree := "keytwo" err = queries.AddDocumentEntry(ctx, &repository.AddDocumentEntryParams{ Documentid: documentThreeId, Bucket: bucketthree, Key: keythree, }) require.NoError(t, err) docs, err = queries.ListDocumentsByClientExternalId(ctx, externalId) require.NoError(t, err) assert.Len(t, docs, 2) docs, err = queries.ListDocumentsByClientExternalId(ctx, externalTwoId) require.NoError(t, err) assert.Len(t, docs, 1) assert.Equal(t, hash, docs[0].Hash) doc, err := queries.GetDocumentSummary(ctx, id) require.NoError(t, err) assert.EqualExportedValues(t, &repository.Document{ ID: id, Clientid: clientId, Hash: hash, }, doc) docext, err := queries.GetDocumentExternal(ctx, id) require.NoError(t, err) assert.EqualExportedValues(t, &repository.GetDocumentExternalRow{ ID: id, Clientid: externalId, Hash: hash, Fields: []byte("{}"), }, docext) docid, err := queries.GetDocumentIDByHash(ctx, &repository.GetDocumentIDByHashParams{ Hash: hash, Clientid: clientId, }) require.NoError(t, err) assert.EqualExportedValues(t, id, docid) entry, err := queries.GetDocumentEntry(ctx, id) require.NoError(t, err) assert.EqualExportedValues(t, &repository.GetDocumentEntryRow{ Documentid: id, Bucket: bucketone, Key: keyone, }, entry) entry, err = queries.GetDocumentEntry(ctx, documentTwoID) require.NoError(t, err) assert.EqualExportedValues(t, &repository.GetDocumentEntryRow{ Documentid: documentTwoID, Bucket: buckettwo, Key: keytwo, }, entry) entry, err = queries.GetDocumentEntry(ctx, documentThreeId) require.NoError(t, err) assert.EqualExportedValues(t, &repository.GetDocumentEntryRow{ Documentid: documentThreeId, Bucket: bucketthree, Key: keythree, }, entry) }