From e32a93442f1351a25701a3aa6b5d38937e0750ea Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Sat, 20 Feb 2021 22:32:41 +0300 Subject: [PATCH] chore: add integration tests for list command --- migra-cli/tests/data/Migra_env.toml | 4 + migra-cli/tests/data/Migra_url.toml | 4 + .../210218232851_create_articles/down.sql | 3 + .../210218232851_create_articles/up.sql | 8 ++ .../210218233414_create_persons/down.sql | 6 + .../210218233414_create_persons/up.sql | 12 ++ migra-cli/tests/list.rs | 116 ++++++++++++++++++ 7 files changed, 153 insertions(+) create mode 100644 migra-cli/tests/data/Migra_env.toml create mode 100644 migra-cli/tests/data/Migra_url.toml create mode 100644 migra-cli/tests/data/migrations/210218232851_create_articles/down.sql create mode 100644 migra-cli/tests/data/migrations/210218232851_create_articles/up.sql create mode 100644 migra-cli/tests/data/migrations/210218233414_create_persons/down.sql create mode 100644 migra-cli/tests/data/migrations/210218233414_create_persons/up.sql diff --git a/migra-cli/tests/data/Migra_env.toml b/migra-cli/tests/data/Migra_env.toml new file mode 100644 index 0000000..ef85b73 --- /dev/null +++ b/migra-cli/tests/data/Migra_env.toml @@ -0,0 +1,4 @@ +root = "./" + +[database] +connection = "$DATABASE_URL" diff --git a/migra-cli/tests/data/Migra_url.toml b/migra-cli/tests/data/Migra_url.toml new file mode 100644 index 0000000..c59b383 --- /dev/null +++ b/migra-cli/tests/data/Migra_url.toml @@ -0,0 +1,4 @@ +root = "./" + +[database] +connection = "postgres://postgres:postgres@localhost:6000/migra_tests" diff --git a/migra-cli/tests/data/migrations/210218232851_create_articles/down.sql b/migra-cli/tests/data/migrations/210218232851_create_articles/down.sql new file mode 100644 index 0000000..b625086 --- /dev/null +++ b/migra-cli/tests/data/migrations/210218232851_create_articles/down.sql @@ -0,0 +1,3 @@ +-- This file should undo anything in `up.sql` + +DROP TABLE articles; diff --git a/migra-cli/tests/data/migrations/210218232851_create_articles/up.sql b/migra-cli/tests/data/migrations/210218232851_create_articles/up.sql new file mode 100644 index 0000000..b2134a4 --- /dev/null +++ b/migra-cli/tests/data/migrations/210218232851_create_articles/up.sql @@ -0,0 +1,8 @@ +-- Your SQL goes here + +CREATE TABLE articles ( + id serial PRIMARY KEY, + title text NOT NULL CHECK (length(title) > 0), + content text NOT NULL, + created_at timestamp NOT NULL DEFAULT current_timestamp +); diff --git a/migra-cli/tests/data/migrations/210218233414_create_persons/down.sql b/migra-cli/tests/data/migrations/210218233414_create_persons/down.sql new file mode 100644 index 0000000..c03d71a --- /dev/null +++ b/migra-cli/tests/data/migrations/210218233414_create_persons/down.sql @@ -0,0 +1,6 @@ +-- This file should undo anything in `up.sql` + +ALTER TABLE articles + DROP COLUMN author_person_id; + +DROP TABLE persons; diff --git a/migra-cli/tests/data/migrations/210218233414_create_persons/up.sql b/migra-cli/tests/data/migrations/210218233414_create_persons/up.sql new file mode 100644 index 0000000..9b69842 --- /dev/null +++ b/migra-cli/tests/data/migrations/210218233414_create_persons/up.sql @@ -0,0 +1,12 @@ +-- Your SQL goes here + +CREATE TABLE persons ( + id SERIAL PRIMARY KEY, + email text NOT NULL UNIQUE, + display_name text NOT NULL, + created_at timestamp NOT NULL DEFAULT current_timestamp +); + +ALTER TABLE articles + ADD COLUMN author_person_id int NULL + REFERENCES persons (id) ON UPDATE CASCADE ON DELETE CASCADE; diff --git a/migra-cli/tests/list.rs b/migra-cli/tests/list.rs index ea84a73..7f2dbe5 100644 --- a/migra-cli/tests/list.rs +++ b/migra-cli/tests/list.rs @@ -81,3 +81,119 @@ Pending migrations: Ok(()) } + +#[test] +fn empty_applied_migrations() -> TestResult { + let env = Env::new(DATABASE_URL_DEFAULT_ENV_NAME, DATABASE_URL_ENV_VALUE); + + Command::cargo_bin("migra")? + .arg("-c") + .arg(path_to_file("Migra_env.toml")) + .arg("ls") + .assert() + .success() + .stdout(contains( + r#"Applied migrations: +— + +Pending migrations: +210218232851_create_articles +210218233414_create_persons +"#, + )); + + drop(env); + + Ok(()) +} + +#[test] +fn applied_all_migrations() -> TestResult { + let env = Env::new(DATABASE_URL_DEFAULT_ENV_NAME, DATABASE_URL_ENV_VALUE); + + Command::cargo_bin("migra")? + .arg("-c") + .arg(path_to_file("Migra_env.toml")) + .arg("up") + .assert() + .success(); + + Command::cargo_bin("migra")? + .arg("-c") + .arg(path_to_file("Migra_env.toml")) + .arg("ls") + .assert() + .success() + .stdout(contains( + r#"Applied migrations: +210218232851_create_articles +210218233414_create_persons + +Pending migrations: +— +"#, + )); + + Command::cargo_bin("migra")? + .arg("-c") + .arg(path_to_file("Migra_env.toml")) + .arg("down") + .assert() + .success(); + + Command::cargo_bin("migra")? + .arg("-c") + .arg(path_to_file("Migra_env.toml")) + .arg("down") + .assert() + .success(); + + drop(env); + + Ok(()) +} + +#[test] +fn applied_one_migrations() -> TestResult { + let env = Env::new(DATABASE_URL_DEFAULT_ENV_NAME, DATABASE_URL_ENV_VALUE); + + Command::cargo_bin("migra")? + .arg("-c") + .arg(path_to_file("Migra_env.toml")) + .arg("up") + .assert() + .success(); + + Command::cargo_bin("migra")? + .arg("-c") + .arg(path_to_file("Migra_env.toml")) + .arg("down") + .assert() + .success(); + + Command::cargo_bin("migra")? + .arg("-c") + .arg(path_to_file("Migra_env.toml")) + .arg("ls") + .assert() + .success() + .stdout(contains( + r#"Applied migrations: +210218232851_create_articles + +Pending migrations: +210218233414_create_persons +"#, + )); + + Command::cargo_bin("migra")? + .arg("-c") + .arg(path_to_file("Migra_env.toml")) + .arg("down") + .assert() + .success(); + + drop(env); + + Ok(()) +}