#[cfg(test)]
mod tests {
use std::{error::Error, fs, io::{self, BufRead}};
use crate::{Environment, QueryResult};
#[test]
fn test_to_csv() -> Result<(), Box<dyn Error>> {
let env = Environment::new()?;
let conn = env.connect_with_connection_string("DRIVER={SQLITE3 ODBC Driver};Database=test.db;{Journal Mode}=WAL")?;
let query_strings = r#"
DROP TABLE IF EXISTS CSV_TEST;
CREATE TABLE CSV_TEST(
ID INT PRIMARY KEY,
FIRST_NAME VARCHAR(50) NOT NULL,
LAST_NAME VARCHAR(50) NOT NULL
);
INSERT INTO CSV_TEST (ID, FIRST_NAME, LAST_NAME)
VALUES (1,"Scott","Cawthorn"),
(2,"Freddy","Fazbear");
SELECT * FROM CSV_TEST;
DROP TABLE IF EXISTS CSV_TEST
"#.split(';').collect();
let results = conn.execute_queries(query_strings)?;
let result = results.get(results.len()-2).unwrap();
fs::remove_file("test.csv")?;
result.to_csv("test.csv")?;
let file = fs::File::open("test.csv")?;
let reader = io::BufReader::new(file);
let mut file_lines:Vec<String> = Vec::new();
for line in reader.lines() {
file_lines.push(line?);
}
assert!(file_lines.get(0).unwrap() == "ID, FIRST_NAME, LAST_NAME");
assert!(file_lines.get(1).unwrap() == "1, Scott, Cawthorn");
assert!(file_lines.get(2).unwrap() == "2, Freddy, Fazbear");
fs::remove_file("test.csv")?;
Ok(())
}
#[test]
fn test_multiple_queries() -> Result<(),Box<dyn Error>> {
let env = Environment::new()?;
let conn = env.connect_with_connection_string("DRIVER={SQLITE3 ODBC Driver};Database=test.db;{Journal Mode}=WAL")?;
let query_strings = r#"
DROP TABLE IF EXISTS MULTQUERIESTEST;
CREATE TABLE MULTQUERIESTEST(
ID INT PRIMARY KEY,
FIRST_NAME VARCHAR(50) NOT NULL,
LAST_NAME VARCHAR(50) NOT NULL
);
INSERT INTO MULTQUERIESTEST (ID, FIRST_NAME, LAST_NAME )
VALUES (1,"Peter", "Griffin"),
(2, 'Lois','Griffin');
SELECT * FROM MULTQUERIESTEST;
DROP TABLE IF EXISTS MULTQUERIESTEST
"#.split(';').collect();
let results = conn.execute_queries(query_strings)?;
let result = results.get(results.len()-2).unwrap();
assert!(matches!(result, QueryResult::Result { rows: _, col_names: _ }));
match result {
QueryResult::Result { rows, col_names } => {
assert!(vec![vec!["1","Peter","Griffin"],vec!["2","Lois","Griffin"]]==*rows);
assert!(vec!["ID","FIRST_NAME","LAST_NAME"]==*col_names);
return Ok(());
}
QueryResult::None =>{
println!("empty");
return Ok(());
}
};
}
}