From f75c20e5a70d5a14ae42977912fa5de447d44668 Mon Sep 17 00:00:00 2001 From: Milos Holba Date: Mon, 2 May 2022 18:21:20 +0200 Subject: [PATCH] added test for getRecordsCount, format code --- config/language-translations.php | 8 +-- config/vuefilemanager.php | 4 +- src/App/Providers/AppServiceProvider.php | 2 +- .../SocialiteCallbackController.php | 10 +-- src/App/Users/Actions/UpdateUserPassword.php | 5 +- .../Controllers/BrowseFolderController.php | 19 ++++-- .../BrowseLatestFilesController.php | 4 +- .../BrowseSharedItemsController.php | 4 +- .../BrowseTrashContentController.php | 12 ++-- .../VisitorBrowseFolderController.php | 4 +- .../Actions/GenerateImageThumbnailAction.php | 1 - .../Controllers/UploadFileController.php | 4 +- src/Domain/Files/Requests/UploadRequest.php | 1 - .../RenameFileOrFolderController.php | 4 +- .../CreateAdminAccountController.php | 2 +- .../BrowseSharedWithMeController.php | 4 +- .../Controllers/TeamFoldersController.php | 2 +- .../InvitationIntoTeamFolder.php | 2 +- .../UploadRequestFulfilledNotification.php | 6 +- src/Support/helpers.php | 63 ++++++++----------- tests/App/Users/SignFlowTest.php | 1 - .../Languages/AdminLanguageTranslatorTest.php | 4 +- tests/Domain/SetupWizard/SetupWizardTest.php | 26 ++++---- tests/Support/Helpers/HelperTest.php | 57 +++++++++++++++++ 24 files changed, 147 insertions(+), 102 deletions(-) diff --git a/config/language-translations.php b/config/language-translations.php index 0db97fd3..50a542fc 100644 --- a/config/language-translations.php +++ b/config/language-translations.php @@ -905,7 +905,7 @@ return [ 'total_x_of_x_members' => 'Total ${use} of ${total} Members', 'go_back_from_x' => 'Go back from {location}', 'new_team_invitation' => 'New Team Invitation', - 'x_invite_to_join_team' => ":name invite you to join into Team Folder.", + 'x_invite_to_join_team' => ':name invite you to join into Team Folder.', 'team_invitation_notify_title' => 'You are invited to collaboration with team folder in :app', 'team_invitation_notify_desc' => 'You are invited to collaboration with team folder', 'team_invitation_notify_desc_without_account' => 'You are invited to collaboration with team folder. But at first, you have to create an account to proceed into team folder.', @@ -915,12 +915,12 @@ return [ 'file_request_filled_desc' => "Your file request for ':name' folder was filled successfully.", 'show_files' => 'Show Files', 'file_request_filled_mail' => "Your file request was fulfilled in your ':name' folder", - 'file_request_filled_mail_note' => "We are emailing you because your file request was fulfilled. Please click on the link below to show uploaded files.", + 'file_request_filled_mail_note' => 'We are emailing you because your file request was fulfilled. Please click on the link below to show uploaded files.', 'thanks_salutation' => 'Thank you for using our application!', 'upload_your_files' => 'Upload your Files', - 'file_request_optional_message' => "PS: :name left you a message: :notes", + 'file_request_optional_message' => 'PS: :name left you a message: :notes', 'file_request_notify_title' => ':name Request You for File Upload', - 'file_request_notify_description' => "We are emailing you because :name requested files from you. Please click on the link below and upload your files for :name.", + 'file_request_notify_description' => 'We are emailing you because :name requested files from you. Please click on the link below and upload your files for :name.', 'user_action_not_allowed' => 'This user action is not allowed.', 'pcs.' => 'Pcs.', 'mem.' => 'Mem.', diff --git a/config/vuefilemanager.php b/config/vuefilemanager.php index 099cce35..74c3164f 100644 --- a/config/vuefilemanager.php +++ b/config/vuefilemanager.php @@ -62,6 +62,6 @@ return [ ], 'paginate' => [ - 'perPage' => 15 - ] + 'perPage' => 15, + ], ]; diff --git a/src/App/Providers/AppServiceProvider.php b/src/App/Providers/AppServiceProvider.php index 18a24794..4665d294 100644 --- a/src/App/Providers/AppServiceProvider.php +++ b/src/App/Providers/AppServiceProvider.php @@ -1,8 +1,8 @@ 'error', 'message' => 'User registration is not allowed', diff --git a/src/App/Users/Actions/UpdateUserPassword.php b/src/App/Users/Actions/UpdateUserPassword.php index 3e5b2112..309116df 100644 --- a/src/App/Users/Actions/UpdateUserPassword.php +++ b/src/App/Users/Actions/UpdateUserPassword.php @@ -1,10 +1,9 @@ ['required', 'string'], 'password' => $this->passwordRules(), ])->after(function ($validator) use ($user, $input) { - if (!isset($input['current_password']) || !Hash::check($input['current_password'], $user->password)) { + if (! isset($input['current_password']) || ! Hash::check($input['current_password'], $user->password)) { $validator->errors()->add('current_password', __t('password_doesnt_match')); } })->validateWithBag('updatePassword'); diff --git a/src/Domain/Browsing/Controllers/BrowseFolderController.php b/src/Domain/Browsing/Controllers/BrowseFolderController.php index 774bbbac..6a19e726 100644 --- a/src/Domain/Browsing/Controllers/BrowseFolderController.php +++ b/src/Domain/Browsing/Controllers/BrowseFolderController.php @@ -5,7 +5,9 @@ use Str; use Domain\Files\Models\File; use Domain\Folders\Models\Folder; use Illuminate\Support\Facades\Auth; +use Domain\Files\Resources\FilesCollection; use Domain\Folders\Resources\FolderResource; +use Domain\Folders\Resources\FolderCollection; class BrowseFolderController { @@ -18,16 +20,16 @@ class BrowseFolderController 'parent_id' => $root_id, 'team_folder' => false, 'user_id' => Auth::id(), - 'deleted_at' => null + 'deleted_at' => null, ]; $fileQuery = [ 'parent_id' => $root_id, 'user_id' => Auth::id(), - 'deleted_at' => null + 'deleted_at' => null, ]; - list($foldersTake, $foldersSkip, $filesTake, $filesSkip, $totalItemsCount) = getRecordsCount($folderQuery, $fileQuery); + list($foldersTake, $foldersSkip, $filesTake, $filesSkip, $totalItemsCount) = getRecordsCount($folderQuery, $fileQuery, request()->input('page')); $folders = Folder::with(['parent:id,name', 'shared:token,id,item_id,permission,is_protected,expire_in']) ->where($folderQuery) @@ -42,16 +44,21 @@ class BrowseFolderController ->skip($filesSkip) ->take($filesTake) ->get(); + + $entries = collect([ + $folders ? json_decode((new FolderCollection($folders))->toJson(), true) : null, + $files ? json_decode((new FilesCollection($files))->toJson(), true) : null, + ])->collapse(); - list($data, $paginate, $links) = groupPaginate($folders, $files, $totalItemsCount); + list($paginate, $links) = generatePaginationCounts($totalItemsCount); return [ - 'data' => $data, + 'data' => $entries, 'links' => $links, 'meta' => [ 'paginate' => $paginate, 'root' => $root_id ? new FolderResource(Folder::findOrFail($root_id)) : null, - ] + ], ]; } } diff --git a/src/Domain/Browsing/Controllers/BrowseLatestFilesController.php b/src/Domain/Browsing/Controllers/BrowseLatestFilesController.php index 556f50fb..5572300b 100644 --- a/src/Domain/Browsing/Controllers/BrowseLatestFilesController.php +++ b/src/Domain/Browsing/Controllers/BrowseLatestFilesController.php @@ -2,8 +2,8 @@ namespace Domain\Browsing\Controllers; use App\Users\Models\User; -use Illuminate\Support\Facades\Auth; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; class BrowseLatestFilesController { @@ -23,7 +23,7 @@ class BrowseLatestFilesController 'meta' => [ 'paginate' => $paginate, 'root' => null, - ] + ], ]; } } diff --git a/src/Domain/Browsing/Controllers/BrowseSharedItemsController.php b/src/Domain/Browsing/Controllers/BrowseSharedItemsController.php index 0dc73125..03282375 100644 --- a/src/Domain/Browsing/Controllers/BrowseSharedItemsController.php +++ b/src/Domain/Browsing/Controllers/BrowseSharedItemsController.php @@ -1,11 +1,11 @@ [ 'paginate' => $paginate, 'root' => null, - ] + ], ]; } } diff --git a/src/Domain/Browsing/Controllers/BrowseTrashContentController.php b/src/Domain/Browsing/Controllers/BrowseTrashContentController.php index 06428057..e49ad47a 100644 --- a/src/Domain/Browsing/Controllers/BrowseTrashContentController.php +++ b/src/Domain/Browsing/Controllers/BrowseTrashContentController.php @@ -1,10 +1,10 @@ where('parent_id', $root_id) ->sortable() ->get(); - - } else { // Get folders and files $folders_trashed = Folder::onlyTrashed() - ->with(['trashedFolders', 'parent']) - ->where('user_id', $user_id) - ->get(['parent_id', 'id', 'name']); + ->with(['trashedFolders', 'parent']) + ->where('user_id', $user_id) + ->get(['parent_id', 'id', 'name']); $folders = Folder::onlyTrashed() ->with(['parent']) @@ -64,7 +62,7 @@ class BrowseTrashContentController 'meta' => [ 'paginate' => $paginate, 'root' => $requestedFolder, - ] + ], ]; } } diff --git a/src/Domain/Browsing/Controllers/VisitorBrowseFolderController.php b/src/Domain/Browsing/Controllers/VisitorBrowseFolderController.php index db32ca9f..5dad77fb 100644 --- a/src/Domain/Browsing/Controllers/VisitorBrowseFolderController.php +++ b/src/Domain/Browsing/Controllers/VisitorBrowseFolderController.php @@ -1,13 +1,13 @@ [ 'paginate' => $paginate, 'root' => new FolderResource($requestedFolder), - ] + ], ]; } } diff --git a/src/Domain/Files/Actions/GenerateImageThumbnailAction.php b/src/Domain/Files/Actions/GenerateImageThumbnailAction.php index 2fe5bd3a..2d51d6ed 100644 --- a/src/Domain/Files/Actions/GenerateImageThumbnailAction.php +++ b/src/Domain/Files/Actions/GenerateImageThumbnailAction.php @@ -19,7 +19,6 @@ class GenerateImageThumbnailAction collect(config("vuefilemanager.image_sizes.$execution")) ->each(function ($size) use ($userId, $fileName, $imageWidth) { if ($imageWidth > $size['size']) { - // Create intervention image $intervention = Image::make( Storage::disk('local')->path("temp/$userId/$fileName") diff --git a/src/Domain/Files/Controllers/UploadFileController.php b/src/Domain/Files/Controllers/UploadFileController.php index 747dcf2c..1e3d7b6c 100644 --- a/src/Domain/Files/Controllers/UploadFileController.php +++ b/src/Domain/Files/Controllers/UploadFileController.php @@ -2,7 +2,6 @@ namespace Domain\Files\Controllers; use Domain\Files\Models\File; -use Illuminate\Http\Response; use App\Http\Controllers\Controller; use Domain\Files\Requests\UploadRequest; use Domain\Files\Resources\FileResource; @@ -21,7 +20,8 @@ class UploadFileController extends Controller /** * Upload file for authenticated master|editor user */ - public function __invoke(UploadRequest $request) { + public function __invoke(UploadRequest $request) + { if (is_demo_account()) { return ($this->fakeUploadFile)($request); } diff --git a/src/Domain/Files/Requests/UploadRequest.php b/src/Domain/Files/Requests/UploadRequest.php index 5a41a0fe..b4c01645 100644 --- a/src/Domain/Files/Requests/UploadRequest.php +++ b/src/Domain/Files/Requests/UploadRequest.php @@ -1,5 +1,4 @@ $links, 'meta' => [ 'paginate' => $paginate, - 'root' => $id ? new FolderResource(Folder::findOrFail($id)) : null - ] + 'root' => $id ? new FolderResource(Folder::findOrFail($id)) : null, + ], ]; } } diff --git a/src/Domain/Teams/Controllers/TeamFoldersController.php b/src/Domain/Teams/Controllers/TeamFoldersController.php index 93d7b620..19849a02 100644 --- a/src/Domain/Teams/Controllers/TeamFoldersController.php +++ b/src/Domain/Teams/Controllers/TeamFoldersController.php @@ -61,7 +61,7 @@ class TeamFoldersController extends Controller 'meta' => [ 'paginate' => $paginate, 'root' => $id ? new FolderResource(Folder::findOrFail($id)) : null, - ] + ], ]; } diff --git a/src/Domain/Teams/Notifications/InvitationIntoTeamFolder.php b/src/Domain/Teams/Notifications/InvitationIntoTeamFolder.php index ebdd0900..f2d1d624 100644 --- a/src/Domain/Teams/Notifications/InvitationIntoTeamFolder.php +++ b/src/Domain/Teams/Notifications/InvitationIntoTeamFolder.php @@ -61,7 +61,7 @@ class InvitationIntoTeamFolder extends Notification implements ShouldQueue return [ 'category' => 'team-invitation', 'title' => __t('new_team_invitation'), - 'description' => __t('x_invite_to_join_team', ['name' => $this->invitation->inviter->settings->name,]), + 'description' => __t('x_invite_to_join_team', ['name' => $this->invitation->inviter->settings->name, ]), 'action' => [ 'type' => 'invitation', 'params' => [ diff --git a/src/Domain/UploadRequest/Notifications/UploadRequestFulfilledNotification.php b/src/Domain/UploadRequest/Notifications/UploadRequestFulfilledNotification.php index 5b044ca5..cc7a1c4a 100644 --- a/src/Domain/UploadRequest/Notifications/UploadRequestFulfilledNotification.php +++ b/src/Domain/UploadRequest/Notifications/UploadRequestFulfilledNotification.php @@ -1,5 +1,4 @@ 'file-request', 'title' => __t('file_request_filled'), - 'description' => __t('file_request_filled_desc', ['name' => $this->uploadRequest->parent->name,]), + 'description' => __t('file_request_filled_desc', ['name' => $this->uploadRequest->parent->name, ]), 'action' => [ 'type' => 'route', 'params' => [ diff --git a/src/Support/helpers.php b/src/Support/helpers.php index d263a980..e5ef6a15 100644 --- a/src/Support/helpers.php +++ b/src/Support/helpers.php @@ -9,15 +9,13 @@ use Domain\Files\Models\File; use Domain\Sharing\Models\Share; use Domain\Folders\Models\Folder; use Illuminate\Support\Collection; -use Domain\Settings\Models\Setting; use Illuminate\Support\Facades\DB; +use Domain\Settings\Models\Setting; use Illuminate\Support\Facades\Http; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\QueryException; use Illuminate\Support\Facades\Storage; use Domain\Localization\Models\Language; -use Domain\Files\Resources\FilesCollection; -use Domain\Folders\Resources\FolderCollection; use Intervention\Image\ImageManagerStatic as Image; use Illuminate\Database\Eloquent\ModelNotFoundException; @@ -1152,30 +1150,20 @@ if (! function_exists('replace_occurrence')) { } } - if(! function_exists('groupPaginate')) { + if (! function_exists('generatePaginationCounts')) { /** * Group paginate of Foldes and Files */ - function groupPaginate( - ?Collection $folders = null, - ?Collection $files = null, + function generatePaginationCounts( int $totalItemsCount ) : array { - $perPage = config('vuefilemanager.paginate.perPage'); - $currentPage = request()->input('page') === 'all' ? 1 : (int)request()->input('page'); - - // Collect Folders with Files - $entries = collect([ - $folders ? json_decode((new FolderCollection($folders))->toJson(), true) : null, - $files ? json_decode((new FilesCollection($files))->toJson(), true) : null, - ])->collapse(); + $currentPage = request()->input('page') === 'all' ? 1 : (int) request()->input('page'); $uri = request()->fullUrl(); $lastPage = ceil($totalItemsCount / $perPage); return [ - $entries, [ 'currentPage' => $currentPage, 'from' => 1, @@ -1188,28 +1176,29 @@ if (! function_exists('replace_occurrence')) { [ 'first' => $uri . '&page=' . 1, 'last' => $uri . '&page=' . $lastPage, - 'next' => $currentPage == $lastPage ? null : $uri . '&page=' . $currentPage + 1, - 'prev' => $currentPage == 1 ? null : $uri . '&page=' . $currentPage -1, - ] + 'next' => $currentPage == $lastPage ? null : $uri . '&page=' . $currentPage + 1, + 'prev' => $currentPage == 1 ? null : $uri . '&page=' . $currentPage - 1, + ], ]; } - - if(! function_exists('getRecordsCount')) { + } + + if (! function_exists('getRecordsCount')) { /** * Get count of items from the Database */ - function getRecordsCount ( - array $folderQuery, - array $fileQuery - ) : array { - + function getRecordsCount( + array $folderQuery, + array $fileQuery, + string $page + ) : array { $perPage = config('vuefilemanager.paginate.perPage'); - $currentPage = request()->input('page') === 'all' ? 1 : (int)request()->input('page'); + $currentPage = $page === 'all' ? 1 : (int) $page; $foldersSkip = 0; $foldersTake = 0; - $filesSkip = 0; - $filesTake = 0; + $filesSkip = 0; + $filesTake = 0; $foldersCount = DB::table('folders') ->where($folderQuery) @@ -1221,34 +1210,32 @@ if (! function_exists('replace_occurrence')) { $totalItemsCount = $foldersCount + $filesCount; - if(request()->input('page') !== 'all') { - + if ($page !== 'all') { // Folders pages - if($foldersCount >= $currentPage * $perPage) { + if ($foldersCount >= $currentPage * $perPage) { $foldersTake = $perPage; $foldersSkip = ($currentPage - 1) * $perPage; } // Mixed page - if($foldersCount < $currentPage * $perPage && ceil($currentPage) === ceil($foldersCount / $perPage) ) { + if ($foldersCount < $currentPage * $perPage && ceil($currentPage) === ceil($foldersCount / $perPage)) { $foldersSkip = ($currentPage - 1) * $perPage; $foldersTake = $foldersCount - $foldersSkip; - $filesTake = ($currentPage * $perPage) - $foldersCount; + $filesTake = ($currentPage * $perPage) - $foldersCount; $filesSkip = 0; } // Files pages - if($currentPage > ceil($foldersCount / $perPage)) { + if ($currentPage > ceil($foldersCount / $perPage)) { $filesTake = $perPage; - $filesSkip = ((ceil($foldersCount / $perPage) * $perPage) - $foldersCount) + ($currentPage - (ceil($foldersCount / $perPage)) -1) * $perPage; + $filesSkip = ((ceil($foldersCount / $perPage) * $perPage) - $foldersCount) + ($currentPage - (ceil($foldersCount / $perPage)) - 1) * $perPage; } } else { $foldersTake = $foldersCount; - $filesTake = $filesCount; + $filesTake = $filesCount; } return [$foldersTake, $foldersSkip, $filesTake, $filesSkip, $totalItemsCount]; } - } } } diff --git a/tests/App/Users/SignFlowTest.php b/tests/App/Users/SignFlowTest.php index ec8bf448..bc892d86 100644 --- a/tests/App/Users/SignFlowTest.php +++ b/tests/App/Users/SignFlowTest.php @@ -1,5 +1,4 @@ assertStatus(200) ->assertJsonFragment([ 'locale' => 'en', - 'close' => 'Close', + 'close' => 'Close', ]); } @@ -180,7 +180,7 @@ class AdminLanguageTranslatorTest extends TestCase ->getJson("/api/admin/languages/$language->id") ->assertStatus(200) ->assertJsonFragment([ - 'close' => 'Close', + 'close' => 'Close', 'locale' => 'en', ]); } diff --git a/tests/Domain/SetupWizard/SetupWizardTest.php b/tests/Domain/SetupWizard/SetupWizardTest.php index 30030d2c..2ba0bbde 100644 --- a/tests/Domain/SetupWizard/SetupWizardTest.php +++ b/tests/Domain/SetupWizard/SetupWizardTest.php @@ -61,21 +61,21 @@ class SetupWizardTest extends TestCase Setting::all()->each->delete(); $this->postJson('/api/setup/app-setup', [ - 'color' => '#00BC72', - 'title' => 'VueFileManager', - 'description' => 'The best file manager on the internet', - 'googleAnalytics' => 'UA-12345678-1', - 'contactMail' => 'john@doe.com', - 'subscriptionType' => 'metered', - 'userVerification' => 1, - 'userRegistration' => 1, - 'storageLimitation' => 1, - 'defaultStorage' => 10, - 'logo' => UploadedFile::fake()->image('fake-logo.jpg'), + 'color' => '#00BC72', + 'title' => 'VueFileManager', + 'description' => 'The best file manager on the internet', + 'googleAnalytics' => 'UA-12345678-1', + 'contactMail' => 'john@doe.com', + 'subscriptionType' => 'metered', + 'userVerification' => 1, + 'userRegistration' => 1, + 'storageLimitation' => 1, + 'defaultStorage' => 10, + 'logo' => UploadedFile::fake()->image('fake-logo.jpg'), 'logo_dark' => UploadedFile::fake()->image('fake-logo-dark.jpg'), - 'logo_horizontal' => UploadedFile::fake()->image('fake-logo-horizontal.jpg'), + 'logo_horizontal' => UploadedFile::fake()->image('fake-logo-horizontal.jpg'), 'logo_horizontal_dark' => UploadedFile::fake()->image('fake-logo-horizontal-dark.jpg'), - 'favicon' => UploadedFile::fake()->image('fake-favicon.jpg'), + 'favicon' => UploadedFile::fake()->image('fake-favicon.jpg'), ])->assertStatus(204); $this diff --git a/tests/Support/Helpers/HelperTest.php b/tests/Support/Helpers/HelperTest.php index c5d156d9..6c44ea0b 100644 --- a/tests/Support/Helpers/HelperTest.php +++ b/tests/Support/Helpers/HelperTest.php @@ -2,6 +2,10 @@ namespace Tests\Support\Helpers; use Tests\TestCase; +use App\Users\Models\User; +use Domain\Files\Models\File; +use Domain\Folders\Models\Folder; +use Illuminate\Support\Facades\Config; class HelperTest extends TestCase { @@ -25,4 +29,57 @@ class HelperTest extends TestCase $this->assertEquals('Jane', $thirdTest['first_name']); $this->assertEquals('', $thirdTest['last_name']); } + + /** + * @test + */ + public function it_test_get_records_count() + { + $user = User::factory() + ->hasSettings() + ->create(); + + Folder::factory() + ->count(12) + ->create([ + 'user_id' => $user->id, + 'parent_id' => null, + ]); + + File::factory() + ->count(13) + ->create([ + 'user_id' => $user->id, + 'parent_id' => null, + ]); + + $folderQuery = [ + 'parent_id' => null, + 'team_folder' => false, + 'user_id' => $user->id, + 'deleted_at' => null, + ]; + + $fileQuery = [ + 'parent_id' => null, + 'user_id' => $user->id, + 'deleted_at' => null, + ]; + + Config::set('vuefilemanager.paginate.perPage', 5); + + // getRecordsCunt returned array [foldersTake, foldersSkip, filesTake, filesSkip, totalItemsCount] + + // Get folders page + $this->assertEquals([5, 0, 0, 0, 25], getRecordsCount($folderQuery, $fileQuery, '1')); + + // Get mixed page + $this->assertEquals([2, 10, 3, 0, 25], getRecordsCount($folderQuery, $fileQuery, '3')); + + // Get files page + $this->assertEquals([0, 0, 5, 8, 25], getRecordsCount($folderQuery, $fileQuery, '5')); + + // Get all pages + $this->assertEquals([12, 0, 13, 0, 25], getRecordsCount($folderQuery, $fileQuery, 'all')); + } }