on main help sign in
Use TOML for migrations in test framework
a7d70f8fabianlindfors
tests/add_column.rs+41−42
@@ -7,51 +7,50 @@ fn add_column() {
7 let mut test = common::Test::new("Add column");
7 let mut test = common::Test::new("Add column");
8
8
9 test.first_migration(
9 test.first_migration(
10+ r#"
10− Migration::new("create_user_table", None).with_action(
11+ name = "create_user_table"
11− CreateTableBuilder::default()
12+
13+ [[actions]]
14+ type = "create_table"
12− .name("users")
15+ name = "users"
13− .primary_key(vec!["id".to_string()])
16+ primary_key = ["id"]
17+
14− .columns(vec![
18+ [[actions.columns]]
15− ColumnBuilder::default()
16− .name("id")
19+ name = "id"
17− .data_type("INTEGER")
20+ type = "INTEGER"
18− .build()
21+
19− .unwrap(),
22+ [[actions.columns]]
20− ColumnBuilder::default()
21− .name("name")
23+ name = "name"
22− .data_type("TEXT")
24+ type = "TEXT"
23− .build()
24− .unwrap(),
25− ])
26− .build()
27− .unwrap(),
28− ),
25+ "#,
29 );
26 );
30
27
31 test.second_migration(
28 test.second_migration(
29+ r#"
32− Migration::new("add_first_and_last_name_columns", None)
30+ name = "add_first_and_last_name_columns"
33− .with_action(AddColumn {
31+
32+ [[actions]]
33+ type = "add_column"
34− table: "users".to_string(),
34+ table = "users"
35− column: Column {
35+
36+ up = "(STRING_TO_ARRAY(name, ' '))[1]"
37+
38+ [actions.column]
36− name: "first".to_string(),
39+ name = "first"
37− data_type: "TEXT".to_string(),
40+ type = "TEXT"
38− nullable: false,
41+ nullable = false
39− default: None,
42+
40− generated: None,
43+ [[actions]]
41− },
44+ type = "add_column"
45+ table = "users"
46+
42− up: Some("(STRING_TO_ARRAY(name, ' '))[1]".to_string()),
47+ up = "(STRING_TO_ARRAY(name, ' '))[2]"
43− })
48+
44− .with_action(AddColumn {
45− table: "users".to_string(),
46− column: Column {
49+ [actions.column]
47− name: "last".to_string(),
50+ name = "last"
48− data_type: "TEXT".to_string(),
51+ type = "TEXT"
49− nullable: false,
52+ nullable = false
50− default: None,
53+ "#,
51− generated: None,
52− },
53− up: Some("(STRING_TO_ARRAY(name, ' '))[2]".to_string()),
54− }),
55 );
54 );
56
55
57 test.after_first(|db| {
56 test.after_first(|db| {
tests/common.rs+8−4
@@ -41,13 +41,13 @@ impl Test<'_> {
41 }
41 }
42 }
42 }
43
43
44− pub fn first_migration(&mut self, migration: Migration) -> &mut Self {
44+ pub fn first_migration(&mut self, migration: &str) -> &mut Self {
45− self.first_migration = Some(migration);
45+ self.first_migration = Some(Self::parse_migration(migration));
46 self
46 self
47 }
47 }
48
48
49− pub fn second_migration(&mut self, migration: Migration) -> &mut Self {
49+ pub fn second_migration(&mut self, migration: &str) -> &mut Self {
50− self.second_migration = Some(migration);
50+ self.second_migration = Some(Self::parse_migration(migration));
51 self
51 self
52 }
52 }
53
53
@@ -70,6 +70,10 @@ impl Test<'_> {
70 self.after_abort_fn = Some(f);
70 self.after_abort_fn = Some(f);
71 self
71 self
72 }
72 }
73+
74+ fn parse_migration(encoded: &str) -> Migration {
75+ toml::from_str(encoded).unwrap()
76+ }
73}
77}
74
78
75enum RunType {
79enum RunType {
tests/create_table.rs+23−27
@@ -7,33 +7,29 @@ fn create_table() {
7 let mut test = common::Test::new("Create table");
7 let mut test = common::Test::new("Create table");
8
8
9 test.first_migration(
9 test.first_migration(
10+ r#"
10− Migration::new("create_users_table", None).with_action(
11+ name = "create_users_table"
11− CreateTableBuilder::default()
12+
13+ [[actions]]
14+ type = "create_table"
12− .name("users")
15+ name = "users"
13− .primary_key(vec!["id".to_string()])
16+ primary_key = ["id"]
17+
14− .columns(vec![
18+ [[actions.columns]]
15− ColumnBuilder::default()
16− .name("id")
19+ name = "id"
17− .data_type("INTEGER")
20+ type = "INTEGER"
18− .generated("ALWAYS AS IDENTITY")
21+ generated = "ALWAYS AS IDENTITY"
19− .build()
22+
20− .unwrap(),
23+ [[actions.columns]]
21− ColumnBuilder::default()
22− .name("name")
24+ name = "name"
23− .data_type("TEXT")
25+ type = "TEXT"
24− .build()
26+
25− .unwrap(),
27+ [[actions.columns]]
26− ColumnBuilder::default()
27− .name("created_at")
28+ name = "created_at"
28− .data_type("TIMESTAMP")
29+ type = "TIMESTAMP"
29− .nullable(false)
30+ nullable = false
30− .default_value("NOW()")
31+ default = "NOW()"
31− .build()
32− .unwrap(),
33− ])
34− .build()
35− .unwrap(),
36− ),
32+ "#,
37 );
33 );
38
34
39 test.after_first(|db| {
35 test.after_first(|db| {