Skip to content

Commit

Permalink
refinery_cli: re-introduce MigrationType:
Browse files Browse the repository at this point in the history
and use it on `find_migration_files` to fix the bug introduced on rust-db#170 where refinery_cli tries to embed all
kinds of files not only .sql
  • Loading branch information
jxs committed Sep 18, 2021
1 parent f824ac6 commit fa7c792
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 94 deletions.
99 changes: 24 additions & 75 deletions refinery/tests/rusqlite.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ mod rusqlite {
use predicates::str::contains;
use refinery::{
config::{Config, ConfigDbType},
embed_migrations,
error::Kind,
Migrate, Migration, Runner, Target,
};
Expand All @@ -19,11 +20,6 @@ mod rusqlite {
embed_migrations!("./tests/migrations");
}

mod subdir {
use refinery::embed_migrations;
embed_migrations!("./tests/migrations_subdir");
}

mod broken {
use refinery::embed_migrations;
embed_migrations!("./tests/migrations_broken");
Expand All @@ -49,27 +45,26 @@ mod rusqlite {
}

fn get_migrations() -> Vec<Migration> {
let migration1 = Migration::unapplied(
"V1__initial.sql",
include_str!("./migrations_subdir/V1-2/V1__initial.sql"),
)
.unwrap();
embed_migrations!("./tests/migrations");

let migration1 =
Migration::unapplied("V1__initial.rs", &migrations::V1__initial::migration()).unwrap();

let migration2 = Migration::unapplied(
"V2__add_cars_and_motos_table.sql",
include_str!("./migrations_subdir/V1-2/V2__add_cars_and_motos_table.sql"),
include_str!("./migrations/V1-2/V2__add_cars_and_motos_table.sql"),
)
.unwrap();

let migration3 = Migration::unapplied(
"V3__add_brand_to_cars_table",
include_str!("./migrations_subdir/V3/V3__add_brand_to_cars_table.sql"),
include_str!("./migrations/V3/V3__add_brand_to_cars_table.sql"),
)
.unwrap();

let migration4 = Migration::unapplied(
"V4__add_year_to_motos_table.sql",
include_str!("./migrations_subdir/V4__add_year_to_motos_table.sql"),
"V4__add_year_to_motos_table.rs",
&migrations::V4__add_year_to_motos_table::migration(),
)
.unwrap();

Expand All @@ -85,7 +80,7 @@ mod rusqlite {
#[test]
fn report_contains_applied_migrations() {
let mut conn = Connection::open_in_memory().unwrap();
let report = subdir::migrations::runner().run(&mut conn).unwrap();
let report = embedded::migrations::runner().run(&mut conn).unwrap();

let migrations = get_migrations();
let applied_migrations = report.applied_migrations();
Expand All @@ -111,7 +106,7 @@ mod rusqlite {
#[test]
fn embedded_creates_migration_table() {
let mut conn = Connection::open_in_memory().unwrap();
subdir::migrations::runner().run(&mut conn).unwrap();
embedded::migrations::runner().run(&mut conn).unwrap();
let table_name: String = conn
.query_row(
"SELECT name FROM sqlite_master WHERE type='table' AND name='refinery_schema_history'",
Expand All @@ -125,7 +120,7 @@ mod rusqlite {
#[test]
fn embedded_creates_migration_table_grouped_transaction() {
let mut conn = Connection::open_in_memory().unwrap();
subdir::migrations::runner()
embedded::migrations::runner()
.set_grouped(true)
.run(&mut conn)
.unwrap();
Expand All @@ -143,7 +138,7 @@ mod rusqlite {
fn embedded_applies_migration() {
let mut conn = Connection::open_in_memory().unwrap();

subdir::migrations::runner().run(&mut conn).unwrap();
embedded::migrations::runner().run(&mut conn).unwrap();

conn.execute(
"INSERT INTO persons (name, city) VALUES (?, ?)",
Expand All @@ -163,7 +158,7 @@ mod rusqlite {
fn embedded_applies_migration_grouped_transaction() {
let mut conn = Connection::open_in_memory().unwrap();

subdir::migrations::runner()
embedded::migrations::runner()
.set_grouped(true)
.run(&mut conn)
.unwrap();
Expand All @@ -186,7 +181,7 @@ mod rusqlite {
fn embedded_updates_schema_history() {
let mut conn = Connection::open_in_memory().unwrap();

subdir::migrations::runner().run(&mut conn).unwrap();
embedded::migrations::runner().run(&mut conn).unwrap();

let current = conn.get_last_applied_migration().unwrap().unwrap();

Expand All @@ -199,7 +194,7 @@ mod rusqlite {
fn embedded_updates_schema_history_grouped_transaction() {
let mut conn = Connection::open_in_memory().unwrap();

subdir::migrations::runner()
embedded::migrations::runner()
.set_grouped(true)
.run(&mut conn)
.unwrap();
Expand Down Expand Up @@ -256,58 +251,11 @@ mod rusqlite {
assert!(query.is_none());
}

#[test]
fn mod_creates_migration_table() {
let mut conn = Connection::open_in_memory().unwrap();
embedded::migrations::runner().run(&mut conn).unwrap();
let table_name: String = conn
.query_row(
"SELECT name FROM sqlite_master WHERE type='table' AND name='refinery_schema_history'",
[],
|row| row.get(0),
)
.unwrap();
assert_eq!("refinery_schema_history", table_name);
}

#[test]
fn mod_applies_migration() {
let mut conn = Connection::open_in_memory().unwrap();

embedded::migrations::runner().run(&mut conn).unwrap();

conn.execute(
"INSERT INTO persons (name, city) VALUES (?, ?)",
&["John Legend", "New York"],
)
.unwrap();
let (name, city): (String, String) = conn
.query_row("SELECT name, city FROM persons", [], |row| {
Ok((row.get(0).unwrap(), row.get(1).unwrap()))
})
.unwrap();
assert_eq!("John Legend", name);
assert_eq!("New York", city);
}

#[test]
fn mod_updates_schema_history() {
let mut conn = Connection::open_in_memory().unwrap();

embedded::migrations::runner().run(&mut conn).unwrap();

let current = conn.get_last_applied_migration().unwrap().unwrap();

assert_eq!(4, current.version());

assert_eq!(Local::today(), current.applied_on().unwrap().date());
}

#[test]
fn gets_applied_migrations() {
let mut conn = Connection::open_in_memory().unwrap();

subdir::migrations::runner().run(&mut conn).unwrap();
embedded::migrations::runner().run(&mut conn).unwrap();

let migrations = get_migrations();
let applied_migrations = conn.get_applied_migrations().unwrap();
Expand All @@ -333,7 +281,7 @@ mod rusqlite {
fn applies_new_migration() {
let mut conn = Connection::open_in_memory().unwrap();

subdir::migrations::runner().run(&mut conn).unwrap();
embedded::migrations::runner().run(&mut conn).unwrap();

let migrations = get_migrations();

Expand All @@ -351,7 +299,7 @@ mod rusqlite {
fn migrates_to_target_migration() {
let mut conn = Connection::open_in_memory().unwrap();

let report = subdir::migrations::runner()
let report = embedded::migrations::runner()
.set_target(Target::Version(3))
.run(&mut conn)
.unwrap();
Expand Down Expand Up @@ -382,7 +330,7 @@ mod rusqlite {
fn migrates_to_target_migration_grouped() {
let mut conn = Connection::open_in_memory().unwrap();

let report = subdir::migrations::runner()
let report = embedded::migrations::runner()
.set_target(Target::Version(3))
.set_grouped(true)
.run(&mut conn)
Expand Down Expand Up @@ -453,7 +401,7 @@ mod rusqlite {
Kind::DivergentVersion(applied, divergent) => {
assert_eq!(&migration, divergent);
assert_eq!(2, applied.version());
assert_eq!("add_cars_table", applied.name());
assert_eq!("add_cars_and_motos_table", applied.name());
}
_ => panic!("failed test"),
}
Expand Down Expand Up @@ -598,11 +546,12 @@ mod rusqlite {
"tests/sqlite_refinery.toml",
"files",
"-p",
"tests/migrations_subdir",
"tests/migrations",
])
.unwrap()
.assert()
.stdout(contains("applying migration: V4__add_year_to_motos_table"));
.stdout(contains("applying migration: V2__add_cars_and_motos_table"))
.stdout(contains("applying migration: V3__add_brand_to_cars_table"));
})
}
}
4 changes: 2 additions & 2 deletions refinery_cli/src/migrate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use std::path::Path;

use anyhow::Context;
use clap::ArgMatches;
use refinery_core::{config::Config, find_migration_files, Migration, Runner};
use refinery_core::{config::Config, find_migration_files, Migration, Runner, MigrationType};

pub fn handle_migration_command(args: &ArgMatches) -> anyhow::Result<()> {
//safe to call unwrap as we specified default values
Expand Down Expand Up @@ -37,7 +37,7 @@ fn run_files_migrations(
//safe to call unwrap as we specified default value
let path = arg.value_of("path").unwrap();
let path = Path::new(path);
let migration_files_path = find_migration_files(path)?;
let migration_files_path = find_migration_files(path, MigrationType::Sql)?;
let mut migrations = Vec::new();
for path in migration_files_path {
let sql = std::fs::read_to_string(path.as_path())
Expand Down
2 changes: 1 addition & 1 deletion refinery_core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ pub use crate::error::Error;
pub use crate::runner::{Migration, Report, Runner, Target};
pub use crate::traits::r#async::AsyncMigrate;
pub use crate::traits::sync::Migrate;
pub use crate::util::find_migration_files;
pub use crate::util::{find_migration_files, MigrationType};

#[cfg(feature = "rusqlite")]
pub use rusqlite;
Expand Down
12 changes: 5 additions & 7 deletions refinery_core/src/traits/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -121,23 +121,21 @@ mod tests {
fn get_migrations() -> Vec<Migration> {
let migration1 = Migration::unapplied(
"V1__initial.sql",
include_str!("../../../refinery/tests/migrations_subdir/V1-2/V1__initial.sql"),
"CREATE TABLE persons (id int, name varchar(255), city varchar(255));",
)
.unwrap();

let migration2 = Migration::unapplied(
"V2__add_cars_and_motos_table.sql",
include_str!(
"../../../refinery/tests/migrations_subdir/V1-2/V2__add_cars_and_motos_table.sql"
"../../../refinery/tests/migrations/V1-2/V2__add_cars_and_motos_table.sql"
),
)
.unwrap();

let migration3 = Migration::unapplied(
"V3__add_brand_to_cars_table",
include_str!(
"../../../refinery/tests/migrations_subdir/V3/V3__add_brand_to_cars_table.sql"
),
include_str!("../../../refinery/tests/migrations/V3/V3__add_brand_to_cars_table.sql"),
)
.unwrap();

Expand Down Expand Up @@ -180,7 +178,7 @@ mod tests {
Migration::unapplied(
"V3__add_brand_to_cars_tableeee",
include_str!(
"../../../refinery/tests/migrations_subdir/V3/V3__add_brand_to_cars_table.sql"
"../../../refinery/tests/migrations/V3/V3__add_brand_to_cars_table.sql"
),
)
.unwrap(),
Expand All @@ -206,7 +204,7 @@ mod tests {
Migration::unapplied(
"V3__add_brand_to_cars_tableeee",
include_str!(
"../../../refinery/tests/migrations_subdir/V3/V3__add_brand_to_cars_table.sql"
"../../../refinery/tests/migrations/V3/V3__add_brand_to_cars_table.sql"
),
)
.unwrap(),
Expand Down
Loading

0 comments on commit fa7c792

Please sign in to comment.