From 23ef2e4fd977de5284e863042e755a139737e7ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Witold=20Wis=CC=81niewski?= Date: Wed, 10 Jul 2024 10:19:13 +0200 Subject: [PATCH 1/2] Added phpstan --- .DS_Store | Bin 6148 -> 6148 bytes .github/workflows/phpstan.yml | 39 +++++++++++++++++++++++++++ composer.json | 3 ++- phpstan.neon | 10 +++++++ src/Export/UserGroupExport.php | 1 + src/Export/UsersExport.php | 1 + src/Import/UserGroupImport.php | 2 ++ src/Models/Group.php | 4 +++ src/Policies/CsvUserGroupsPolicy.php | 2 +- src/Policies/CsvUsersPolicy.php | 2 +- src/Services/CsvUserService.php | 8 ++++-- src/routes.php | 6 ++--- 12 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/phpstan.yml create mode 100644 phpstan.neon diff --git a/.DS_Store b/.DS_Store index c191d3b50f84f40a32f770e5feeae2828868b180..6d90bd39dc348683a7cc950ba23febae3ddffd55 100644 GIT binary patch delta 35 rcmZoMXfc@J&&ahgU^g=(*JK_R+s(}^_n0R4vR6%PNZZWL@s}R}&5#TI delta 106 zcmZoMXfc@J&&abeU^g=(&tx7JTWwy3WQKf(T!sQ5STP tvOFbFU(Fm`XYVtLCX%f?U!RF=n(0#sCls)S+vWC`}p&Fmb1`2kJe8My!e diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml new file mode 100644 index 0000000..b078b3f --- /dev/null +++ b/.github/workflows/phpstan.yml @@ -0,0 +1,39 @@ +name: Tests PHPStan in environments + +on: [pull_request] + +jobs: + php82-laravel-latest-phpstan-postgres: + runs-on: ubuntu-latest + container: + image: escolalms/php:8.2 + + services: + postgres: + image: postgres:12 + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: test + TZ: Europe/Warsaw + ports: + - 5432:5432 + + steps: + - name: Instantiate package + uses: actions/checkout@v2 + + - name: Update composer + run: COMPOSER_ROOT_VERSION=0.9.9 composer update + + - name: Setup environment + run: cp env/postgres/* . + + - name: Clear config + run: vendor/bin/testbench config:clear + + - name: Publish things + run: vendor/bin/testbench migrate:fresh + + - name: Run tests + run: vendor/bin/phpstan analyse diff --git a/composer.json b/composer.json index 9371947..841c108 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,8 @@ }, "require-dev": { "phpunit/phpunit": "^9.0", - "orchestra/testbench": "^6.0" + "orchestra/testbench": ">=7.0", + "nunomaduro/larastan": "^2.0" }, "license": "MIT", "authors": [ diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..99fcd65 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,10 @@ +includes: + - ./vendor/nunomaduro/larastan/extension.neon + +parameters: + + paths: + - src/ + + # The level 9 is the highest level + level: 5 diff --git a/src/Export/UserGroupExport.php b/src/Export/UserGroupExport.php index 6fd6762..ff00f65 100644 --- a/src/Export/UserGroupExport.php +++ b/src/Export/UserGroupExport.php @@ -39,6 +39,7 @@ public function __construct(Group $group) public function collection(): Collection { return collect($this->usersArray)->map(function ($user) { + $result = []; foreach ($this->userKeys as $key) { $result[$key] = $user[$key] ?? ''; } diff --git a/src/Export/UsersExport.php b/src/Export/UsersExport.php index 10fe2dc..72fed4e 100644 --- a/src/Export/UsersExport.php +++ b/src/Export/UsersExport.php @@ -28,6 +28,7 @@ public function __construct(Collection $users) public function collection(): Collection { return collect($this->usersArray)->map(function ($user) { + $result = []; foreach ($this->keys as $key) { $result[$key] = $user[$key] ?? ''; } diff --git a/src/Import/UserGroupImport.php b/src/Import/UserGroupImport.php index 0f35a44..2848ed4 100644 --- a/src/Import/UserGroupImport.php +++ b/src/Import/UserGroupImport.php @@ -2,6 +2,7 @@ namespace EscolaLms\CsvUsers\Import; +use EscolaLms\CsvUsers\Models\Group; use EscolaLms\CsvUsers\Services\Contracts\CsvUserServiceContract; use EscolaLms\CsvUsers\Services\CsvUserGroupService; use Illuminate\Support\Collection; @@ -24,6 +25,7 @@ public function collection(Collection $rows): void $rows = $this->prepareDataToImport($rows); $this->validateData($rows); + /** @var Group $group */ $group = $csvGroupService->saveGroupFromImport($this->prepareGroupData($rows->first())); $users = collect(); diff --git a/src/Models/Group.php b/src/Models/Group.php index 53e631f..a57f2a9 100644 --- a/src/Models/Group.php +++ b/src/Models/Group.php @@ -4,6 +4,10 @@ use EscolaLms\Auth\Models\Group as AuthGroup; +/** + * @property string $name + * @property bool $registerable + */ class Group extends AuthGroup { } diff --git a/src/Policies/CsvUserGroupsPolicy.php b/src/Policies/CsvUserGroupsPolicy.php index 94aa202..eefc954 100644 --- a/src/Policies/CsvUserGroupsPolicy.php +++ b/src/Policies/CsvUserGroupsPolicy.php @@ -4,8 +4,8 @@ use EscolaLms\Core\Enums\UserRole; use EscolaLms\CsvUsers\Enums\CsvUserPermissionsEnum; +use EscolaLms\CsvUsers\Models\User; use Illuminate\Auth\Access\HandlesAuthorization; -use Illuminate\Foundation\Auth\User; class CsvUserGroupsPolicy { diff --git a/src/Policies/CsvUsersPolicy.php b/src/Policies/CsvUsersPolicy.php index c8c53ad..ed0a482 100644 --- a/src/Policies/CsvUsersPolicy.php +++ b/src/Policies/CsvUsersPolicy.php @@ -2,9 +2,9 @@ namespace EscolaLms\CsvUsers\Policies; -use Illuminate\Foundation\Auth\User; use EscolaLms\Core\Enums\UserRole; use EscolaLms\CsvUsers\Enums\CsvUserPermissionsEnum; +use EscolaLms\CsvUsers\Models\User; use Illuminate\Auth\Access\HandlesAuthorization; class CsvUsersPolicy diff --git a/src/Services/CsvUserService.php b/src/Services/CsvUserService.php index a6713e7..34605bb 100644 --- a/src/Services/CsvUserService.php +++ b/src/Services/CsvUserService.php @@ -4,9 +4,9 @@ use EscolaLms\Auth\Dtos\UserFilterCriteriaDto; use EscolaLms\Auth\Models\Group; -use EscolaLms\Auth\Models\User; use EscolaLms\Auth\Repositories\Contracts\UserRepositoryContract; use EscolaLms\CsvUsers\Events\EscolaLmsImportedNewUserTemplateEvent; +use EscolaLms\CsvUsers\Models\User; use EscolaLms\CsvUsers\Services\Contracts\CsvUserServiceContract; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Collection; @@ -32,10 +32,14 @@ public function saveUserFromImport(Collection $data, string $returnUrl): Model $data->put('password', Hash::make($data->get('password'))); } - if ($user = $this->userRepository->findByEmail($data->get('email'))) { + /** @var User|null $user */ + $user = $this->userRepository->findByEmail($data->get('email')); + if ($user) { + /** @var User $user */ $user = $this->userRepository->update($data->toArray(), $user->getKey()); } else { $data->put('is_active', true); + /** @var User $user */ $user = $this->userRepository->create($data->toArray()); $user->markEmailAsVerified(); event(new EscolaLmsImportedNewUserTemplateEvent($user, $returnUrl)); diff --git a/src/routes.php b/src/routes.php index baa090d..3a4059c 100644 --- a/src/routes.php +++ b/src/routes.php @@ -7,11 +7,11 @@ Route::group(['middleware' => ['auth:api'], 'prefix' => 'api/admin/csv'], function () { Route::prefix('users')->group(function () { - Route::get(null, [CsvUserAPIController::class, 'export']); - Route::post(null , [CsvUserAPIController::class, 'import']); + Route::get('', [CsvUserAPIController::class, 'export']); + Route::post('' , [CsvUserAPIController::class, 'import']); }); Route::prefix('groups')->group(function () { Route::get('{group}', [CsvGroupAPIController::class, 'export']); - Route::post(null , [CsvGroupAPIController::class, 'import']); + Route::post('' , [CsvGroupAPIController::class, 'import']); }); }); From 7cdab3dee180225189bea2494641727471434e8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Witold=20Wis=CC=81niewski?= Date: Wed, 10 Jul 2024 10:56:27 +0200 Subject: [PATCH 2/2] Fix tests --- src/Policies/CsvUserGroupsPolicy.php | 2 +- src/Policies/CsvUsersPolicy.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Policies/CsvUserGroupsPolicy.php b/src/Policies/CsvUserGroupsPolicy.php index eefc954..8f79751 100644 --- a/src/Policies/CsvUserGroupsPolicy.php +++ b/src/Policies/CsvUserGroupsPolicy.php @@ -2,9 +2,9 @@ namespace EscolaLms\CsvUsers\Policies; +use EscolaLms\Auth\Models\User; use EscolaLms\Core\Enums\UserRole; use EscolaLms\CsvUsers\Enums\CsvUserPermissionsEnum; -use EscolaLms\CsvUsers\Models\User; use Illuminate\Auth\Access\HandlesAuthorization; class CsvUserGroupsPolicy diff --git a/src/Policies/CsvUsersPolicy.php b/src/Policies/CsvUsersPolicy.php index ed0a482..6db2cbc 100644 --- a/src/Policies/CsvUsersPolicy.php +++ b/src/Policies/CsvUsersPolicy.php @@ -2,9 +2,9 @@ namespace EscolaLms\CsvUsers\Policies; +use EscolaLms\Auth\Models\User; use EscolaLms\Core\Enums\UserRole; use EscolaLms\CsvUsers\Enums\CsvUserPermissionsEnum; -use EscolaLms\CsvUsers\Models\User; use Illuminate\Auth\Access\HandlesAuthorization; class CsvUsersPolicy