vapor_cli/
lib.rs

1pub mod bookmarks;
2pub mod db;
3pub mod display;
4pub mod export;
5pub mod transactions;
6pub mod repl;
7
8pub use repl::repl_mode;
9pub use db::list_tables;
10pub use display::{execute_sql, show_table_schema, show_all_schemas, show_database_info, OutputFormat, QueryOptions};
11pub use export::export_to_csv;
12
13#[cfg(test)]
14mod tests {
15    use super::*;
16    use tempfile::NamedTempFile;
17
18    #[test]
19    fn test_list_tables() {
20        let temp_db = NamedTempFile::new().unwrap();
21        let db_path = temp_db.path().to_str().unwrap();
22        
23        // Create a test database with a table
24        let conn = rusqlite::Connection::open(db_path).unwrap();
25        conn.execute(
26            "CREATE TABLE test_table (id INTEGER PRIMARY KEY, name TEXT)",
27            [],
28        ).unwrap();
29        
30        // Test listing tables
31        let tables = list_tables(db_path).unwrap();
32        assert!(tables.contains(&"test_table".to_string()));
33    }
34
35    #[test]
36    fn test_execute_sql() {
37        let temp_db = NamedTempFile::new().unwrap();
38        let db_path = temp_db.path().to_str().unwrap();
39        
40        let conn = rusqlite::Connection::open(db_path).unwrap();
41        conn.execute(
42            "CREATE TABLE test_table (id INTEGER PRIMARY KEY, name TEXT)",
43            [],
44        ).unwrap();
45        
46        // Test inserting data
47        execute_sql(&conn, "INSERT INTO test_table (name) VALUES ('test')", &QueryOptions::default()).unwrap();
48        
49        // Test selecting data with explicit column types
50        execute_sql(&conn, "SELECT id, name FROM test_table", &QueryOptions::default()).unwrap();
51    }
52
53    #[test]
54    fn test_show_table_schema() {
55        let temp_db = NamedTempFile::new().unwrap();
56        let db_path = temp_db.path().to_str().unwrap();
57        
58        let conn = rusqlite::Connection::open(db_path).unwrap();
59        conn.execute(
60            "CREATE TABLE test_table (id INTEGER PRIMARY KEY, name TEXT)",
61            [],
62        ).unwrap();
63        
64        // Test showing schema
65        show_table_schema(&conn, "test_table").unwrap();
66    }
67
68    #[test]
69    fn test_show_all_schemas() {
70        let temp_db = NamedTempFile::new().unwrap();
71        let db_path = temp_db.path().to_str().unwrap();
72        
73        let conn = rusqlite::Connection::open(db_path).unwrap();
74        conn.execute(
75            "CREATE TABLE test_table (id INTEGER PRIMARY KEY, name TEXT)",
76            [],
77        ).unwrap();
78        
79        // Test showing all schemas
80        show_all_schemas(&conn).unwrap();
81    }
82
83    #[test]
84    fn test_show_database_info() {
85        let temp_db = NamedTempFile::new().unwrap();
86        let db_path = temp_db.path().to_str().unwrap();
87        
88        let conn = rusqlite::Connection::open(db_path).unwrap();
89        conn.execute(
90            "CREATE TABLE test_table (id INTEGER PRIMARY KEY, name TEXT)",
91            [],
92        ).unwrap();
93        
94        // Test showing database info
95        show_database_info(&conn, db_path).unwrap();
96    }
97}