tests: remove unnecessary service test
This commit is contained in:
@@ -1,250 +0,0 @@
|
||||
package depot_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/flowy-live/llink/internal/depot"
|
||||
"github.com/flowy-live/llink/internal/testhelper"
|
||||
"github.com/jackc/pgx/v5/pgxpool"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
var dbPool *pgxpool.Pool
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
dbPool = testhelper.SetupTestDB()
|
||||
defer testhelper.TeardownTestDB()
|
||||
|
||||
ret := m.Run()
|
||||
os.Exit(ret)
|
||||
}
|
||||
|
||||
// TestDepotRepository tests the repository layer directly
|
||||
// These tests can run without GCS since they only test database operations
|
||||
func TestDepotRepository_CreateAndGet(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
// Create a depot object directly in the database for testing
|
||||
var id string
|
||||
err := dbPool.QueryRow(ctx,
|
||||
`INSERT INTO depot_objects (id, name, content_type, content_length, bucket_name, object_key, contains_content)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
||||
RETURNING id`,
|
||||
"dpo_test123", "test-file.txt", "text/plain", int64(1024), "test-bucket", "test-key-123", false,
|
||||
).Scan(&id)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "dpo_test123", id)
|
||||
|
||||
// Query the object back
|
||||
var obj struct {
|
||||
ID string
|
||||
Name string
|
||||
ContentType string
|
||||
ContentLength int64
|
||||
BucketName string
|
||||
ObjectKey string
|
||||
ContainsContent bool
|
||||
CreatedAt time.Time
|
||||
}
|
||||
err = dbPool.QueryRow(ctx,
|
||||
`SELECT id, name, content_type, content_length, bucket_name, object_key, contains_content, created_at
|
||||
FROM depot_objects WHERE id = $1`,
|
||||
id,
|
||||
).Scan(&obj.ID, &obj.Name, &obj.ContentType, &obj.ContentLength,
|
||||
&obj.BucketName, &obj.ObjectKey, &obj.ContainsContent, &obj.CreatedAt)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "test-file.txt", obj.Name)
|
||||
assert.Equal(t, "text/plain", obj.ContentType)
|
||||
assert.Equal(t, int64(1024), obj.ContentLength)
|
||||
assert.Equal(t, "test-bucket", obj.BucketName)
|
||||
assert.Equal(t, "test-key-123", obj.ObjectKey)
|
||||
assert.False(t, obj.ContainsContent)
|
||||
assert.False(t, obj.CreatedAt.IsZero())
|
||||
|
||||
// Clean up
|
||||
_, err = dbPool.Exec(ctx, `DELETE FROM depot_objects WHERE id = $1`, id)
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestDepotRepository_ConfirmUpload(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
// Create a depot object
|
||||
var id string
|
||||
err := dbPool.QueryRow(ctx,
|
||||
`INSERT INTO depot_objects (id, name, content_type, content_length, bucket_name, object_key, contains_content)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
||||
RETURNING id`,
|
||||
"dpo_confirm123", "confirm-file.txt", "text/plain", int64(2048), "test-bucket", "confirm-key", false,
|
||||
).Scan(&id)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Verify it starts with contains_content = false
|
||||
var containsContent bool
|
||||
err = dbPool.QueryRow(ctx,
|
||||
`SELECT contains_content FROM depot_objects WHERE id = $1`,
|
||||
id,
|
||||
).Scan(&containsContent)
|
||||
assert.NoError(t, err)
|
||||
assert.False(t, containsContent)
|
||||
|
||||
// Confirm upload
|
||||
_, err = dbPool.Exec(ctx,
|
||||
`UPDATE depot_objects SET contains_content = TRUE WHERE id = $1`,
|
||||
id,
|
||||
)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Verify it's now true
|
||||
err = dbPool.QueryRow(ctx,
|
||||
`SELECT contains_content FROM depot_objects WHERE id = $1`,
|
||||
id,
|
||||
).Scan(&containsContent)
|
||||
assert.NoError(t, err)
|
||||
assert.True(t, containsContent)
|
||||
|
||||
// Clean up
|
||||
_, err = dbPool.Exec(ctx, `DELETE FROM depot_objects WHERE id = $1`, id)
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestDepotRepository_Delete(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
// Create a depot object
|
||||
var id string
|
||||
err := dbPool.QueryRow(ctx,
|
||||
`INSERT INTO depot_objects (id, name, content_type, content_length, bucket_name, object_key, contains_content)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
||||
RETURNING id`,
|
||||
"dpo_delete123", "delete-file.txt", "text/plain", int64(512), "test-bucket", "delete-key", false,
|
||||
).Scan(&id)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Delete it
|
||||
result, err := dbPool.Exec(ctx, `DELETE FROM depot_objects WHERE id = $1`, id)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, int64(1), result.RowsAffected())
|
||||
|
||||
// Verify it's gone
|
||||
var count int
|
||||
err = dbPool.QueryRow(ctx,
|
||||
`SELECT COUNT(*) FROM depot_objects WHERE id = $1`,
|
||||
id,
|
||||
).Scan(&count)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 0, count)
|
||||
}
|
||||
|
||||
func TestDepotRepository_Exists(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
// Create a depot object
|
||||
var id string
|
||||
err := dbPool.QueryRow(ctx,
|
||||
`INSERT INTO depot_objects (id, name, content_type, content_length, bucket_name, object_key, contains_content)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
||||
RETURNING id`,
|
||||
"dpo_exists123", "exists-file.txt", "text/plain", int64(256), "test-bucket", "exists-key", true,
|
||||
).Scan(&id)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Check exists
|
||||
var exists bool
|
||||
err = dbPool.QueryRow(ctx,
|
||||
`SELECT EXISTS(SELECT 1 FROM depot_objects WHERE id = $1)`,
|
||||
id,
|
||||
).Scan(&exists)
|
||||
assert.NoError(t, err)
|
||||
assert.True(t, exists)
|
||||
|
||||
// Check non-existent
|
||||
err = dbPool.QueryRow(ctx,
|
||||
`SELECT EXISTS(SELECT 1 FROM depot_objects WHERE id = $1)`,
|
||||
"dpo_nonexistent",
|
||||
).Scan(&exists)
|
||||
assert.NoError(t, err)
|
||||
assert.False(t, exists)
|
||||
|
||||
// Clean up
|
||||
_, err = dbPool.Exec(ctx, `DELETE FROM depot_objects WHERE id = $1`, id)
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestDepotRepository_OrphanedIndex(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
// Create an orphaned object (contains_content = false)
|
||||
var orphanID string
|
||||
err := dbPool.QueryRow(ctx,
|
||||
`INSERT INTO depot_objects (id, name, content_type, content_length, bucket_name, object_key, contains_content)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
||||
RETURNING id`,
|
||||
"dpo_orphan123", "orphan-file.txt", "text/plain", int64(128), "test-bucket", "orphan-key", false,
|
||||
).Scan(&orphanID)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Create a confirmed object (contains_content = true)
|
||||
var confirmedID string
|
||||
err = dbPool.QueryRow(ctx,
|
||||
`INSERT INTO depot_objects (id, name, content_type, content_length, bucket_name, object_key, contains_content)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
||||
RETURNING id`,
|
||||
"dpo_confirmed123", "confirmed-file.txt", "text/plain", int64(128), "test-bucket", "confirmed-key", true,
|
||||
).Scan(&confirmedID)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Query orphaned objects using the index
|
||||
rows, err := dbPool.Query(ctx,
|
||||
`SELECT id FROM depot_objects WHERE contains_content = FALSE`)
|
||||
assert.NoError(t, err)
|
||||
defer rows.Close()
|
||||
|
||||
var orphanedIDs []string
|
||||
for rows.Next() {
|
||||
var id string
|
||||
err := rows.Scan(&id)
|
||||
assert.NoError(t, err)
|
||||
orphanedIDs = append(orphanedIDs, id)
|
||||
}
|
||||
|
||||
// Our orphan should be in the list
|
||||
assert.Contains(t, orphanedIDs, orphanID)
|
||||
assert.NotContains(t, orphanedIDs, confirmedID)
|
||||
|
||||
// Clean up
|
||||
_, err = dbPool.Exec(ctx, `DELETE FROM depot_objects WHERE id IN ($1, $2)`, orphanID, confirmedID)
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
// TestDepotModels tests the model structures
|
||||
func TestDepotModels(t *testing.T) {
|
||||
// Test Config defaults
|
||||
config := depot.Config{
|
||||
BucketName: "test-bucket",
|
||||
}
|
||||
assert.Equal(t, "test-bucket", config.BucketName)
|
||||
assert.Equal(t, time.Duration(0), config.UploadURLExpiry)
|
||||
assert.Equal(t, time.Duration(0), config.DownloadURLExpiry)
|
||||
|
||||
// Test with explicit values
|
||||
config = depot.Config{
|
||||
BucketName: "custom-bucket",
|
||||
UploadURLExpiry: 10 * time.Minute,
|
||||
DownloadURLExpiry: 12 * time.Hour,
|
||||
}
|
||||
assert.Equal(t, "custom-bucket", config.BucketName)
|
||||
assert.Equal(t, 10*time.Minute, config.UploadURLExpiry)
|
||||
assert.Equal(t, 12*time.Hour, config.DownloadURLExpiry)
|
||||
}
|
||||
|
||||
// TestDepotErrors tests the error definitions
|
||||
func TestDepotErrors(t *testing.T) {
|
||||
assert.Error(t, depot.ErrNotFound)
|
||||
assert.Error(t, depot.ErrInvalidInput)
|
||||
assert.Equal(t, "object not found", depot.ErrNotFound.Error())
|
||||
assert.Equal(t, "invalid input", depot.ErrInvalidInput.Error())
|
||||
}
|
||||
Reference in New Issue
Block a user