diff options
author | Teddy Wing | 2022-03-13 01:01:46 +0100 |
---|---|---|
committer | Teddy Wing | 2022-03-13 01:01:46 +0100 |
commit | e88bcdebd09d3644d8df1dd04386f121d83ef5da (patch) | |
tree | 20792571d2b4ee1a54d04bdde6f416d16ea38674 /src/lib.rs | |
parent | 8dd59ee6fee0f023a75d4657ad07f6f09b14fc9c (diff) | |
download | yaqlite-e88bcdebd09d3644d8df1dd04386f121d83ef5da.tar.bz2 |
yaqlite::insert(): Add test
Check that the function inserts a record into the database based on a
YAML input.
Adjust the `extract()` function to take the table name as an argument.
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 92 |
1 files changed, 91 insertions, 1 deletions
@@ -12,8 +12,98 @@ pub fn insert( for mut doc in data { let tx = dbconn.transaction().unwrap(); - crate::yaml::extract(&mut doc, &tx, &table_columns); + crate::yaml::extract(&mut doc, &tx, &table_name, &table_columns); tx.commit().unwrap(); } } + + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn inserts_yaml_in_database() { + let mut conn = rusqlite::Connection::open_in_memory().unwrap(); + + conn.execute( + r#" + CREATE TABLE "test" ( + id INTEGER PRIMARY KEY, + count INTEGER, + weight REAL, + description TEXT + ); + "#, + [] + ).unwrap(); + + #[derive(Debug, PartialEq)] + struct TestRecord { + id: i8, + count: i16, + weight: f32, + description: String, + } + + let description = r#"This is a test. + + Another paragraph + with a flowed line."#; + + let expected = TestRecord { + id: 1, + count: 99, + weight: 3.14, + description: r#"This is a test. +Another paragraph with a flowed line."#.to_owned(), + }; + + let yaml_str = format!( +r#"- description: >- + {} + count: {} + weight: {} +"#, + description, + expected.count, + expected.weight, + ); + + let mut data = yaml_rust::YamlLoader::load_from_str(&yaml_str).unwrap(); + + insert(&mut conn, "test", &mut data); + + { + let mut stmt = conn.prepare(r#" + SELECT + id, count, weight, description + FROM "test" + LIMIT 1; + "#).unwrap(); + + let got = stmt.query_row( + [], + |row| { + Ok( + TestRecord { + id: row.get(0).unwrap(), + count: row.get(1).unwrap(), + weight: row.get(2).unwrap(), + description: row.get(3).unwrap(), + } + ) + } + ).unwrap(); + + assert_eq!(expected, got); + } + + conn.close().unwrap(); + } + + #[test] + fn ignores_yaml_fields_that_are_not_column_names() { + } +} |