@@ -20,6 +20,7 @@ pub struct SqlDoc {
2020}
2121
2222/// Builder structure for the [`SqlDoc`]
23+ #[ derive( Debug , Eq , PartialEq ) ]
2324pub struct SqlDocBuilder {
2425 /// The source for implementing the [`SqlDoc`] to be built
2526 source : SqlFileDocSource ,
@@ -30,6 +31,7 @@ pub struct SqlDocBuilder {
3031}
3132
3233/// Enum for specifying a file doc source as a `directory` or a specific `file`
34+ #[ derive( Debug , Eq , PartialEq ) ]
3335enum SqlFileDocSource {
3436 Dir ( PathBuf ) ,
3537 File ( PathBuf ) ,
@@ -198,12 +200,12 @@ fn generate_docs_from_file<P: AsRef<Path>>(source: P) -> Result<(PathBuf, SqlFil
198200
199201#[ cfg( test) ]
200202mod tests {
201- use std:: { env, fs, path:: PathBuf } ;
203+ use std:: { env, fs, path:: PathBuf , vec } ;
202204
203205 use crate :: {
204206 SqlDoc ,
205207 docs:: { ColumnDoc , SqlFileDoc , TableDoc } ,
206- error:: DocError ,
208+ error:: DocError , sql_doc :: SqlDocBuilder ,
207209 } ;
208210
209211 #[ test]
@@ -435,4 +437,33 @@ mod tests {
435437 assert_eq ! ( sql_doc. files( ) . iter( ) . len( ) , 1 ) ;
436438 assert_eq ! ( sql_doc. files( ) , Some ( files) . as_deref( ) ) ;
437439 }
440+
441+ #[ test]
442+ fn test_sql_builder_deny_from_path ( ) {
443+ let actual_builder = SqlDoc :: from_path ( "path" ) . deny ( "path1" ) . deny ( "path2" ) . retain_files ( ) ;
444+ let expected_builder = SqlDocBuilder {
445+ source : crate :: sql_doc:: SqlFileDocSource :: File ( PathBuf :: from ( "path" ) ) ,
446+ deny : vec ! [ "path1" . to_string( ) , "path2" . to_string( ) ] ,
447+ retain_files : true
448+ } ;
449+ assert_eq ! ( actual_builder, expected_builder) ;
450+ }
451+ #[ test]
452+ fn test_sql_builder_to_sql_doc ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
453+ let base = env:: temp_dir ( ) . join ( "sql_builder_to_sql_doc" ) ;
454+ let _ = fs:: remove_dir_all ( & base) ;
455+ fs:: create_dir_all ( & base) ?;
456+ let file = base. join ( "test_file.sql" ) ;
457+ let sample = sample_sql ( ) ;
458+ let ( contents, expected) : ( Vec < _ > , Vec < _ > ) = sample. into_iter ( ) . unzip ( ) ;
459+ fs:: write ( & file, contents. join ( "" ) ) ?;
460+ let sql_doc = SqlDoc :: from_path ( & file) . build ( ) ?;
461+ let sql_doc_deny = SqlDoc :: from_dir ( & base) . deny ( file. to_str ( ) . map_or_else ( || panic ! ( "could not find path" ) , |val| val) ) . retain_files ( ) . build ( ) ?;
462+ let doc_deny = SqlDoc :: new ( vec ! [ ] , Some ( vec ! [ ] ) ) ;
463+ let doc = SqlDoc :: new ( expected. into_iter ( ) . flat_map ( SqlDoc :: into_tables) . collect ( ) , None ) ;
464+ assert_eq ! ( sql_doc, doc) ;
465+ assert_eq ! ( sql_doc_deny, doc_deny) ;
466+ let _ = fs:: remove_dir_all ( & base) ;
467+ Ok ( ( ) )
468+ }
438469}
0 commit comments