package repository_test import ( "context" "os" "path" "testing" "queryorchestration/internal/database/repository" "queryorchestration/internal/serviceconfig" "queryorchestration/internal/test" "github.com/stretchr/testify/assert" ) func TestClean(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) hash := "example_hash" id, err := queries.CreateDocument(ctx, &repository.CreateDocumentParams{ Jobid: jobId, Hash: hash, }) assert.NoError(t, err) assert.NotEmpty(t, id) isclean, err := queries.HasDocumentCleanEntry(ctx, id) assert.NoError(t, err) assert.False(t, isclean) _, err = queries.GetDocumentCleanEntry(ctx, id) assert.Error(t, err) bucket := "example_bucket" key := "example_key" 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, Mimetype: mimetype, Fail: fail, }) assert.Error(t, err) failcleanid, err := queries.AddDocumentClean(ctx, &repository.AddDocumentCleanParams{ Documentid: id, Fail: fail, }) assert.NoError(t, err) err = queries.AddDocumentCleanEntry(ctx, &repository.AddDocumentCleanEntryParams{ Version: 1, Cleanid: failcleanid, }) assert.NoError(t, err) isclean, err = queries.HasDocumentCleanEntry(ctx, id) assert.NoError(t, err) assert.True(t, isclean) clean, err := queries.GetDocumentCleanEntry(ctx, id) assert.NoError(t, err) assert.Equal(t, id, clean.Documentid) assert.Nil(t, clean.Bucket) assert.Nil(t, clean.Key) assert.Equal(t, fail, clean.Fail) assert.Equal(t, int32(1), clean.Version) assert.Equal(t, failcleanid, clean.ID) cleanid, err := queries.AddDocumentClean(ctx, &repository.AddDocumentCleanParams{ Documentid: id, Bucket: &bucket, Key: &key, Mimetype: mimetype, }) assert.NoError(t, err) err = queries.AddDocumentCleanEntry(ctx, &repository.AddDocumentCleanEntryParams{ Version: 2, Cleanid: cleanid, }) assert.NoError(t, err) isclean, err = queries.HasDocumentCleanEntry(ctx, id) assert.NoError(t, err) assert.True(t, isclean) clean, err = queries.GetDocumentCleanEntry(ctx, id) assert.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, mimetype, clean.Mimetype) assert.Equal(t, int32(2), clean.Version) assert.Equal(t, cleanid, clean.ID) recent, err := queries.GetMostRecentDocumentCleanEntry(ctx, id) assert.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.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, jobId) assert.NoError(t, err) err = queries.SetActiveCollectorVersion(ctx, &repository.SetActiveCollectorVersionParams{ Jobid: jobId, Versionid: version, }) assert.NoError(t, err) err = queries.SetCollectorCleanVersion(ctx, &repository.SetCollectorCleanVersionParams{ Jobid: jobId, Versionid: 5, Addedversion: version, }) assert.NoError(t, err) isclean, err = queries.HasDocumentCleanEntry(ctx, id) assert.NoError(t, err) assert.False(t, isclean) recent, err = queries.GetMostRecentDocumentCleanEntry(ctx, id) assert.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.Mimetype, recent.Mimetype) assert.Equal(t, clean.Fail, recent.Fail) assert.Equal(t, clean.Version, recent.Version) assert.Equal(t, clean.ID, recent.ID) }