99use PHPUnit \Framework \TestCase ;
1010use Verseles \Flyclone \Providers \Provider ;
1111use Verseles \Flyclone \Rclone ;
12-
1312abstract class AbstractProviderTest extends TestCase
1413{
1514 use Helpers;
16- use ProgressTrackingTrait;
17-
18- // Added the new trait for progress testing capabilities
15+ use ProgressTrackingTrait; // Added the new trait for progress testing capabilities
1916
2017 protected string $ leftProviderName = 'undefined_disk ' ; // Name of the provider under test
2118 protected string $ working_directory = '/tmp ' ; // Base working directory for tests on the provider
@@ -84,7 +81,6 @@ public function touch_a_file(Rclone $left_side) : array
8481
8582 $ result = $ left_side ->touch ($ temp_filepath ); // Execute touch command
8683 self ::assertTrue ($ result , "Rclone touch command failed for {$ temp_filepath }" );
87-
8884 $ file_info = $ left_side ->is_file ($ temp_filepath ); // Verify file existence
8985
9086 self ::assertTrue ($ file_info ->exists , "File not created at {$ temp_filepath } after touch. " );
@@ -94,8 +90,6 @@ public function touch_a_file(Rclone $left_side) : array
9490 (isset ($ file_info ->details ->Size ) && ($ file_info ->details ->Size === 0 || $ file_info ->details ->Size === -1 )),
9591 'File created by touch should be empty (Size 0 or -1). Actual size: ' . ($ file_info ->details ->Size ?? 'N/A ' )
9692 );
97-
98-
9993 return [$ left_side , $ temp_filepath ];
10094 }
10195
@@ -105,103 +99,87 @@ public function touch_a_file(Rclone $left_side) : array
10599 *
106100 * @param array $params Array from touch_a_file: [Rclone instance, filepath].
107101 *
108- * @return array Returns an array containing the Rclone instance, the filepath, and the written content.
102+ * @return array Returns an array containing the Rclone instance, the filepath, and the content.
109103 */
110104 #[Test]
111105 #[Depends('touch_a_file ' )]
112106 public function write_to_a_file ($ params ) : array
113107 {
114108 $ content = 'But my father lives at https://helio.me ' ;
115-
116109 /** @var Rclone $left_side */
117110 [$ left_side , $ temp_filepath ] = $ params ;
118111
119112 $ left_side ->rcat ($ temp_filepath , $ content ); // Write content using rcat
120113
121114 $ file_content = $ left_side ->cat ($ temp_filepath ); // Read content back using cat
122115 self ::assertEquals ($ content , $ file_content , "File content mismatch after rcat for {$ temp_filepath }. " );
123-
124- return [$ left_side , $ temp_filepath , $ content ]; // Pass Rclone instance and filepath for further tests
116+ return [$ left_side , $ temp_filepath , $ content ]; // Pass Rclone instance, filepath and content for further tests
125117 }
126118
127119 /**
128- * Tests copying and then renaming (moving) a file on the same provider.
129- * This now includes checking transfer stats on the copy operation.
120+ * Tests renaming (moving) a file on the same provider.
130121 * Depends on a file successfully written by 'write_to_a_file'.
131122 *
132123 * @param array $params Array from write_to_a_file: [Rclone instance, old filepath, content].
133124 *
134- * @return array Returns an array containing the Rclone instance, the original filepath, and the new renamed filepath.
125+ * @return array Returns an array containing the Rclone instance and the new filepath.
135126 */
136127 #[Test]
137128 #[Depends('write_to_a_file ' )]
138- final public function copy_and_rename_a_file ( array $ params ) : array
129+ final public function rename_a_file ( $ params ) : array
139130 {
140131 /** @var Rclone $left_side */
141132 [$ left_side , $ temp_filepath , $ content ] = $ params ;
142-
143- // 1. Copy the file and check stats
144- $ copied_file_path = $ this ->working_directory . '/flyclone_copied_file_ ' . $ this ->random_string () . '.txt ' ;
145- $ copy_result = $ left_side ->copyto ($ temp_filepath , $ copied_file_path );
146-
147- self ::assertTrue ($ copy_result ->success , 'copyto operation should be successful. ' );
148- self ::assertObjectHasProperty ('stats ' , $ copy_result , "The result object should have a 'stats' property. " );
149- self ::assertEquals (strlen ($ content ), $ copy_result ->stats ->bytes , 'Bytes transferred in copyto should match content length. ' );
150-
151- $ check_copy = $ left_side ->is_file ($ copied_file_path );
152- self ::assertTrue ($ check_copy ->exists , "File not copied to {$ copied_file_path }. " );
153-
154-
155- // 2. Rename the *copied* file
133+ // Define a new path for the renamed file within the working directory
156134 $ new_path = $ this ->working_directory . '/flyclone_renamed_file_ ' . $ this ->random_string () . '.txt ' ;
135+
157136 $ new_file_check_before = $ left_side ->is_file ($ new_path );
158137 self ::assertFalse ($ new_file_check_before ->exists , "New file path {$ new_path } should not exist before moveto. " );
159138
160- $ left_side ->moveto ($ copied_file_path , $ new_path ); // Execute moveto (rename) on the copied file
139+ $ result = $ left_side ->moveto ($ temp_filepath , $ new_path ); // Execute moveto (rename) and capture result
161140
162- $ old_file_check_after = $ left_side ->is_file ($ copied_file_path );
163- self ::assertFalse ($ old_file_check_after ->exists , "Copied file {$ copied_file_path } should not exist after moveto. " );
141+ // Assertions for transfer statistics
142+ self ::assertTrue ($ result ->success , 'The moveto operation should be successful. ' );
143+ self ::assertObjectHasProperty ('stats ' , $ result , "The result object should have a 'stats' property. " );
144+ self ::assertObjectHasProperty ('bytes ' , $ result ->stats , "The stats object should have a 'bytes' property. " );
145+ self ::assertEquals (strlen ($ content ), $ result ->stats ->bytes , 'The number of bytes transferred should match the content length. ' );
146+
147+
148+ $ old_file_check_after = $ left_side ->is_file ($ temp_filepath );
149+ self ::assertFalse ($ old_file_check_after ->exists , "Old file {$ temp_filepath } should not exist after moveto. " );
164150
165151 $ new_file_check_after = $ left_side ->is_file ($ new_path );
166152 self ::assertTrue ($ new_file_check_after ->exists , "New file {$ new_path } should exist after moveto. " );
167-
168- // Verify size if not dir agnostic
153+ // Verify size if not dir agnostic (dir agnostic might not report size accurately for empty/small files immediately)
169154 if (!$ left_side ->isLeftSideDirAgnostic () && isset ($ new_file_check_after ->details ->Size )) {
170155 self ::assertGreaterThan (0 , $ new_file_check_after ->details ->Size , "Renamed file {$ new_path } should have size greater than 0 if it had content. " );
171156 }
172157
173- // Return original and final renamed path for cleanup
174- return [$ left_side , $ temp_filepath , $ new_path ];
158+
159+ return [$ left_side , $ new_path ];
175160 }
176161
177162 /**
178- * Tests deleting multiple files .
179- * Depends on files successfully created by 'copy_and_rename_a_file '.
163+ * Tests deleting a file .
164+ * Depends on a file successfully renamed by 'rename_a_file '.
180165 *
181- * @param array $params Array from copy_and_rename_a_file : [Rclone instance, original_filepath, renamed_filepath ].
166+ * @param array $params Array from rename_a_file : [Rclone instance, filepath to delete ].
182167 *
183168 * @return array Returns an array containing the Rclone instance.
184169 */
185170 #[Test]
186- #[Depends('copy_and_rename_a_file ' )]
187- public function delete_a_file (array $ params ) : array
171+ #[Depends('rename_a_file ' )]
172+ public function delete_a_file ($ params ) : array
188173 {
189174 /** @var Rclone $left_side */
190- [$ left_side , $ original_filepath , $ renamed_filepath ] = $ params ;
191-
192- // Delete the original file
193- $ file_check_before_orig = $ left_side ->is_file ($ original_filepath );
194- self ::assertTrue ($ file_check_before_orig ->exists , "Original file {$ original_filepath } should exist before deletion. " );
195- $ left_side ->deletefile ($ original_filepath );
196- $ file_check_after_orig = $ left_side ->is_file ($ original_filepath );
197- self ::assertFalse ($ file_check_after_orig ->exists , "Original file {$ original_filepath } should not exist after deletion. " );
198-
199- // Delete the renamed file
200- $ file_check_before_renamed = $ left_side ->is_file ($ renamed_filepath );
201- self ::assertTrue ($ file_check_before_renamed ->exists , "Renamed file {$ renamed_filepath } should exist before deletion. " );
202- $ left_side ->deletefile ($ renamed_filepath );
203- $ file_check_after_renamed = $ left_side ->is_file ($ renamed_filepath );
204- self ::assertFalse ($ file_check_after_renamed ->exists , "Renamed file {$ renamed_filepath } should not exist after deletion. " );
175+ [$ left_side , $ filepath ] = $ params ;
176+ $ file_check_before = $ left_side ->is_file ($ filepath );
177+ self ::assertTrue ($ file_check_before ->exists , "File {$ filepath } should exist before deletion. " );
178+
179+ $ left_side ->delete ($ filepath ); // Delete the file (delete command can target a file path)
180+
181+ $ file_check_after = $ left_side ->is_file ($ filepath );
182+ self ::assertFalse ($ file_check_after ->exists , "File {$ filepath } should not exist after deletion. " );
205183
206184 return [$ left_side ];
207185 }
@@ -232,7 +210,6 @@ public function make_a_directory(Rclone $left_side) : array
232210 $ check_dir_after ->exists || $ left_side ->isLeftSideDirAgnostic (),
233211 "Directory {$ dir_path } should exist after mkdir (or provider is dir-agnostic). "
234212 );
235-
236213 return [$ left_side , $ dir_path ];
237214 }
238215
@@ -259,7 +236,6 @@ public function make_a_directory_inside_the_previous(array $params) : array
259236 $ check_nested_dir ->exists || $ left_side ->isLeftSideDirAgnostic (),
260237 "Nested directory {$ nested_dir_path } should exist after mkdir (or provider is dir-agnostic). "
261238 );
262-
263239 return [$ left_side , $ parent_dir_path , $ nested_dir_path ];
264240 }
265241
@@ -276,7 +252,8 @@ public function make_a_directory_inside_the_previous(array $params) : array
276252 public function touch_a_file_inside_first_directory (array $ params ) : array
277253 {
278254 /** @var Rclone $left_side */
279- [$ left_side , $ first_dir_path , $ latest_dir_path ] = $ params ; // $latest_dir_path is the nested one
255+ [$ left_side , $ first_dir_path , $ latest_dir_path ] = $ params ;
256+ // $latest_dir_path is the nested one
280257 // Create a file inside the *first* (parent) directory
281258 $ new_file_path = $ first_dir_path . '/file_in_parent_ ' . $ this ->random_string () . '.txt ' ;
282259 $ content = 'CONTENT FOR FILE IN PARENT DIR ' ;
@@ -307,12 +284,10 @@ public function copy_latest_file_to_first_directory(array $params) // Method nam
307284 [$ left_side , $ first_dir_path , $ latest_dir_path , $ source_file_path ] = $ params ;
308285 // Copy the source file into the *latest_dir_path* (nested directory)
309286 $ copied_file_path_in_nested_dir = $ latest_dir_path . '/ ' . basename ($ source_file_path );
310-
311287 $ left_side ->copy ($ source_file_path , $ latest_dir_path ); // Copy file to directory
312288
313289 $ check_original = $ left_side ->is_file ($ source_file_path );
314290 $ check_copy = $ left_side ->is_file ($ copied_file_path_in_nested_dir );
315-
316291 self ::assertTrue ($ check_original ->exists , "Original file {$ source_file_path } should still exist after copy. " );
317292 self ::assertTrue ($ check_copy ->exists , "File not copied to {$ copied_file_path_in_nested_dir }. " );
318293 if (isset ($ check_original ->details ->Size ) && isset ($ check_copy ->details ->Size )) {
@@ -340,15 +315,13 @@ public function move_latest_file_to_latest_directory(array $params) // Method n
340315 /** @var Rclone $left_side */
341316 // $latest_file is $source_file_path (in parent_dir), $copy_file is $copied_file_path_in_nested_dir
342317 [$ left_side , $ first_dir_path , $ latest_dir_path , $ original_source_file_path , $ file_to_move_path ] = $ params ;
343-
344318 // We will move $file_to_move_path (from nested_dir) back to $first_dir_path (parent_dir) with a new name.
345319 $ moved_file_new_name_in_first_dir = $ first_dir_path . '/moved_back_ ' . basename ($ file_to_move_path );
346320
347321 $ left_side ->moveto ($ file_to_move_path , $ moved_file_new_name_in_first_dir );
348322
349323 $ check_original_location = $ left_side ->is_file ($ file_to_move_path ); // Should be gone from nested_dir
350324 self ::assertFalse ($ check_original_location ->exists , "File {$ file_to_move_path } should not exist in nested dir after moveto. " );
351-
352325 $ check_new_location = $ left_side ->is_file ($ moved_file_new_name_in_first_dir ); // Should exist in parent_dir
353326 self ::assertTrue ($ check_new_location ->exists , "File not moved to {$ moved_file_new_name_in_first_dir }. " );
354327 if (isset ($ check_new_location ->details ->Size ) && !$ left_side ->isLeftSideDirAgnostic ()) {
@@ -373,14 +346,12 @@ public function list_directory(array $params) : Rclone
373346 {
374347 /** @var Rclone $left_side */
375348 [$ left_side , $ first_dir_path , $ latest_dir_path , $ file_in_first_dir ] = $ params ;
376-
377349 // List the $first_dir_path, it should contain $file_in_first_dir and possibly $original_source_file_path
378350 $ listing_result = $ left_side ->ls ($ first_dir_path );
379351
380352 self ::assertIsArray ($ listing_result );
381353 self ::assertTrue (count ($ listing_result ) > 0 , "Listing of {$ first_dir_path } should not be empty. " );
382354 self ::assertObjectHasProperty ('Name ' , $ listing_result [0 ], 'Unexpected result structure from ls. ' );
383-
384355 // Check if one of the listed items is the file we expect to be there.
385356 $ foundExpectedFile = FALSE ;
386357 foreach ($ listing_result as $ item ) {
@@ -390,8 +361,6 @@ public function list_directory(array $params) : Rclone
390361 }
391362 }
392363 self ::assertTrue ($ foundExpectedFile , 'Expected file ' . basename ($ file_in_first_dir ) . " not found in ls result of {$ first_dir_path }. " );
393-
394-
395364 return $ left_side ;
396365 }
397366
@@ -409,7 +378,6 @@ public function purge_first_directory_created(array $params) : array
409378 {
410379 /** @var Rclone $left_side */
411380 [$ left_side , $ first_dir_path , $ latest_dir_path /*, ... */ ] = $ params ;
412-
413381 // Purge the $first_dir_path (which should contain files and the $latest_dir_path as a subdirectory)
414382 $ left_side ->purge ($ first_dir_path );
415383 $ check_dir_after_purge = $ left_side ->is_dir ($ first_dir_path );
@@ -434,8 +402,8 @@ public function purge_first_directory_created(array $params) : array
434402 public function test_copy_with_progress_on_same_provider (array $ params ) : void
435403 {
436404 /** @var Rclone $rclone */
437- [$ rclone , $ originalSourceFilePath ] = $ params ; // This file might be small, so we'll create a larger one.
438-
405+ [$ rclone , $ originalSourceFilePath ] = $ params ;
406+ // This file might be small, so we'll create a larger one.
439407 // Destination directory for the copy operation
440408 $ destinationDir = $ this ->working_directory . '/progress_test_dest_dir_ ' . $ this ->random_string ();
441409 $ rclone ->mkdir ($ destinationDir ); // Ensure destination directory exists
@@ -445,15 +413,12 @@ public function test_copy_with_progress_on_same_provider(array $params) : void
445413 $ largeSourceFilePathOnProvider = $ this ->working_directory . '/large_source_for_copy_progress_ ' . $ this ->random_string () . '.dat ' ;
446414 $ rclone ->rcat ($ largeSourceFilePathOnProvider , $ largeSourceFileContent );
447415 self ::assertTrue ($ rclone ->is_file ($ largeSourceFilePathOnProvider )->exists , 'Large source file not created on provider for copy progress test. ' );
448-
449-
450416 $ this ->assert_progress_tracking (
451417 $ rclone ,
452418 'copy ' , // Rclone operation to test
453419 $ largeSourceFilePathOnProvider , // Source path (the large file on the provider)
454420 $ destinationDir // Destination directory path
455421 );
456-
457422 // Cleanup
458423 $ rclone ->deletefile ($ largeSourceFilePathOnProvider ); // Delete the large source file from the provider
459424 $ rclone ->purge ($ destinationDir ); // Clean up the destination directory and its contents
0 commit comments