added test for getRecordsCount, format code

This commit is contained in:
Milos Holba
2022-05-02 18:21:20 +02:00
parent ad8793ce28
commit f75c20e5a7
24 changed files with 147 additions and 102 deletions

View File

@@ -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.',

View File

@@ -62,6 +62,6 @@ return [
],
'paginate' => [
'perPage' => 15
]
'perPage' => 15,
],
];

View File

@@ -1,8 +1,8 @@
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Schema;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{

View File

@@ -1,5 +1,4 @@
<?php
namespace App\Socialite\Controllers;
use App\Users\Models\User;
@@ -8,15 +7,16 @@ use App\Http\Controllers\Controller;
use Laravel\Socialite\Facades\Socialite;
use App\Users\Actions\CreateNewUserAction;
use Illuminate\Contracts\Auth\StatefulGuard;
use VueFileManager\Subscription\Domain\Plans\Exceptions\MeteredBillingPlanDoesntExist;
use VueFileManager\Subscription\Domain\Plans\Models\Plan;
use VueFileManager\Subscription\Domain\Plans\Exceptions\MeteredBillingPlanDoesntExist;
class SocialiteCallbackController extends Controller
{
public function __construct(
protected StatefulGuard $guard,
protected StatefulGuard $guard,
public CreateNewUserAction $createNewUser,
) {}
) {
}
/**
* @throws MeteredBillingPlanDoesntExist
@@ -60,7 +60,7 @@ class SocialiteCallbackController extends Controller
}
// Check if account registration is enabled
if (!$isAllowedRegistration) {
if (! $isAllowedRegistration) {
return response([
'type' => 'error',
'message' => 'User registration is not allowed',

View File

@@ -1,10 +1,9 @@
<?php
namespace App\Users\Actions;
use App\Users\Rules\PasswordValidationRules;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use App\Users\Rules\PasswordValidationRules;
use Laravel\Fortify\Contracts\UpdatesUserPasswords;
class UpdateUserPassword implements UpdatesUserPasswords
@@ -25,7 +24,7 @@ class UpdateUserPassword implements UpdatesUserPasswords
'current_password' => ['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');

View File

@@ -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,
]
],
];
}
}

View File

@@ -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,
]
],
];
}
}

View File

@@ -1,11 +1,11 @@
<?php
namespace Domain\Browsing\Controllers;
use Illuminate\Http\Request;
use Domain\Files\Models\File;
use Domain\Sharing\Models\Share;
use Domain\Folders\Models\Folder;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
class BrowseSharedItemsController
{
@@ -44,7 +44,7 @@ class BrowseSharedItemsController
'meta' => [
'paginate' => $paginate,
'root' => null,
]
],
];
}
}

View File

@@ -1,10 +1,10 @@
<?php
namespace Domain\Browsing\Controllers;
use Illuminate\Http\Request;
use Domain\Files\Models\File;
use Domain\Folders\Models\Folder;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
class BrowseTrashContentController
{
@@ -27,14 +27,12 @@ class BrowseTrashContentController
->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,
]
],
];
}
}

View File

@@ -1,13 +1,13 @@
<?php
namespace Domain\Browsing\Controllers;
use Illuminate\Http\Request;
use Domain\Files\Models\File;
use Domain\Sharing\Models\Share;
use Domain\Folders\Models\Folder;
use Domain\Folders\Resources\FolderResource;
use Domain\Sharing\Actions\ProtectShareRecordAction;
use Domain\Sharing\Actions\VerifyAccessToItemAction;
use Illuminate\Http\Request;
/**
* Browse shared folder
@@ -56,7 +56,7 @@ class VisitorBrowseFolderController
'meta' => [
'paginate' => $paginate,
'root' => new FolderResource($requestedFolder),
]
],
];
}
}

View File

@@ -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")

View File

@@ -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);
}

View File

@@ -1,5 +1,4 @@
<?php
namespace Domain\Files\Requests;
use Domain\Admin\Rules\DisabledMimetypes;

View File

@@ -1,10 +1,10 @@
<?php
namespace Domain\Items\Controllers;
use App\Http\Controllers\Controller;
use Domain\Files\Models\File;
use Domain\Files\Resources\FileResource;
use Domain\Folders\Models\Folder;
use App\Http\Controllers\Controller;
use Domain\Files\Resources\FileResource;
use Domain\Folders\Resources\FolderResource;
use Domain\Items\Requests\RenameItemRequest;
use Domain\Items\Actions\RenameFileOrFolderAction;

View File

@@ -3,7 +3,6 @@ namespace Domain\SetupWizard\Controllers;
use Artisan;
use App\Users\Models\User;
use Domain\SetupWizard\Actions\CreateDiskDirectoriesAction;
use Illuminate\Http\Response;
use Domain\Settings\Models\Setting;
use App\Http\Controllers\Controller;
@@ -12,6 +11,7 @@ use Domain\Pages\Actions\SeedDefaultPagesAction;
use Domain\Settings\Actions\SeedDefaultSettingsAction;
use Domain\SetupWizard\Requests\StoreAdminAccountRequest;
use Domain\Localization\Actions\SeedDefaultLanguageAction;
use Domain\SetupWizard\Actions\CreateDiskDirectoriesAction;
/**
* Create and login admin account

View File

@@ -53,8 +53,8 @@ class BrowseSharedWithMeController
'links' => $links,
'meta' => [
'paginate' => $paginate,
'root' => $id ? new FolderResource(Folder::findOrFail($id)) : null
]
'root' => $id ? new FolderResource(Folder::findOrFail($id)) : null,
],
];
}
}

View File

@@ -61,7 +61,7 @@ class TeamFoldersController extends Controller
'meta' => [
'paginate' => $paginate,
'root' => $id ? new FolderResource(Folder::findOrFail($id)) : null,
]
],
];
}

View File

@@ -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' => [

View File

@@ -1,5 +1,4 @@
<?php
namespace Domain\UploadRequest\Notifications;
use Illuminate\Bus\Queueable;
@@ -19,7 +18,8 @@ class UploadRequestFulfilledNotification extends Notification implements ShouldQ
*/
public function __construct(
public UploadRequest $uploadRequest
) {}
) {
}
/**
* Get the notification's delivery channels.
@@ -50,7 +50,7 @@ class UploadRequestFulfilledNotification extends Notification implements ShouldQ
return [
'category' => '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' => [

View File

@@ -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];
}
}
}
}

View File

@@ -1,5 +1,4 @@
<?php
namespace Tests\App\Users;
use Storage;

View File

@@ -133,7 +133,7 @@ class AdminLanguageTranslatorTest extends TestCase
->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',
]);
}

View File

@@ -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

View File

@@ -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'));
}
}