package repository_test import ( "testing" "queryorchestration/internal/database/repository" "queryorchestration/internal/serviceconfig" "queryorchestration/internal/test" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestClean(t *testing.T) { t.Parallel() if testing.Short() { t.SkipNow() } ctx := t.Context() cfg := &serviceconfig.BaseConfig{} test.CreateDB(t, cfg) queries := cfg.GetDBQueries() clientId := "EXAMPLE" err := queries.CreateClient(ctx, &repository.CreateClientParams{ Name: "example_client", Clientid: clientId, }) require.NoError(t, err) hash := "example_hash" id, err := queries.CreateDocument(ctx, &repository.CreateDocumentParams{ Clientid: clientId, Hash: hash, BatchID: nil, }) require.NoError(t, err) assert.NotEmpty(t, id) isclean, err := queries.HasDocumentCleanEntry(ctx, id) require.NoError(t, err) assert.False(t, isclean) bucket := "example_bucket" key := "example_key" cleanHash := "hello" mimetype := repository.NullCleanmimetype{ Valid: true, Cleanmimetype: repository.CleanmimetypeApplicationPdf, } fail := repository.NullCleanfailtype{ Valid: true, Cleanfailtype: repository.CleanfailtypeInvalidMimetype, } _, err = queries.AddDocumentClean(ctx, &repository.AddDocumentCleanParams{ Documentid: id, Bucket: &bucket, Key: &key, Hash: &cleanHash, Mimetype: mimetype, Fail: fail, }) assert.Error(t, err) failcleanid, err := queries.AddDocumentClean(ctx, &repository.AddDocumentCleanParams{ Documentid: id, Fail: fail, }) require.NoError(t, err) err = queries.AddDocumentCleanEntry(ctx, &repository.AddDocumentCleanEntryParams{ Version: 1, Cleanid: failcleanid, }) require.NoError(t, err) isclean, err = queries.HasDocumentCleanEntry(ctx, id) require.NoError(t, err) assert.True(t, isclean) clean, err := queries.GetCleanEntry(ctx, failcleanid) require.NoError(t, err) assert.Equal(t, id, clean.Documentid) assert.Nil(t, clean.Bucket) assert.Nil(t, clean.Key) assert.Nil(t, clean.Hash) assert.Equal(t, fail, clean.Fail) assert.Equal(t, int64(1), clean.Version) assert.Equal(t, failcleanid, clean.ID) assert.Equal(t, "EXAMPLE", clean.Clientid) cleanid, err := queries.AddDocumentClean(ctx, &repository.AddDocumentCleanParams{ Documentid: id, Bucket: &bucket, Key: &key, Hash: &cleanHash, Mimetype: mimetype, }) require.NoError(t, err) err = queries.AddDocumentCleanEntry(ctx, &repository.AddDocumentCleanEntryParams{ Version: 2, Cleanid: cleanid, }) require.NoError(t, err) isclean, err = queries.HasDocumentCleanEntry(ctx, id) require.NoError(t, err) assert.True(t, isclean) clean, err = queries.GetCleanEntry(ctx, cleanid) require.NoError(t, err) assert.Equal(t, id, clean.Documentid) assert.False(t, clean.Fail.Valid) assert.Equal(t, bucket, *clean.Bucket) assert.Equal(t, key, *clean.Key) assert.Equal(t, cleanHash, *clean.Hash) assert.Equal(t, mimetype, clean.Mimetype) assert.Equal(t, int64(2), clean.Version) assert.Equal(t, cleanid, clean.ID) assert.Equal(t, "EXAMPLE", clean.Clientid) docclean, err := queries.GetCleanEntryByDocId(ctx, id) require.NoError(t, err) assert.EqualExportedValues(t, clean, docclean) recent, err := queries.GetMostRecentDocumentCleanEntry(ctx, id) require.NoError(t, err) assert.Equal(t, clean.Documentid, recent.Documentid) assert.Equal(t, clean.Bucket, recent.Bucket) assert.Equal(t, clean.Key, recent.Key) assert.Equal(t, clean.Hash, recent.Hash) assert.Equal(t, clean.Mimetype, recent.Mimetype) assert.Equal(t, clean.Fail, recent.Fail) assert.Equal(t, clean.Version, recent.Version) assert.Equal(t, clean.ID, recent.ID) version, err := queries.AddLatestCollectorVersion(ctx, clientId) require.NoError(t, err) err = queries.SetActiveCollectorVersion(ctx, &repository.SetActiveCollectorVersionParams{ Clientid: clientId, Versionid: version, }) require.NoError(t, err) err = queries.SetCollectorCleanVersion(ctx, &repository.SetCollectorCleanVersionParams{ Clientid: clientId, Versionid: 5, Addedversion: version, }) require.NoError(t, err) isclean, err = queries.HasDocumentCleanEntry(ctx, id) require.NoError(t, err) assert.False(t, isclean) recent, err = queries.GetMostRecentDocumentCleanEntry(ctx, id) require.NoError(t, err) assert.Equal(t, clean.Documentid, recent.Documentid) assert.Equal(t, clean.Bucket, recent.Bucket) assert.Equal(t, clean.Key, recent.Key) assert.Equal(t, clean.Hash, recent.Hash) assert.Equal(t, clean.Mimetype, recent.Mimetype) assert.Equal(t, clean.Fail, recent.Fail) assert.Equal(t, clean.Version, recent.Version) assert.Equal(t, clean.ID, recent.ID) }