// Test utilities for storage module use aws_sdk_s3::{Client, config::Region}; use aws_config::BehaviorVersion; use aws_sdk_s3::config::Credentials; use bytes::Bytes; use std::env; use sqlx::PgPool; pub struct TestConfig { pub database_url: String, pub s3_endpoint: String, pub s3_access_key: String, pub s3_secret_key: String, pub s3_bucket: String, } impl Default for TestConfig { fn default() -> Self { Self { database_url: env::var("TEST_DATABASE_URL").unwrap_or_else(|_| "postgresql://postgres:postgres@localhost:5432/madbase_test".to_string()), s3_endpoint: env::var("TEST_S3_ENDPOINT").unwrap_or_else(|_| "http://localhost:9000".to_string()), s3_access_key: env::var("TEST_S3_ACCESS_KEY").unwrap_or_else(|_| "minioadmin".to_string()), s3_secret_key: env::var("TEST_S3_SECRET_KEY").unwrap_or_else(|_| "minioadmin".to_string()), s3_bucket: env::var("TEST_S3_BUCKET").unwrap_or_else(|_| "madbase-test".to_string()), } } } pub fn generate_test_data(size: usize) -> Bytes { let data: Vec = (0..size).map(|i| (i % 256) as u8).collect(); Bytes::from(data) } pub async fn create_test_bucket(pool: &PgPool, bucket_id: &str, public: bool) { sqlx::query("INSERT INTO storage.buckets (id, name, public) VALUES ($1, $2, $3) ON CONFLICT (id) DO UPDATE SET name = $2, public = $3") .bind(bucket_id) .bind(format!("test_bucket_{}", bucket_id)) .bind(public) .execute(pool) .await .expect("Failed to create test bucket"); } pub async fn cleanup_test_data(pool: &PgPool, bucket_id: &str) { sqlx::query("DELETE FROM storage.objects WHERE bucket_id = $1").bind(bucket_id).execute(pool).await.ok(); sqlx::query("DELETE FROM storage.buckets WHERE id = $1").bind(bucket_id).execute(pool).await.ok(); } #[cfg(test)] mod tests { use super::*; #[test] fn test_generate_test_data() { let data = generate_test_data(1024); assert_eq!(data.len(), 1024); assert_eq!(data[0], 0); assert_eq!(data[255], 255); } }