use aws_config::{BehaviorVersion, Region, SdkConfig};
use docbox_storage::s3::S3StorageLayerFactory;
use docbox_storage::{StorageLayerFactory, s3::S3StorageLayerFactoryConfig};
use testcontainers::ImageExt;
use testcontainers_modules::testcontainers::runners::AsyncRunner;
use testcontainers_modules::{minio::MinIO, testcontainers::ContainerAsync};
const TEST_MINIO_USER: &str = "minioadmin";
const TEST_MINIO_PASSWORD: &str = "minioadmin";
pub async fn test_minio_container() -> ContainerAsync<MinIO> {
MinIO::default()
.with_env_var("MINIO_ROOT_USER", TEST_MINIO_USER)
.with_env_var("MINIO_ROOT_PASSWORD", TEST_MINIO_PASSWORD)
.start()
.await
.unwrap()
}
fn test_sdk_config() -> SdkConfig {
SdkConfig::builder()
.behavior_version(BehaviorVersion::v2026_01_12())
.region(Region::from_static("us-east-1"))
.build()
}
pub async fn test_storage_factory(container: &ContainerAsync<MinIO>) -> StorageLayerFactory {
let host = container.get_host().await.unwrap();
let host_port = container.get_host_port_ipv4(9000).await.unwrap();
let url = format!("http://{host}:{host_port}");
let aws_config = test_sdk_config();
let endpoint = docbox_storage::s3::S3Endpoint::Custom {
endpoint: url,
external_endpoint: None,
access_key_id: TEST_MINIO_USER.to_string(),
access_key_secret: TEST_MINIO_PASSWORD.to_string(),
};
let config = S3StorageLayerFactoryConfig { endpoint };
StorageLayerFactory::S3(S3StorageLayerFactory::from_config(&aws_config, config))
}