rust_sql_organizer/sql_file/
mod.rs

1use std::{fs, path::Path};
2
3pub mod error;
4use error::Error;
5
6#[derive(Debug, Clone)]
7pub struct SqlFile {
8    file_name: String,
9    sql_text: String,
10}
11
12impl SqlFile {
13    pub fn new(path: &Path) -> Result<SqlFile, Error> {
14        let file_name = path
15            .file_stem()
16            .expect("No file stem was found")
17            .to_str()
18            .expect("File name is empty!")
19            .to_string();
20        let sql_text = fs::read_to_string(path)?;
21        Ok(SqlFile {
22            file_name,
23            sql_text,
24        })
25    }
26
27    #[cfg(test)]
28    pub fn test_new(file_name: &str, sql_text: &str) -> SqlFile {
29        SqlFile {
30            file_name: file_name.to_string(),
31            sql_text: sql_text.to_string(),
32        }
33    }
34
35    pub fn get_file_name(&self) -> &str {
36        self.file_name.as_str()
37    }
38
39    pub fn get_sql_text(&self) -> &str {
40        self.sql_text.as_str()
41    }
42}
43
44#[cfg(test)]
45mod test_sql_file {
46    use std::path::Path;
47    #[cfg(test)]
48    use std::path::PathBuf;
49
50    #[cfg(test)]
51    use tempdir::TempDir;
52
53    use super::SqlFile;
54    use std::fs::File;
55    use std::io::Write;
56
57    #[cfg(test)]
58    fn create_temp_file(prefix: &str, file_name: &str) -> (TempDir, PathBuf) {
59        let tmp_dir = TempDir::new(prefix).unwrap();
60        let file_path = tmp_dir.path().join(Path::new(file_name));
61        let mut file = File::create(&file_path).unwrap();
62        writeln!(file, "SELECT 1;").unwrap();
63        (tmp_dir, file_path)
64    }
65
66    #[test]
67    fn test_sql_file() {
68        let (tmp_dir, file) = create_temp_file("test_sql_file", "test.sql");
69        let result = SqlFile::new(&file);
70        assert!(result.is_ok());
71        let sql_file = result.unwrap();
72        assert_eq!(sql_file.get_file_name(), "test");
73        assert_eq!(sql_file.get_sql_text().trim(), "SELECT 1;");
74        drop(tmp_dir);
75    }
76
77    #[test]
78    fn test_sql_file_error() {
79        let result = SqlFile::new(Path::new("not_exists.sql"));
80        assert!(result.is_err())
81    }
82}