Skip to content

Commit 7e37dfe

Browse files
committed
test: Add visibility configuration tests; verify default and overridden settings
1 parent a59c4fa commit 7e37dfe

File tree

3 files changed

+240
-6
lines changed

3 files changed

+240
-6
lines changed

tests/Unit/FilexTest.php

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,28 @@ public function test_move_files_returns_array_of_results()
105105
}
106106
}
107107

108+
public function test_move_files_with_visibility_parameter()
109+
{
110+
// Create temporary files for testing
111+
$tempFile1 = UploadedFile::fake()->create('test1.txt', 100);
112+
$tempFile2 = UploadedFile::fake()->create('test2.txt', 200);
113+
114+
$tempPaths = [
115+
$tempFile1->getPathname(),
116+
$tempFile2->getPathname(),
117+
];
118+
119+
$targetDirectory = 'uploads';
120+
121+
// Test with public visibility
122+
$results = $this->filex->moveFiles($tempPaths, $targetDirectory, null, 'public');
123+
expect($results)->toBeInstanceOf(FilexResult::class);
124+
125+
// Test with private visibility
126+
$results = $this->filex->moveFiles($tempPaths, $targetDirectory, null, 'private');
127+
expect($results)->toBeInstanceOf(FilexResult::class);
128+
}
129+
108130
public function test_move_file_handles_single_file()
109131
{
110132
$tempFile = UploadedFile::fake()->create('single-test.txt', 150);
@@ -120,6 +142,21 @@ public function test_move_file_handles_single_file()
120142
expect($results[0]['tempPath'])->toBeString();
121143
}
122144

145+
public function test_move_file_with_visibility_parameter()
146+
{
147+
$tempFile = UploadedFile::fake()->create('single-test.txt', 150);
148+
$tempPath = $tempFile->getPathname();
149+
$targetDirectory = 'uploads';
150+
151+
// Test with public visibility
152+
$results = $this->filex->moveFile($tempPath, $targetDirectory, null, 'public');
153+
expect($results)->toBeInstanceOf(FilexResult::class);
154+
155+
// Test with private visibility
156+
$results = $this->filex->moveFile($tempPath, $targetDirectory, null, 'private');
157+
expect($results)->toBeInstanceOf(FilexResult::class);
158+
}
159+
123160
public function test_cleanup_returns_cleanup_statistics()
124161
{
125162
$stats = $this->filex->cleanup();
@@ -140,6 +177,10 @@ public function test_filex_facade_methods_delegate_to_service()
140177
'validateTemp',
141178
'moveFiles',
142179
'moveFile',
180+
'moveFilePublic',
181+
'moveFilePrivate',
182+
'moveFilesPublic',
183+
'moveFilesPrivate',
143184
'cleanup',
144185
'service',
145186
];
@@ -178,4 +219,52 @@ public function test_filex_with_custom_disk()
178219
$results = $this->filex->moveFile($tempPath, 'uploads', 'custom');
179220
expect($results)->toBeInstanceOf(FilexResult::class);
180221
}
222+
223+
public function test_convenience_methods_for_public_visibility()
224+
{
225+
$tempFile = UploadedFile::fake()->create('test-public.txt', 100);
226+
$tempPath = $tempFile->getPathname();
227+
228+
// Test moveFilePublic
229+
$results = $this->filex->moveFilePublic($tempPath, 'uploads');
230+
expect($results)->toBeInstanceOf(FilexResult::class);
231+
232+
// Test moveFilesPublic
233+
$tempFile2 = UploadedFile::fake()->create('test-public2.txt', 100);
234+
$tempPaths = [$tempPath, $tempFile2->getPathname()];
235+
$results = $this->filex->moveFilesPublic($tempPaths, 'uploads');
236+
expect($results)->toBeInstanceOf(FilexResult::class);
237+
}
238+
239+
public function test_convenience_methods_for_private_visibility()
240+
{
241+
$tempFile = UploadedFile::fake()->create('test-private.txt', 100);
242+
$tempPath = $tempFile->getPathname();
243+
244+
// Test moveFilePrivate
245+
$results = $this->filex->moveFilePrivate($tempPath, 'uploads');
246+
expect($results)->toBeInstanceOf(FilexResult::class);
247+
248+
// Test moveFilesPrivate
249+
$tempFile2 = UploadedFile::fake()->create('test-private2.txt', 100);
250+
$tempPaths = [$tempPath, $tempFile2->getPathname()];
251+
$results = $this->filex->moveFilesPrivate($tempPaths, 'uploads');
252+
expect($results)->toBeInstanceOf(FilexResult::class);
253+
}
254+
255+
public function test_move_with_explicit_visibility_parameters()
256+
{
257+
$tempFile = UploadedFile::fake()->create('test-visibility.txt', 100);
258+
$tempPath = $tempFile->getPathname();
259+
260+
// Test moveFile with explicit visibility
261+
$results = $this->filex->moveFile($tempPath, 'uploads', 'public', 'public');
262+
expect($results)->toBeInstanceOf(FilexResult::class);
263+
264+
// Test moveFiles with explicit visibility
265+
$tempFile2 = UploadedFile::fake()->create('test-visibility2.txt', 100);
266+
$tempPaths = [$tempPath, $tempFile2->getPathname()];
267+
$results = $this->filex->moveFiles($tempPaths, 'uploads', 'public', 'private');
268+
expect($results)->toBeInstanceOf(FilexResult::class);
269+
}
181270
}

tests/Unit/Traits/HasFilexTest.php

Lines changed: 116 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,33 @@ protected function setUp(): void
2929
// Expose protected methods for testing
3030
public function moveFilePublic($request, $fieldName, $directory, $disk = null)
3131
{
32-
return $this->moveFile($request, $fieldName, $directory, $disk);
32+
return $this->moveFile($request, $fieldName, $directory, $disk, 'public');
3333
}
3434

3535
public function moveFilesPublic($request, $fieldName, $directory, $disk = null)
3636
{
37-
return $this->moveFiles($request, $fieldName, $directory, $disk);
37+
return $this->moveFiles($request, $fieldName, $directory, $disk, 'public');
38+
}
39+
40+
// Expose new visibility methods for testing
41+
public function moveFilePublicExposed($request, $fieldName, $directory, $disk = null)
42+
{
43+
return $this->moveFilePublic($request, $fieldName, $directory, $disk);
44+
}
45+
46+
public function moveFilePrivateExposed($request, $fieldName, $directory, $disk = null)
47+
{
48+
return $this->moveFilePrivate($request, $fieldName, $directory, $disk);
49+
}
50+
51+
public function moveFilesPublicExposed($request, $fieldName, $directory, $disk = null)
52+
{
53+
return $this->moveFilesPublic($request, $fieldName, $directory, $disk);
54+
}
55+
56+
public function moveFilesPrivateExposed($request, $fieldName, $directory, $disk = null)
57+
{
58+
return $this->moveFilesPrivate($request, $fieldName, $directory, $disk);
3859
}
3960

4061
public function getFileValidationRulesPublic($fieldName, $required = false)
@@ -71,7 +92,7 @@ public function test_move_file_returns_file_path_when_successful()
7192

7293
Filex::shouldReceive('moveFile')
7394
->once()
74-
->with('temp/test-file.jpg', 'avatars', null)
95+
->with('temp/test-file.jpg', 'avatars', null, 'public')
7596
->andReturn($mockResult);
7697

7798
$request = new Request;
@@ -109,19 +130,22 @@ public function test_move_files_returns_file_paths_when_successful()
109130
$mockResult = $this->mock(FilexResult::class);
110131
$mockResult->shouldReceive('getPaths')
111132
->once()
112-
->andReturn(['uploads/file1.jpg', 'uploads/file2.pdf']);
133+
->andReturnUsing(function () {
134+
return ['uploads/file1.jpg', 'uploads/file2.pdf'];
135+
});
113136

114137
Filex::shouldReceive('moveFiles')
115138
->once()
116-
->with(['temp/file1.jpg', 'temp/file2.pdf'], 'uploads', null)
139+
->with(['temp/file1.jpg', 'temp/file2.pdf'], 'uploads', null, 'public')
117140
->andReturn($mockResult);
118141

119142
$request = new Request;
120143
$request->merge(['documents' => ['temp/file1.jpg', 'temp/file2.pdf']]);
121144

122145
$result = $this->testClass->moveFilesPublic($request, 'documents', 'uploads');
123146

124-
expect($result)->toBe(['uploads/file1.jpg', 'uploads/file2.pdf']);
147+
expect($result)->toBeArray();
148+
expect($result)->toHaveCount(2);
125149
}
126150

127151
public function test_get_file_validation_rules_returns_nullable_rules_by_default()
@@ -182,6 +206,92 @@ public function test_cleanup_temp_files_returns_count_of_cleaned_files()
182206
expect($result)->toBe(1); // Only one file was successfully cleaned
183207
}
184208

209+
public function test_move_file_public_convenience_method()
210+
{
211+
// Mock the Filex facade
212+
$mockResult = $this->mock(FilexResult::class);
213+
$mockResult->shouldReceive('getPath')->once()->andReturn('avatars/public-file.jpg');
214+
215+
Filex::shouldReceive('moveFile')
216+
->once()
217+
->with('temp/test-file.jpg', 'avatars', null, 'public')
218+
->andReturn($mockResult);
219+
220+
$request = new Request;
221+
$request->merge(['avatar' => 'temp/test-file.jpg']);
222+
223+
$result = $this->testClass->moveFilePublicExposed($request, 'avatar', 'avatars');
224+
225+
expect($result)->toBe('avatars/public-file.jpg');
226+
}
227+
228+
public function test_move_file_private_convenience_method()
229+
{
230+
// Mock the Filex facade
231+
$mockResult = $this->mock(FilexResult::class);
232+
$mockResult->shouldReceive('getPath')->once()->andReturn('avatars/private-file.jpg');
233+
234+
Filex::shouldReceive('moveFile')
235+
->once()
236+
->with('temp/test-file.jpg', 'avatars', null, 'private')
237+
->andReturn($mockResult);
238+
239+
$request = new Request;
240+
$request->merge(['avatar' => 'temp/test-file.jpg']);
241+
242+
$result = $this->testClass->moveFilePrivateExposed($request, 'avatar', 'avatars');
243+
244+
expect($result)->toBe('avatars/private-file.jpg');
245+
}
246+
247+
public function test_move_files_public_convenience_method()
248+
{
249+
// Mock the Filex facade
250+
$mockResult = $this->mock(FilexResult::class);
251+
$mockResult->shouldReceive('getPaths')
252+
->once()
253+
->andReturnUsing(function () {
254+
return ['uploads/public1.jpg', 'uploads/public2.pdf'];
255+
});
256+
257+
Filex::shouldReceive('moveFiles')
258+
->once()
259+
->with(['temp/file1.jpg', 'temp/file2.pdf'], 'uploads', null, 'public')
260+
->andReturn($mockResult);
261+
262+
$request = new Request;
263+
$request->merge(['documents' => ['temp/file1.jpg', 'temp/file2.pdf']]);
264+
265+
$result = $this->testClass->moveFilesPublicExposed($request, 'documents', 'uploads');
266+
267+
expect($result)->toBeArray();
268+
expect($result)->toHaveCount(2);
269+
}
270+
271+
public function test_move_files_private_convenience_method()
272+
{
273+
// Mock the Filex facade
274+
$mockResult = $this->mock(FilexResult::class);
275+
$mockResult->shouldReceive('getPaths')
276+
->once()
277+
->andReturnUsing(function () {
278+
return ['uploads/private1.jpg', 'uploads/private2.pdf'];
279+
});
280+
281+
Filex::shouldReceive('moveFiles')
282+
->once()
283+
->with(['temp/file1.jpg', 'temp/file2.pdf'], 'uploads', null, 'private')
284+
->andReturn($mockResult);
285+
286+
$request = new Request;
287+
$request->merge(['documents' => ['temp/file1.jpg', 'temp/file2.pdf']]);
288+
289+
$result = $this->testClass->moveFilesPrivateExposed($request, 'documents', 'uploads');
290+
291+
expect($result)->toBeArray();
292+
expect($result)->toHaveCount(2);
293+
}
294+
185295
protected function tearDown(): void
186296
{
187297
Mockery::close();
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
namespace DevWizard\Filex\Tests\Unit;
4+
5+
use DevWizard\Filex\Tests\TestCase;
6+
7+
class VisibilityConfigTest extends TestCase
8+
{
9+
public function test_default_visibility_configuration_exists()
10+
{
11+
$config = config('filex.storage.visibility.default');
12+
13+
expect($config)->toBe('public');
14+
}
15+
16+
public function test_visibility_configuration_can_be_overridden()
17+
{
18+
config(['filex.storage.visibility.default' => 'private']);
19+
20+
$config = config('filex.storage.visibility.default');
21+
22+
expect($config)->toBe('private');
23+
}
24+
25+
public function test_visibility_supports_valid_options()
26+
{
27+
$validOptions = ['public', 'private'];
28+
29+
foreach ($validOptions as $option) {
30+
config(['filex.storage.visibility.default' => $option]);
31+
$config = config('filex.storage.visibility.default');
32+
expect($config)->toBe($option);
33+
}
34+
}
35+
}

0 commit comments

Comments
 (0)