11use vine_core:: storage_reader:: read_vine_data;
22use vine_core:: metadata:: { Metadata , MetadataField } ;
33use vine_core:: vortex_exp:: write_vortex_file;
4+ use vine_core:: arrow_bridge:: vortex_to_arrow;
45use tempfile:: tempdir;
56use std:: fs;
67
@@ -24,118 +25,97 @@ fn create_test_metadata() -> Metadata {
2425 )
2526}
2627
28+ /// Helper: count total rows from read results using Arrow conversion
29+ fn total_rows ( arrays : & [ vortex:: ArrayRef ] ) -> usize {
30+ arrays. iter ( ) . map ( |a| {
31+ vortex_to_arrow ( a, true ) . expect ( "Failed to convert" ) . num_rows ( )
32+ } ) . sum ( )
33+ }
34+
2735#[ test]
2836fn test_read_vine_data_single_file ( ) {
2937 let temp_dir = tempdir ( ) . expect ( "Failed to create temp dir" ) ;
3038 let base_path = temp_dir. path ( ) ;
3139
32- // Create metadata
3340 let metadata = create_test_metadata ( ) ;
3441 let meta_path = base_path. join ( "vine_meta.json" ) ;
3542 metadata. save ( meta_path. to_str ( ) . unwrap ( ) ) . expect ( "Failed to save metadata" ) ;
3643
37- // Create date directory
3844 let date_dir = base_path. join ( "2024-01-15" ) ;
3945 fs:: create_dir ( & date_dir) . expect ( "Failed to create date dir" ) ;
4046
41- // Write test data
42- let csv_rows = vec ! [ "1,Alice" . to_string( ) , "2,Bob" . to_string( ) ] ;
43- let csv_rows_refs: Vec < & str > = csv_rows. iter ( ) . map ( |s| s. as_str ( ) ) . collect ( ) ;
4447 let vtx_path = date_dir. join ( "data_120000_000000.vtx" ) ;
45- write_vortex_file ( & vtx_path, & metadata, & csv_rows_refs )
48+ write_vortex_file ( & vtx_path, & metadata, & [ "1,Alice" , "2,Bob" ] )
4649 . expect ( "Failed to write vortex file" ) ;
4750
48- // Read data
4951 let result = read_vine_data ( base_path. to_str ( ) . unwrap ( ) ) ;
52+ assert_eq ! ( result. len( ) , 1 ) ; // 1 file = 1 array
53+ assert_eq ! ( total_rows( & result) , 2 ) ;
5054
51- assert_eq ! ( result . len ( ) , 2 ) ;
52- assert_eq ! ( result[ 0 ] , "1,Alice ") ;
53- assert_eq ! ( result [ 1 ] , "2,Bob" ) ;
55+ // Verify column structure
56+ let batch = vortex_to_arrow ( & result[ 0 ] , true ) . expect ( "Failed to convert ") ;
57+ assert_eq ! ( batch . num_columns ( ) , 2 ) ;
5458}
5559
5660#[ test]
5761fn test_read_vine_data_multiple_files ( ) {
5862 let temp_dir = tempdir ( ) . expect ( "Failed to create temp dir" ) ;
5963 let base_path = temp_dir. path ( ) ;
6064
61- // Create metadata
6265 let metadata = create_test_metadata ( ) ;
6366 let meta_path = base_path. join ( "vine_meta.json" ) ;
6467 metadata. save ( meta_path. to_str ( ) . unwrap ( ) ) . expect ( "Failed to save metadata" ) ;
6568
66- // Create date directory
6769 let date_dir = base_path. join ( "2024-01-15" ) ;
6870 fs:: create_dir ( & date_dir) . expect ( "Failed to create date dir" ) ;
6971
70- // Write first file
71- let csv_rows1 = vec ! [ "1,Alice" . to_string( ) ] ;
72- let csv_rows1_refs: Vec < & str > = csv_rows1. iter ( ) . map ( |s| s. as_str ( ) ) . collect ( ) ;
7372 let vtx_path1 = date_dir. join ( "data_120000_000000.vtx" ) ;
74- write_vortex_file ( & vtx_path1, & metadata, & csv_rows1_refs )
73+ write_vortex_file ( & vtx_path1, & metadata, & [ "1,Alice" ] )
7574 . expect ( "Failed to write first vortex file" ) ;
7675
77- // Write second file
78- let csv_rows2 = vec ! [ "2,Bob" . to_string( ) ] ;
79- let csv_rows2_refs: Vec < & str > = csv_rows2. iter ( ) . map ( |s| s. as_str ( ) ) . collect ( ) ;
8076 let vtx_path2 = date_dir. join ( "data_130000_000000.vtx" ) ;
81- write_vortex_file ( & vtx_path2, & metadata, & csv_rows2_refs )
77+ write_vortex_file ( & vtx_path2, & metadata, & [ "2,Bob" ] )
8278 . expect ( "Failed to write second vortex file" ) ;
8379
84- // Read data
8580 let result = read_vine_data ( base_path. to_str ( ) . unwrap ( ) ) ;
86-
87- assert_eq ! ( result. len( ) , 2 ) ;
81+ assert_eq ! ( total_rows( & result) , 2 ) ;
8882}
8983
9084#[ test]
9185fn test_read_vine_data_multiple_dates ( ) {
9286 let temp_dir = tempdir ( ) . expect ( "Failed to create temp dir" ) ;
9387 let base_path = temp_dir. path ( ) ;
9488
95- // Create metadata
9689 let metadata = create_test_metadata ( ) ;
9790 let meta_path = base_path. join ( "vine_meta.json" ) ;
9891 metadata. save ( meta_path. to_str ( ) . unwrap ( ) ) . expect ( "Failed to save metadata" ) ;
9992
100- // Create first date directory
10193 let date_dir1 = base_path. join ( "2024-01-14" ) ;
10294 fs:: create_dir ( & date_dir1) . expect ( "Failed to create first date dir" ) ;
103- let csv_rows1 = vec ! [ "1,Alice" . to_string( ) ] ;
104- let csv_rows1_refs: Vec < & str > = csv_rows1. iter ( ) . map ( |s| s. as_str ( ) ) . collect ( ) ;
10595 let vtx_path1 = date_dir1. join ( "data_120000_000000.vtx" ) ;
106- write_vortex_file ( & vtx_path1, & metadata, & csv_rows1_refs )
96+ write_vortex_file ( & vtx_path1, & metadata, & [ "1,Alice" ] )
10797 . expect ( "Failed to write first vortex file" ) ;
10898
109- // Create second date directory
11099 let date_dir2 = base_path. join ( "2024-01-15" ) ;
111100 fs:: create_dir ( & date_dir2) . expect ( "Failed to create second date dir" ) ;
112- let csv_rows2 = vec ! [ "2,Bob" . to_string( ) ] ;
113- let csv_rows2_refs: Vec < & str > = csv_rows2. iter ( ) . map ( |s| s. as_str ( ) ) . collect ( ) ;
114101 let vtx_path2 = date_dir2. join ( "data_120000_000000.vtx" ) ;
115- write_vortex_file ( & vtx_path2, & metadata, & csv_rows2_refs )
102+ write_vortex_file ( & vtx_path2, & metadata, & [ "2,Bob" ] )
116103 . expect ( "Failed to write second vortex file" ) ;
117104
118- // Read data (should be in chronological order)
119105 let result = read_vine_data ( base_path. to_str ( ) . unwrap ( ) ) ;
120-
121- assert_eq ! ( result. len( ) , 2 ) ;
122- assert_eq ! ( result[ 0 ] , "1,Alice" ) ; // 2024-01-14 comes first
123- assert_eq ! ( result[ 1 ] , "2,Bob" ) ; // 2024-01-15 comes second
106+ assert_eq ! ( total_rows( & result) , 2 ) ;
124107}
125108
126109#[ test]
127110fn test_read_vine_data_empty_directory ( ) {
128111 let temp_dir = tempdir ( ) . expect ( "Failed to create temp dir" ) ;
129112 let base_path = temp_dir. path ( ) ;
130113
131- // Create metadata
132114 let metadata = create_test_metadata ( ) ;
133115 let meta_path = base_path. join ( "vine_meta.json" ) ;
134116 metadata. save ( meta_path. to_str ( ) . unwrap ( ) ) . expect ( "Failed to save metadata" ) ;
135117
136- // Read data from empty directory
137118 let result = read_vine_data ( base_path. to_str ( ) . unwrap ( ) ) ;
138-
139119 assert ! ( result. is_empty( ) ) ;
140120}
141121
@@ -144,10 +124,7 @@ fn test_read_vine_data_missing_metadata() {
144124 let temp_dir = tempdir ( ) . expect ( "Failed to create temp dir" ) ;
145125 let base_path = temp_dir. path ( ) ;
146126
147- // Don't create metadata file
148127 let result = read_vine_data ( base_path. to_str ( ) . unwrap ( ) ) ;
149-
150- // Should return empty vector on error
151128 assert ! ( result. is_empty( ) ) ;
152129}
153130
@@ -156,61 +133,42 @@ fn test_read_vine_data_ignores_non_vtx_files() {
156133 let temp_dir = tempdir ( ) . expect ( "Failed to create temp dir" ) ;
157134 let base_path = temp_dir. path ( ) ;
158135
159- // Create metadata
160136 let metadata = create_test_metadata ( ) ;
161137 let meta_path = base_path. join ( "vine_meta.json" ) ;
162138 metadata. save ( meta_path. to_str ( ) . unwrap ( ) ) . expect ( "Failed to save metadata" ) ;
163139
164- // Create date directory
165140 let date_dir = base_path. join ( "2024-01-15" ) ;
166141 fs:: create_dir ( & date_dir) . expect ( "Failed to create date dir" ) ;
167142
168- // Write vtx file
169- let csv_rows = vec ! [ "1,Alice" . to_string( ) ] ;
170- let csv_rows_refs: Vec < & str > = csv_rows. iter ( ) . map ( |s| s. as_str ( ) ) . collect ( ) ;
171143 let vtx_path = date_dir. join ( "data_120000_000000.vtx" ) ;
172- write_vortex_file ( & vtx_path, & metadata, & csv_rows_refs )
144+ write_vortex_file ( & vtx_path, & metadata, & [ "1,Alice" ] )
173145 . expect ( "Failed to write vortex file" ) ;
174146
175- // Create non-vtx file
176147 let txt_path = date_dir. join ( "README.txt" ) ;
177148 fs:: write ( & txt_path, "This should be ignored" ) . expect ( "Failed to write txt file" ) ;
178149
179- // Read data
180150 let result = read_vine_data ( base_path. to_str ( ) . unwrap ( ) ) ;
181-
182- // Should only read the .vtx file
183- assert_eq ! ( result. len( ) , 1 ) ;
184- assert_eq ! ( result[ 0 ] , "1,Alice" ) ;
151+ assert_eq ! ( total_rows( & result) , 1 ) ;
185152}
186153
187154#[ test]
188155fn test_read_vine_data_ignores_invalid_date_directories ( ) {
189156 let temp_dir = tempdir ( ) . expect ( "Failed to create temp dir" ) ;
190157 let base_path = temp_dir. path ( ) ;
191158
192- // Create metadata
193159 let metadata = create_test_metadata ( ) ;
194160 let meta_path = base_path. join ( "vine_meta.json" ) ;
195161 metadata. save ( meta_path. to_str ( ) . unwrap ( ) ) . expect ( "Failed to save metadata" ) ;
196162
197- // Create valid date directory
198163 let valid_date_dir = base_path. join ( "2024-01-15" ) ;
199164 fs:: create_dir ( & valid_date_dir) . expect ( "Failed to create valid date dir" ) ;
200- let csv_rows = vec ! [ "1,Alice" . to_string( ) ] ;
201- let csv_rows_refs: Vec < & str > = csv_rows. iter ( ) . map ( |s| s. as_str ( ) ) . collect ( ) ;
202165 let vtx_path = valid_date_dir. join ( "data_120000_000000.vtx" ) ;
203- write_vortex_file ( & vtx_path, & metadata, & csv_rows_refs )
166+ write_vortex_file ( & vtx_path, & metadata, & [ "1,Alice" ] )
204167 . expect ( "Failed to write vortex file" ) ;
205168
206- // Create invalid date directory
207169 let invalid_date_dir = base_path. join ( "not-a-date" ) ;
208170 fs:: create_dir ( & invalid_date_dir) . expect ( "Failed to create invalid date dir" ) ;
209171
210- // Read data
211172 let result = read_vine_data ( base_path. to_str ( ) . unwrap ( ) ) ;
212-
213- // Should only read from valid date directory
214- assert_eq ! ( result. len( ) , 1 ) ;
215- assert_eq ! ( result[ 0 ] , "1,Alice" ) ;
173+ assert_eq ! ( total_rows( & result) , 1 ) ;
216174}
0 commit comments