pub mod fixtures;
pub use dynamo_table::setup;
pub use dynamo_table::table::DynamoTable;
pub use serde::{Deserialize, Serialize};
pub use fixtures::{TestCounters, TestObject};
#[allow(unused_imports)]
pub use fixtures::TestGSIObject;
use std::time::{SystemTime, UNIX_EPOCH};
use tokio::sync::OnceCell;
static TEST_INIT: OnceCell<()> = OnceCell::const_new();
pub async fn init_test_client() {
TEST_INIT
.get_or_init(|| async {
let _ = dynamo_table::dynamodb_client().await;
})
.await;
}
pub fn unique_test_prefix(name: &str) -> String {
format!(
"{}_{}_",
name,
SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_millis()
)
}
#[allow(dead_code)]
pub async fn wait_for_consistency() {
tokio::time::sleep(std::time::Duration::from_millis(500)).await;
}
#[allow(dead_code)]
pub async fn setup_table<T>() -> Result<(), dynamo_table::Error>
where
T: DynamoTable,
T::PK: std::fmt::Display + Clone + Send + Sync + std::fmt::Debug,
T::SK: std::fmt::Display + Clone + Send + Sync + std::fmt::Debug,
{
init_test_client().await;
let _ = setup::table::<T>().await;
Ok(())
}
#[allow(dead_code)]
pub async fn setup_table_with_gsi<T>() -> Result<(), dynamo_table::Error>
where
T: DynamoTable + dynamo_table::table::GSITable,
T::PK: std::fmt::Display + Clone + Send + Sync + std::fmt::Debug,
T::SK: std::fmt::Display + Clone + Send + Sync + std::fmt::Debug,
{
init_test_client().await;
let _ = setup::table_with_gsi::<T>().await;
Ok(())
}