#![cfg(any(feature = "sqlite", feature = "postgresql", feature = "mysql"))]
mod _test_common;
define_test_user_direct!(TestDropBasicUser, "test_drop_basic_users_1");
define_test_user_direct!(TestDropIfExistsUser, "test_drop_if_exists_users_1");
define_test_user_direct!(TestDropMultipleUser, "test_drop_multiple_users_1");
define_test_user_minimal!(TestDropMultipleRole, "test_drop_multiple_roles_1");
define_test_user_direct!(TestDropRecreateUser, "test_drop_recreate_users_1");
async fn test_drop_table_basic_impl(
config: &_test_common::DbConfig,
) -> Result<(), Box<dyn std::error::Error>> {
let db = _test_common::create_db_connection(config).await?;
let _ = db.drop_table::<TestDropBasicUser>().execute().await;
db.create_table::<TestDropBasicUser>().execute().await?;
db.drop_table::<TestDropBasicUser>().execute().await?;
db.drop_table::<TestDropBasicUser>().execute().await?;
Ok(())
}
async fn test_drop_table_if_exists_impl(
config: &_test_common::DbConfig,
) -> Result<(), Box<dyn std::error::Error>> {
let db = _test_common::create_db_connection(config).await?;
let _ = db.drop_table::<TestDropIfExistsUser>().execute().await;
db.create_table::<TestDropIfExistsUser>().execute().await?;
db.drop_table::<TestDropIfExistsUser>().execute().await?;
db.drop_table::<TestDropIfExistsUser>().execute().await?;
Ok(())
}
async fn test_drop_multiple_tables_impl(
config: &_test_common::DbConfig,
) -> Result<(), Box<dyn std::error::Error>> {
let db = _test_common::create_db_connection(config).await?;
let _ = db.drop_table::<TestDropMultipleUser>().execute().await;
let _ = db.drop_table::<TestDropMultipleRole>().execute().await;
db.create_table::<TestDropMultipleUser>().execute().await?;
db.create_table::<TestDropMultipleRole>().execute().await?;
db.insert(&TestDropMultipleUser {
id: 1,
name: "Bob".to_string(),
age: 25,
})
.execute()
.await?;
db.insert(&TestDropMultipleRole {
id: 1,
name: "admin".to_string(),
})
.execute()
.await?;
db.drop_table::<TestDropMultipleUser>().execute().await?;
db.drop_table::<TestDropMultipleRole>().execute().await?;
db.create_table::<TestDropMultipleUser>().execute().await?;
db.create_table::<TestDropMultipleRole>().execute().await?;
db.drop_table::<TestDropMultipleUser>().execute().await?;
db.drop_table::<TestDropMultipleRole>().execute().await?;
Ok(())
}
async fn test_drop_table_and_recreate_impl(
config: &_test_common::DbConfig,
) -> Result<(), Box<dyn std::error::Error>> {
let db = _test_common::create_db_connection(config).await?;
let _ = db.drop_table::<TestDropRecreateUser>().execute().await;
db.create_table::<TestDropRecreateUser>().execute().await?;
db.insert(&TestDropRecreateUser {
id: 1,
name: "Charlie".to_string(),
age: 30,
})
.execute()
.await?;
db.insert(&TestDropRecreateUser {
id: 2,
name: "Diana".to_string(),
age: 28,
})
.execute()
.await?;
let users = db
.select::<TestDropRecreateUser>()
.collect::<Vec<_>>()
.await?;
assert_eq!(users.len(), 2);
db.drop_table::<TestDropRecreateUser>().execute().await?;
db.create_table::<TestDropRecreateUser>().execute().await?;
let users = db
.select::<TestDropRecreateUser>()
.collect::<Vec<_>>()
.await?;
assert_eq!(users.len(), 0);
db.drop_table::<TestDropRecreateUser>().execute().await?;
Ok(())
}
test_on_all_dbs_result!(test_drop_table_basic_impl);
test_on_all_dbs_result!(test_drop_table_if_exists_impl);
test_on_all_dbs_result!(test_drop_multiple_tables_impl);
test_on_all_dbs_result!(test_drop_table_and_recreate_impl);