diff --git a/app/modules/web/Controllers/Plugin/DeleteController.php b/app/modules/web/Controllers/Plugin/DeleteController.php index cd6901a4..53cc6e85 100644 --- a/app/modules/web/Controllers/Plugin/DeleteController.php +++ b/app/modules/web/Controllers/Plugin/DeleteController.php @@ -4,7 +4,7 @@ * * @author nuxsmin * @link https://syspass.org - * @copyright 2012-2023, Rubén Domínguez nuxsmin@$syspass.org + * @copyright 2012-2024, Rubén Domínguez nuxsmin@$syspass.org * * This file is part of sysPass. * @@ -30,7 +30,7 @@ use JsonException; use SP\Core\Application; use SP\Core\Events\Event; use SP\Domain\Core\Acl\AclActionsInterface; -use SP\Domain\Plugin\Ports\PluginManagerInterface; +use SP\Domain\Plugin\Ports\PluginManagerService; use SP\Http\JsonMessage; use SP\Modules\Web\Controllers\ControllerBase; use SP\Modules\Web\Controllers\Traits\JsonTrait; @@ -45,12 +45,12 @@ final class DeleteController extends ControllerBase use ItemTrait; use JsonTrait; - private PluginManagerInterface $pluginService; + private PluginManagerService $pluginService; public function __construct( Application $application, WebControllerHelper $webControllerHelper, - PluginManagerInterface $pluginService + PluginManagerService $pluginService ) { parent::__construct($application, $webControllerHelper); diff --git a/app/modules/web/Controllers/Plugin/DisableController.php b/app/modules/web/Controllers/Plugin/DisableController.php index 5bfbd1cb..8494a843 100644 --- a/app/modules/web/Controllers/Plugin/DisableController.php +++ b/app/modules/web/Controllers/Plugin/DisableController.php @@ -4,7 +4,7 @@ * * @author nuxsmin * @link https://syspass.org - * @copyright 2012-2023, Rubén Domínguez nuxsmin@$syspass.org + * @copyright 2012-2024, Rubén Domínguez nuxsmin@$syspass.org * * This file is part of sysPass. * @@ -30,7 +30,7 @@ use JsonException; use SP\Core\Application; use SP\Core\Events\Event; use SP\Core\Events\EventMessage; -use SP\Domain\Plugin\Ports\PluginManagerInterface; +use SP\Domain\Plugin\Ports\PluginManagerService; use SP\Http\JsonMessage; use SP\Modules\Web\Controllers\ControllerBase; use SP\Modules\Web\Controllers\Traits\JsonTrait; @@ -43,12 +43,12 @@ final class DisableController extends ControllerBase { use JsonTrait; - private PluginManagerInterface $pluginService; + private PluginManagerService $pluginService; public function __construct( Application $application, WebControllerHelper $webControllerHelper, - PluginManagerInterface $pluginService + PluginManagerService $pluginService ) { parent::__construct($application, $webControllerHelper); diff --git a/app/modules/web/Controllers/Plugin/EnableController.php b/app/modules/web/Controllers/Plugin/EnableController.php index 38eb69a0..75d743b4 100644 --- a/app/modules/web/Controllers/Plugin/EnableController.php +++ b/app/modules/web/Controllers/Plugin/EnableController.php @@ -4,7 +4,7 @@ * * @author nuxsmin * @link https://syspass.org - * @copyright 2012-2023, Rubén Domínguez nuxsmin@$syspass.org + * @copyright 2012-2024, Rubén Domínguez nuxsmin@$syspass.org * * This file is part of sysPass. * @@ -30,7 +30,7 @@ use JsonException; use SP\Core\Application; use SP\Core\Events\Event; use SP\Core\Events\EventMessage; -use SP\Domain\Plugin\Ports\PluginManagerInterface; +use SP\Domain\Plugin\Ports\PluginManagerService; use SP\Http\JsonMessage; use SP\Modules\Web\Controllers\ControllerBase; use SP\Modules\Web\Controllers\Traits\JsonTrait; @@ -43,12 +43,12 @@ final class EnableController extends ControllerBase { use JsonTrait; - private PluginManagerInterface $pluginService; + private PluginManagerService $pluginService; public function __construct( Application $application, WebControllerHelper $webControllerHelper, - PluginManagerInterface $pluginService + PluginManagerService $pluginService ) { parent::__construct($application, $webControllerHelper); diff --git a/app/modules/web/Controllers/Plugin/PluginSearchBase.php b/app/modules/web/Controllers/Plugin/PluginSearchBase.php index 6f5c9047..bcfa22ba 100644 --- a/app/modules/web/Controllers/Plugin/PluginSearchBase.php +++ b/app/modules/web/Controllers/Plugin/PluginSearchBase.php @@ -4,7 +4,7 @@ * * @author nuxsmin * @link https://syspass.org - * @copyright 2012-2023, Rubén Domínguez nuxsmin@$syspass.org + * @copyright 2012-2024, Rubén Domínguez nuxsmin@$syspass.org * * This file is part of sysPass. * @@ -28,7 +28,7 @@ namespace SP\Modules\Web\Controllers\Plugin; use SP\Core\Application; use SP\Domain\Core\Exceptions\ConstraintException; use SP\Domain\Core\Exceptions\QueryException; -use SP\Domain\Plugin\Ports\PluginManagerInterface; +use SP\Domain\Plugin\Ports\PluginManagerService; use SP\Html\DataGrid\DataGridInterface; use SP\Modules\Web\Controllers\ControllerBase; use SP\Modules\Web\Controllers\Helpers\Grid\PluginGrid; @@ -44,14 +44,14 @@ abstract class PluginSearchBase extends ControllerBase use ItemTrait; use JsonTrait; - private PluginManagerInterface $pluginService; - private PluginGrid $pluginGrid; + private PluginManagerService $pluginService; + private PluginGrid $pluginGrid; public function __construct( - Application $application, - WebControllerHelper $webControllerHelper, - PluginManagerInterface $pluginService, - PluginGrid $pluginGrid + Application $application, + WebControllerHelper $webControllerHelper, + PluginManagerService $pluginService, + PluginGrid $pluginGrid ) { parent::__construct($application, $webControllerHelper); diff --git a/app/modules/web/Controllers/Plugin/ResetController.php b/app/modules/web/Controllers/Plugin/ResetController.php index 9fc9298d..ff8a2e24 100644 --- a/app/modules/web/Controllers/Plugin/ResetController.php +++ b/app/modules/web/Controllers/Plugin/ResetController.php @@ -31,7 +31,7 @@ use SP\Core\Application; use SP\Core\Events\Event; use SP\Core\Events\EventMessage; use SP\Domain\Plugin\Ports\PluginDataService; -use SP\Domain\Plugin\Ports\PluginManagerInterface; +use SP\Domain\Plugin\Ports\PluginManagerService; use SP\Http\JsonMessage; use SP\Modules\Web\Controllers\ControllerBase; use SP\Modules\Web\Controllers\Traits\JsonTrait; @@ -44,14 +44,14 @@ final class ResetController extends ControllerBase { use JsonTrait; - private PluginManagerInterface $pluginService; - private PluginDataService $pluginDataService; + private PluginManagerService $pluginService; + private PluginDataService $pluginDataService; public function __construct( - Application $application, - WebControllerHelper $webControllerHelper, - PluginManagerInterface $pluginService, - PluginDataService $pluginDataService + Application $application, + WebControllerHelper $webControllerHelper, + PluginManagerService $pluginService, + PluginDataService $pluginDataService ) { parent::__construct($application, $webControllerHelper); diff --git a/app/modules/web/Controllers/Plugin/ViewController.php b/app/modules/web/Controllers/Plugin/ViewController.php index 15d5bed4..005ea0b3 100644 --- a/app/modules/web/Controllers/Plugin/ViewController.php +++ b/app/modules/web/Controllers/Plugin/ViewController.php @@ -34,7 +34,7 @@ use SP\Domain\Core\Acl\AclActionsInterface; use SP\Domain\Core\Exceptions\ConstraintException; use SP\Domain\Core\Exceptions\QueryException; use SP\Domain\Plugin\Models\Plugin; -use SP\Domain\Plugin\Ports\PluginManagerInterface; +use SP\Domain\Plugin\Ports\PluginManagerService; use SP\Http\JsonMessage; use SP\Infrastructure\Common\Repositories\NoSuchItemException; use SP\Modules\Web\Controllers\ControllerBase; @@ -49,14 +49,14 @@ final class ViewController extends ControllerBase { use JsonTrait; - private PluginManagerInterface $pluginService; - private PluginManager $pluginManager; + private PluginManagerService $pluginService; + private PluginManager $pluginManager; public function __construct( - Application $application, - WebControllerHelper $webControllerHelper, - PluginManagerInterface $pluginService, - PluginManager $pluginManager + Application $application, + WebControllerHelper $webControllerHelper, + PluginManagerService $pluginService, + PluginManager $pluginManager ) { parent::__construct($application, $webControllerHelper); diff --git a/lib/SP/Domain/Plugin/Ports/PluginCompatilityInterface.php b/lib/SP/Domain/Plugin/Ports/PluginCompatilityService.php similarity index 92% rename from lib/SP/Domain/Plugin/Ports/PluginCompatilityInterface.php rename to lib/SP/Domain/Plugin/Ports/PluginCompatilityService.php index a82a6a59..77c5980b 100644 --- a/lib/SP/Domain/Plugin/Ports/PluginCompatilityInterface.php +++ b/lib/SP/Domain/Plugin/Ports/PluginCompatilityService.php @@ -4,7 +4,7 @@ * * @author nuxsmin * @link https://syspass.org - * @copyright 2012-2023, Rubén Domínguez nuxsmin@$syspass.org + * @copyright 2012-2024, Rubén Domínguez nuxsmin@$syspass.org * * This file is part of sysPass. * @@ -31,7 +31,7 @@ use SP\Infrastructure\Common\Repositories\NoSuchItemException; /** * Class PluginCompatilityInterface */ -interface PluginCompatilityInterface +interface PluginCompatilityService { /** * @param PluginInterface $plugin diff --git a/lib/SP/Domain/Plugin/Ports/PluginManagerInterface.php b/lib/SP/Domain/Plugin/Ports/PluginManagerService.php similarity index 99% rename from lib/SP/Domain/Plugin/Ports/PluginManagerInterface.php rename to lib/SP/Domain/Plugin/Ports/PluginManagerService.php index c23c4bf2..36084126 100644 --- a/lib/SP/Domain/Plugin/Ports/PluginManagerInterface.php +++ b/lib/SP/Domain/Plugin/Ports/PluginManagerService.php @@ -36,7 +36,7 @@ use SP\Infrastructure\Database\QueryResult; /** * Interface PluginManagerInterface */ -interface PluginManagerInterface +interface PluginManagerService { /** * Creates an item diff --git a/lib/SP/Domain/Plugin/Services/PluginCompatility.php b/lib/SP/Domain/Plugin/Services/PluginCompatility.php index d4bcf92b..992ee7fb 100644 --- a/lib/SP/Domain/Plugin/Services/PluginCompatility.php +++ b/lib/SP/Domain/Plugin/Services/PluginCompatility.php @@ -4,7 +4,7 @@ * * @author nuxsmin * @link https://syspass.org - * @copyright 2012-2023, Rubén Domínguez nuxsmin@$syspass.org + * @copyright 2012-2024, Rubén Domínguez nuxsmin@$syspass.org * * This file is part of sysPass. * @@ -31,9 +31,9 @@ use SP\Domain\Common\Services\Service; use SP\Domain\Core\Exceptions\ConstraintException; use SP\Domain\Core\Exceptions\QueryException; use SP\Domain\Install\Services\InstallerService; -use SP\Domain\Plugin\Ports\PluginCompatilityInterface; +use SP\Domain\Plugin\Ports\PluginCompatilityService; use SP\Domain\Plugin\Ports\PluginInterface; -use SP\Domain\Plugin\Ports\PluginManagerInterface; +use SP\Domain\Plugin\Ports\PluginManagerService; use SP\Infrastructure\Common\Repositories\NoSuchItemException; use function SP\__; @@ -41,12 +41,12 @@ use function SP\__; /** * Class PluginCompatility */ -final class PluginCompatility extends Service implements PluginCompatilityInterface +final class PluginCompatility extends Service implements PluginCompatilityService { public function __construct( Application $application, - private readonly PluginManagerInterface $pluginService + private readonly PluginManagerService $pluginService ) { parent::__construct($application); } @@ -64,7 +64,7 @@ final class PluginCompatility extends Service implements PluginCompatilityInterf $pluginVersion = implode('.', $plugin->getCompatibleVersion()); $appVersion = implode('.', array_slice(InstallerService::VERSION, 0, 2)); - if (version_compare($pluginVersion, $appVersion) === -1) { + if (version_compare($pluginVersion, $appVersion, '<')) { $this->eventDispatcher->notify( 'plugin.check.version', new Event( diff --git a/lib/SP/Domain/Plugin/Services/PluginLoader.php b/lib/SP/Domain/Plugin/Services/PluginLoader.php index 83fec6fc..3e158495 100644 --- a/lib/SP/Domain/Plugin/Services/PluginLoader.php +++ b/lib/SP/Domain/Plugin/Services/PluginLoader.php @@ -4,7 +4,7 @@ * * @author nuxsmin * @link https://syspass.org - * @copyright 2012-2023, Rubén Domínguez nuxsmin@$syspass.org + * @copyright 2012-2024, Rubén Domínguez nuxsmin@$syspass.org * * This file is part of sysPass. * @@ -32,7 +32,7 @@ use SP\Domain\Core\Exceptions\ConstraintException; use SP\Domain\Core\Exceptions\QueryException; use SP\Domain\Plugin\Ports\PluginInterface; use SP\Domain\Plugin\Ports\PluginLoaderInterface; -use SP\Domain\Plugin\Ports\PluginManagerInterface; +use SP\Domain\Plugin\Ports\PluginManagerService; use SP\Infrastructure\Common\Repositories\NoSuchItemException; use function SP\__; @@ -42,7 +42,7 @@ use function SP\__; */ final class PluginLoader extends Service implements PluginLoaderInterface { - public function __construct(Application $application, private readonly PluginManagerInterface $pluginService) + public function __construct(Application $application, private readonly PluginManagerService $pluginService) { parent::__construct($application); } diff --git a/lib/SP/Domain/Plugin/Services/PluginManager.php b/lib/SP/Domain/Plugin/Services/PluginManager.php index aef98d3c..d0b1e239 100644 --- a/lib/SP/Domain/Plugin/Services/PluginManager.php +++ b/lib/SP/Domain/Plugin/Services/PluginManager.php @@ -33,7 +33,7 @@ use SP\Domain\Core\Exceptions\ConstraintException; use SP\Domain\Core\Exceptions\QueryException; use SP\Domain\Core\Exceptions\SPException; use SP\Domain\Plugin\Models\Plugin as PluginModel; -use SP\Domain\Plugin\Ports\PluginManagerInterface; +use SP\Domain\Plugin\Ports\PluginManagerService; use SP\Domain\Plugin\Ports\PluginRepository; use SP\Infrastructure\Common\Repositories\NoSuchItemException; use SP\Infrastructure\Database\QueryResult; @@ -45,7 +45,7 @@ use function SP\__u; * * @template T of PluginModel */ -final class PluginManager extends Service implements PluginManagerInterface +final class PluginManager extends Service implements PluginManagerService { public function __construct(Application $application, private readonly PluginRepository $pluginRepository) diff --git a/lib/SP/Domain/Plugin/Services/PluginRegister.php b/lib/SP/Domain/Plugin/Services/PluginRegister.php index 870877ef..a30dd4aa 100644 --- a/lib/SP/Domain/Plugin/Services/PluginRegister.php +++ b/lib/SP/Domain/Plugin/Services/PluginRegister.php @@ -32,7 +32,7 @@ use SP\Domain\Core\Exceptions\ConstraintException; use SP\Domain\Core\Exceptions\QueryException; use SP\Domain\Plugin\Models\Plugin; use SP\Domain\Plugin\Ports\PluginInterface; -use SP\Domain\Plugin\Ports\PluginManagerInterface; +use SP\Domain\Plugin\Ports\PluginManagerService; use SP\Domain\Plugin\Ports\PluginRegisterInterface; use SP\Infrastructure\Common\Repositories\NoSuchItemException; @@ -43,7 +43,7 @@ use function SP\__u; */ final class PluginRegister extends Service implements PluginRegisterInterface { - public function __construct(Application $application, private readonly PluginManagerInterface $pluginService) + public function __construct(Application $application, private readonly PluginManagerService $pluginService) { parent::__construct($application); } diff --git a/lib/SP/Domain/Plugin/Services/PluginUpgrader.php b/lib/SP/Domain/Plugin/Services/PluginUpgrader.php index dc6cbc05..5167fb92 100644 --- a/lib/SP/Domain/Plugin/Services/PluginUpgrader.php +++ b/lib/SP/Domain/Plugin/Services/PluginUpgrader.php @@ -32,7 +32,7 @@ use SP\Domain\Core\Exceptions\ConstraintException; use SP\Domain\Core\Exceptions\QueryException; use SP\Domain\Plugin\Ports\PluginDataService; use SP\Domain\Plugin\Ports\PluginInterface; -use SP\Domain\Plugin\Ports\PluginManagerInterface; +use SP\Domain\Plugin\Ports\PluginManagerService; use SP\Domain\Plugin\Ports\PluginUpgraderInterface; use SP\Infrastructure\Common\Repositories\NoSuchItemException; use SP\Util\VersionUtil; @@ -46,9 +46,9 @@ use function SP\__u; final class PluginUpgrader extends Service implements PluginUpgraderInterface { public function __construct( - Application $application, - private readonly PluginManagerInterface $pluginService, - private readonly PluginDataService $pluginDataService + Application $application, + private readonly PluginManagerService $pluginService, + private readonly PluginDataService $pluginDataService ) { parent::__construct($application); } diff --git a/lib/SP/Plugin/PluginBase.php b/lib/SP/Plugin/PluginBase.php index aec6fd59..40e67efc 100644 --- a/lib/SP/Plugin/PluginBase.php +++ b/lib/SP/Plugin/PluginBase.php @@ -4,7 +4,7 @@ * * @author nuxsmin * @link https://syspass.org - * @copyright 2012-2023, Rubén Domínguez nuxsmin@$syspass.org + * @copyright 2012-2024, Rubén Domínguez nuxsmin@$syspass.org * * This file is part of sysPass. * @@ -29,7 +29,7 @@ use SP\Domain\Common\Services\ServiceException; use SP\Domain\Core\Exceptions\ConstraintException; use SP\Domain\Core\Exceptions\NoSuchPropertyException; use SP\Domain\Core\Exceptions\QueryException; -use SP\Domain\Plugin\Ports\PluginCompatilityInterface; +use SP\Domain\Plugin\Ports\PluginCompatilityService; use SP\Domain\Plugin\Ports\PluginInterface; use SP\Domain\Plugin\Ports\PluginLoaderInterface; use SP\Domain\Plugin\Ports\PluginOperationInterface; @@ -51,7 +51,7 @@ abstract class PluginBase implements PluginInterface */ public function __construct( protected readonly PluginOperationInterface $pluginOperation, - private readonly PluginCompatilityInterface $pluginCompatilityService, + private readonly PluginCompatilityService $pluginCompatilityService, private readonly PluginLoaderInterface $pluginLoadService ) { $this->load(); diff --git a/tests/SPT/Domain/Plugin/Services/PluginCompatilityTest.php b/tests/SPT/Domain/Plugin/Services/PluginCompatilityTest.php new file mode 100644 index 00000000..6669fc65 --- /dev/null +++ b/tests/SPT/Domain/Plugin/Services/PluginCompatilityTest.php @@ -0,0 +1,107 @@ +. + */ + +namespace SPT\Domain\Plugin\Services; + +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\MockObject\Exception; +use PHPUnit\Framework\MockObject\MockObject; +use SP\Domain\Core\Exceptions\ConstraintException; +use SP\Domain\Core\Exceptions\QueryException; +use SP\Domain\Plugin\Ports\PluginInterface; +use SP\Domain\Plugin\Ports\PluginManagerService; +use SP\Domain\Plugin\Services\PluginCompatility; +use SP\Infrastructure\Common\Repositories\NoSuchItemException; +use SPT\UnitaryTestCase; + +/** + * Class PluginCompatilityTest + */ +#[Group('unitary')] +class PluginCompatilityTest extends UnitaryTestCase +{ + + private MockObject|PluginManagerService $pluginManagerService; + private PluginCompatility $pluginCompatibility; + + /** + * @throws NoSuchItemException + * @throws Exception + * @throws ConstraintException + * @throws QueryException + */ + public function testCheckForWithCompatible() + { + $plugin = $this->createMock(PluginInterface::class); + + $plugin->expects($this->once()) + ->method('getCompatibleVersion') + ->willReturn([4, 0, 0]); + + $plugin->method('getVersion') + ->willReturn([2, 1, 0]); + + $plugin->method('getName') + ->willReturn('test_plugin'); + + $this->assertTrue($this->pluginCompatibility->checkFor($plugin)); + } + + /** + * @throws NoSuchItemException + * @throws Exception + * @throws ConstraintException + * @throws QueryException + */ + public function testCheckForWithNoCompatible() + { + $plugin = $this->createMock(PluginInterface::class); + + $plugin->expects($this->once()) + ->method('getCompatibleVersion') + ->willReturn([3, 0, 0]); + + $plugin->method('getVersion') + ->willReturn([2, 1, 0]); + + $plugin->method('getName') + ->willReturn('test_plugin'); + + $this->pluginManagerService + ->expects($this->once()) + ->method('toggleEnabledByName') + ->with('test_plugin', false); + + $this->assertFalse($this->pluginCompatibility->checkFor($plugin)); + } + + protected function setUp(): void + { + parent::setUp(); + + $this->pluginManagerService = $this->createMock(PluginManagerService::class); + + $this->pluginCompatibility = new PluginCompatility($this->application, $this->pluginManagerService); + } +}