@@ -396,9 +396,9 @@ impl FileStreamMetrics {
396396
397397#[ cfg( test) ]
398398mod tests {
399- use crate :: PartitionedFile ;
400- use crate :: file_scan_config:: FileScanConfigBuilder ;
399+ use crate :: file_scan_config:: { FileScanConfig , FileScanConfigBuilder } ;
401400 use crate :: tests:: make_partition;
401+ use crate :: { PartitionedFile , TableSchema } ;
402402 use datafusion_common:: error:: Result ;
403403 use datafusion_execution:: object_store:: ObjectStoreUrl ;
404404 use datafusion_physical_plan:: metrics:: ExecutionPlanMetricsSet ;
@@ -526,7 +526,7 @@ mod tests {
526526
527527 let on_error = self . on_error ;
528528
529- let table_schema = crate :: table_schema :: TableSchema :: new ( file_schema, vec ! [ ] ) ;
529+ let table_schema = TableSchema :: new ( file_schema, vec ! [ ] ) ;
530530 let config = FileScanConfigBuilder :: new (
531531 ObjectStoreUrl :: parse ( "test:///" ) . unwrap ( ) ,
532532 Arc :: new ( MockSource :: new ( table_schema) ) ,
@@ -540,8 +540,7 @@ mod tests {
540540 . with_file_opener ( Arc :: new ( self . opener ) )
541541 . with_metrics ( & metrics_set)
542542 . with_on_error ( on_error)
543- . build ( )
544- . unwrap ( ) ;
543+ . build ( ) ?;
545544
546545 file_stream
547546 . collect :: < Vec < _ > > ( )
@@ -562,6 +561,23 @@ mod tests {
562561 . expect ( "error executing stream" )
563562 }
564563
564+ /// Create the smallest valid file scan config for builder validation tests.
565+ fn builder_test_config ( ) -> FileScanConfig {
566+ let table_schema = TableSchema :: new ( Arc :: new ( Schema :: empty ( ) ) , vec ! [ ] ) ;
567+ FileScanConfigBuilder :: new (
568+ ObjectStoreUrl :: parse ( "test:///" ) . unwrap ( ) ,
569+ Arc :: new ( MockSource :: new ( table_schema) ) ,
570+ )
571+ . with_file ( PartitionedFile :: new ( "mock_file" , 10 ) )
572+ . build ( )
573+ }
574+
575+ /// Convenience helper to keep builder error assertions focused on the
576+ /// specific missing or invalid input under test.
577+ fn builder_error ( builder : FileStreamBuilder < ' _ > ) -> String {
578+ builder. build ( ) . err ( ) . unwrap ( ) . to_string ( )
579+ }
580+
565581 #[ tokio:: test]
566582 async fn on_error_opening ( ) -> Result < ( ) > {
567583 let batches = FileStreamTest :: new ( )
@@ -859,65 +875,33 @@ mod tests {
859875
860876 #[ test]
861877 fn builder_requires_partition_file_opener_and_metrics ( ) {
862- let table_schema =
863- crate :: table_schema:: TableSchema :: new ( Arc :: new ( Schema :: empty ( ) ) , vec ! [ ] ) ;
864- let config = FileScanConfigBuilder :: new (
865- ObjectStoreUrl :: parse ( "test:///" ) . unwrap ( ) ,
866- Arc :: new ( MockSource :: new ( table_schema) ) ,
867- )
868- . with_file ( PartitionedFile :: new ( "mock_file" , 10 ) )
869- . build ( ) ;
878+ let config = builder_test_config ( ) ;
870879
871- let err = FileStreamBuilder :: new ( & config) . build ( ) . err ( ) . unwrap ( ) ;
872- assert ! (
873- err. to_string( )
874- . contains( "FileStreamBuilder missing required field: partition" )
875- ) ;
880+ let err = builder_error ( FileStreamBuilder :: new ( & config) ) ;
881+ assert ! ( err. contains( "FileStreamBuilder missing required field: partition" ) ) ;
876882
877- let err = FileStreamBuilder :: new ( & config)
878- . with_partition ( 0 )
879- . build ( )
880- . err ( )
881- . unwrap ( ) ;
882- assert ! (
883- err. to_string( )
884- . contains( "FileStreamBuilder missing required field: file_opener" )
885- ) ;
883+ let err = builder_error ( FileStreamBuilder :: new ( & config) . with_partition ( 0 ) ) ;
884+ assert ! ( err. contains( "FileStreamBuilder missing required field: file_opener" ) ) ;
886885
887- let err = FileStreamBuilder :: new ( & config)
888- . with_partition ( 0 )
889- . with_file_opener ( Arc :: new ( TestOpener :: default ( ) ) )
890- . build ( )
891- . err ( )
892- . unwrap ( ) ;
893- assert ! (
894- err. to_string( )
895- . contains( "FileStreamBuilder missing required field: metrics" )
886+ let err = builder_error (
887+ FileStreamBuilder :: new ( & config)
888+ . with_partition ( 0 )
889+ . with_file_opener ( Arc :: new ( TestOpener :: default ( ) ) ) ,
896890 ) ;
891+ assert ! ( err. contains( "FileStreamBuilder missing required field: metrics" ) ) ;
897892 }
898893
899894 #[ test]
900895 fn builder_errors_on_invalid_partition ( ) {
901- let table_schema =
902- crate :: table_schema:: TableSchema :: new ( Arc :: new ( Schema :: empty ( ) ) , vec ! [ ] ) ;
903- let config = FileScanConfigBuilder :: new (
904- ObjectStoreUrl :: parse ( "test:///" ) . unwrap ( ) ,
905- Arc :: new ( MockSource :: new ( table_schema) ) ,
906- )
907- . with_file ( PartitionedFile :: new ( "mock_file" , 10 ) )
908- . build ( ) ;
896+ let config = builder_test_config ( ) ;
909897 let metrics = ExecutionPlanMetricsSet :: new ( ) ;
910898
911- let err = FileStreamBuilder :: new ( & config)
912- . with_partition ( 1 )
913- . with_file_opener ( Arc :: new ( TestOpener :: default ( ) ) )
914- . with_metrics ( & metrics)
915- . build ( )
916- . err ( )
917- . unwrap ( ) ;
918- assert ! (
919- err. to_string( )
920- . contains( "FileStreamBuilder invalid partition index: 1" )
899+ let err = builder_error (
900+ FileStreamBuilder :: new ( & config)
901+ . with_partition ( 1 )
902+ . with_file_opener ( Arc :: new ( TestOpener :: default ( ) ) )
903+ . with_metrics ( & metrics) ,
921904 ) ;
905+ assert ! ( err. contains( "FileStreamBuilder invalid partition index: 1" ) ) ;
922906 }
923907}
0 commit comments