AppFlowy/frontend/rust-lib/flowy-test/tests/tool/pg_migration.rs
Nathan.fooo f9e7b5ffa4
feat: reload UI (#2999)
* chore: reload folder

* chore: reload folder

* chore: init sync

* chore: update tables

* chore: update database

* chore: load row

* chore: update

* chore: reload row

* test: fit test

* chore: retry

* chore: support batch fetch

* chore: enable sync

* chore: sync switch

* chore: sync switch

* chore: migration user data

* chore: migrate data

* chore: migrate folder

* chore: save user email

* chore: refresh user profile

* chore: fix test

* chore: delete translation files

* test: clippy format
2023-07-14 13:37:13 +08:00

75 lines
2.6 KiB
Rust

use tokio_postgres::{Client, NoTls};
use flowy_server_config::supabase_config::PostgresConfiguration;
/// Drop all tables and dependencies defined in the v1_initial_up.sql.
/// Be careful when using this function. It will drop all tables and dependencies.
/// Mostly used for testing.
#[allow(dead_code)]
#[cfg(debug_assertions)]
pub(crate) async fn run_initial_drop(client: &Client) {
// let sql = include_str!("migrations/initial/initial_down.sql");
let sql = r#"DROP TABLE IF EXISTS af_user;
DROP TABLE IF EXISTS af_workspace;
DROP TABLE IF EXISTS af_user_profile;
DROP TABLE IF EXISTS af_collab;
DROP VIEW IF EXISTS af_collab_state;
DROP TABLE IF EXISTS af_collab_snapshot;
DROP TABLE IF EXISTS af_collab_statistics;
DROP TRIGGER IF EXISTS create_af_user_profile_trigger ON af_user_profile CASCADE;
DROP FUNCTION IF EXISTS create_af_user_profile_trigger_func;
DROP TRIGGER IF EXISTS create_af_workspace_trigger ON af_workspace CASCADE;
DROP FUNCTION IF EXISTS create_af_workspace_trigger_func;
DROP TRIGGER IF EXISTS af_collab_insert_trigger ON af_collab CASCADE;
DROP FUNCTION IF EXISTS increment_af_collab_update_count;
DROP TRIGGER IF EXISTS af_collab_snapshot_update_edit_count_trigger ON af_collab_snapshot;
DROP FUNCTION IF EXISTS af_collab_snapshot_update_edit_count;
DROP TRIGGER IF EXISTS check_and_delete_snapshots_trigger ON af_collab_snapshot CASCADE;
DROP FUNCTION IF EXISTS check_and_delete_snapshots;
DROP TRIGGER IF EXISTS new_af_collab_row_trigger ON af_collab CASCADE;
DROP FUNCTION IF EXISTS notify_on_insert_af_collab;
"#;
client.batch_execute(sql).await.unwrap();
client
.batch_execute("DROP TABLE IF EXISTS af_migration_history")
.await
.unwrap();
}
// ‼️‼️‼️ Warning: this test will create a table in the database
#[tokio::test]
async fn run_initial_drop_test() -> Result<(), anyhow::Error> {
// rename the `.evn.test.danger` to the actual env file name.
if dotenv::from_filename(".env.test.danger").is_err() {
return Ok(());
}
let configuration = PostgresConfiguration::from_env().unwrap();
let mut config = tokio_postgres::Config::new();
config
.host(&configuration.url)
.user(&configuration.user_name)
.password(&configuration.password)
.port(configuration.port);
// Using the https://docs.rs/postgres-openssl/latest/postgres_openssl/ to enable tls connection.
let (client, connection) = config.connect(NoTls).await?;
tokio::spawn(async move {
if let Err(e) = connection.await {
tracing::error!("postgres db connection error: {}", e);
}
});
#[cfg(debug_assertions)]
{
run_initial_drop(&client).await;
}
Ok(())
}