use postgresql_commands::pg_dump::PgDumpBuilder;
use postgresql_commands::psql::PsqlBuilder;
use postgresql_commands::{CommandBuilder, CommandExecutor};
use postgresql_embedded::{PostgreSQL, Settings};
use std::fs;
use std::time::Duration;
use tempfile::NamedTempFile;
use test_log::test;
#[test(tokio::test)]
async fn dump_command() -> anyhow::Result<()> {
let settings = Settings {
timeout: Some(Duration::from_secs(30)),
..Default::default()
};
let mut postgresql = PostgreSQL::new(settings);
postgresql.setup().await?;
postgresql.start().await?;
let settings = postgresql.settings();
let database_name = "test";
postgresql.create_database(database_name).await?;
let mut psql = PsqlBuilder::from(settings)
.command("CREATE TABLE person42 (id INTEGER, name VARCHAR(20))")
.dbname(database_name)
.no_psqlrc()
.no_align()
.tuples_only()
.build();
let (_stdout, _stderr) = psql.execute()?;
let temp_file = NamedTempFile::new()?;
let file = temp_file.as_ref();
let mut pgdump = PgDumpBuilder::from(settings)
.dbname(database_name)
.schema_only()
.file(file.to_string_lossy().to_string())
.build();
let (_stdout, _stderr) = pgdump.execute()?;
let contents = fs::read_to_string(file)?;
assert!(contents.contains("person42"));
Ok(())
}