Merged in feature/doc_import (pull request #177)

integration of background processor

* integration part 1

* feature working

* fix mimetype issue
This commit is contained in:
Jay Brown
2025-08-20 19:01:13 +00:00
parent 7a693d42f5
commit 720a84be92
34 changed files with 2682 additions and 193 deletions
+103
View File
@@ -392,6 +392,109 @@ func TestBatchUpload(t *testing.T) {
require.NoError(t, err)
assert.Equal(t, int64(4), count)
})
t.Run("GetUnprocessedBatches", func(t *testing.T) {
t.Parallel()
ctx := t.Context()
cfg := &serviceconfig.BaseConfig{}
test.CreateDB(t, cfg)
queries := cfg.GetDBQueries()
// Create multiple clients
clientID1 := fmt.Sprintf("TEST_CLIENT_UNPROCESSED1_%s", uuid.New().String()[:8])
clientID2 := fmt.Sprintf("TEST_CLIENT_UNPROCESSED2_%s", uuid.New().String()[:8])
for _, clientID := range []string{clientID1, clientID2} {
err := queries.CreateClient(ctx, &repository.CreateClientParams{
Name: fmt.Sprintf("Test Client %s", clientID),
Clientid: clientID,
})
require.NoError(t, err)
}
// Create batches with different statuses
var processingBatchIDs []uuid.UUID
// Client 1: 2 processing batches
for i := 0; i < 2; i++ {
batchID, err := queries.CreateBatchUpload(ctx, &repository.CreateBatchUploadParams{
ClientID: clientID1,
OriginalFilename: fmt.Sprintf("processing%d.zip", i),
TotalDocuments: 10,
})
require.NoError(t, err)
processingBatchIDs = append(processingBatchIDs, batchID)
}
// Client 2: 1 processing batch
batchID, err := queries.CreateBatchUpload(ctx, &repository.CreateBatchUploadParams{
ClientID: clientID2,
OriginalFilename: "processing_client2.zip",
TotalDocuments: 5,
})
require.NoError(t, err)
processingBatchIDs = append(processingBatchIDs, batchID)
// Create completed batch (should not be returned)
completedBatchID, err := queries.CreateBatchUpload(ctx, &repository.CreateBatchUploadParams{
ClientID: clientID1,
OriginalFilename: "completed.zip",
TotalDocuments: 8,
})
require.NoError(t, err)
err = queries.UpdateBatchStatus(ctx, &repository.UpdateBatchStatusParams{
ID: completedBatchID,
Column2: repository.BatchStatusCompleted,
})
require.NoError(t, err)
// Create failed batch (should not be returned)
failedBatchID, err := queries.CreateBatchUpload(ctx, &repository.CreateBatchUploadParams{
ClientID: clientID2,
OriginalFilename: "failed.zip",
TotalDocuments: 3,
})
require.NoError(t, err)
err = queries.UpdateBatchStatus(ctx, &repository.UpdateBatchStatusParams{
ID: failedBatchID,
Column2: repository.BatchStatusFailed,
})
require.NoError(t, err)
// Get unprocessed batches
unprocessedBatches, err := queries.GetUnprocessedBatches(ctx)
require.NoError(t, err)
// Should return exactly 3 processing batches
assert.Len(t, unprocessedBatches, 3)
// Verify all returned batches have processing status
returnedBatchIDs := make([]uuid.UUID, len(unprocessedBatches))
for i, batch := range unprocessedBatches {
assert.Equal(t, repository.BatchStatusProcessing, batch.Status)
returnedBatchIDs[i] = batch.ID
}
// Verify all processing batches are returned
for _, expectedID := range processingBatchIDs {
assert.Contains(t, returnedBatchIDs, expectedID)
}
// Verify completed and failed batches are NOT returned
assert.NotContains(t, returnedBatchIDs, completedBatchID)
assert.NotContains(t, returnedBatchIDs, failedBatchID)
// Verify batches are ordered by created_at ASC (oldest first)
if len(unprocessedBatches) > 1 {
for i := 0; i < len(unprocessedBatches)-1; i++ {
assert.True(t,
unprocessedBatches[i].CreatedAt.Time.Before(unprocessedBatches[i+1].CreatedAt.Time) ||
unprocessedBatches[i].CreatedAt.Time.Equal(unprocessedBatches[i+1].CreatedAt.Time),
"batches should be ordered by created_at ASC")
}
}
})
}
func TestBatchStatusEnum(t *testing.T) {