From 5ea94c0ee0875f9a9fc578477276c399d4bcd1e8 Mon Sep 17 00:00:00 2001 From: Dan Wallis Date: Mon, 4 May 2020 22:14:59 +0100 Subject: [PATCH 1/2] Fix PHP Fatal error on invalid job_code When running `php bin/magento cronmanager:runjob no_such_job` the following error is encountered: Fatal error: Uncaught TypeError: Return value of EthanYehuda\CronjobManager\Model\ScheduleManagement::getGroupId() must be of the type string, null returned in /var/www/html/vendor/ethanyehuda/magento2-cronjobmanager/Model/ScheduleManagement.php:112 --- Model/ScheduleManagement.php | 6 +++++- Test/Integration/Model/ScheduleManagementTest.php | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Model/ScheduleManagement.php b/Model/ScheduleManagement.php index ca425e6c..624db811 100644 --- a/Model/ScheduleManagement.php +++ b/Model/ScheduleManagement.php @@ -9,6 +9,7 @@ use EthanYehuda\CronjobManager\Api\JobManagementInterface; use Magento\Cron\Model\ScheduleFactory; use Magento\Cron\Model\Schedule; +use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Stdlib\DateTime\DateTime; class ScheduleManagement implements ScheduleManagementInterface @@ -109,7 +110,10 @@ public function getGroupId(string $jobCode, $groups = null): string } } - return null; + throw new LocalizedException(__( + 'No such job: %jobCode', + ['jobCode' => $jobCode] + )); } public function flush(): bool diff --git a/Test/Integration/Model/ScheduleManagementTest.php b/Test/Integration/Model/ScheduleManagementTest.php index 7582c3e5..9992528a 100644 --- a/Test/Integration/Model/ScheduleManagementTest.php +++ b/Test/Integration/Model/ScheduleManagementTest.php @@ -5,6 +5,7 @@ use EthanYehuda\CronjobManager\Api\ScheduleManagementInterface; use Magento\Cron\Model\Schedule; +use Magento\Framework\Exception\LocalizedException; use Magento\TestFramework\Helper\Bootstrap; use Magento\TestFramework\ObjectManager; use PHPUnit\Framework\TestCase; @@ -31,6 +32,20 @@ protected function setUp() $this->objectManager = Bootstrap::getObjectManager(); $this->scheduleManagement = $this->objectManager->get(ScheduleManagementInterface::class); } + + public function testGetGroupIdWithValidJobCode() + { + $groupId = $this->scheduleManagement->getGroupId('backend_clean_cache'); + $this->assertSame('default', $groupId); + } + + public function testGetGroupIdWithInvalidJobCode() + { + $this->expectException(LocalizedException::class); + $this->expectExceptionMessage('No such job: not_valid'); + $this->scheduleManagement->getGroupId('not_valid'); + } + public function testKillRequestForRunningJobSucceeds() { $this->givenRunningSchedule($schedule); From 683d53d07de773d3746f2b8562c2536ead859118 Mon Sep 17 00:00:00 2001 From: Dan Wallis Date: Sat, 16 May 2020 23:55:10 +0100 Subject: [PATCH 2/2] Update docblock to show this can now @throw --- Api/ScheduleManagementInterface.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Api/ScheduleManagementInterface.php b/Api/ScheduleManagementInterface.php index cef5e5d4..9244e163 100644 --- a/Api/ScheduleManagementInterface.php +++ b/Api/ScheduleManagementInterface.php @@ -4,6 +4,7 @@ use Magento\Cron\Model\Schedule; use Magento\Framework\Exception\CouldNotSaveException; +use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Exception\NoSuchEntityException; interface ScheduleManagementInterface @@ -26,7 +27,8 @@ public function listJobs(): array; /** * @param string $jobCode * @param string[]|null $groups - * @return string|null + * @return string + * @throws LocalizedException */ public function getGroupId(string $jobCode, $groups = null);