From ec47cf429a936edd86ecb9a627b1a01ee988687e Mon Sep 17 00:00:00 2001 From: Brezo Cordero <8002881+brezocordero@users.noreply.github.com> Date: Fri, 13 May 2022 17:39:28 -0500 Subject: [PATCH] Remove PHPStan level 6 errors from DynamicSegments Remove the following errors: (Method|Property|Function) has no (return )?type specified. (Method|Function) has parameter with no type (specified). [MAILPOET-3720] --- .../DynamicSegmentsListingRepository.php | 2 +- .../DynamicSegments/FilterFactory.php | 24 ++++++- .../DynamicSegments/FilterHandlerTest.php | 11 +-- .../SegmentSaveControllerTest.php | 12 ++-- .../DynamicSegments/FilterDataMapperTest.php | 68 +++++++++---------- 5 files changed, 68 insertions(+), 49 deletions(-) diff --git a/mailpoet/lib/Segments/DynamicSegments/DynamicSegmentsListingRepository.php b/mailpoet/lib/Segments/DynamicSegments/DynamicSegmentsListingRepository.php index 8101af595f..3042cb14ad 100644 --- a/mailpoet/lib/Segments/DynamicSegments/DynamicSegmentsListingRepository.php +++ b/mailpoet/lib/Segments/DynamicSegments/DynamicSegmentsListingRepository.php @@ -7,7 +7,7 @@ use MailPoet\Segments\SegmentListingRepository; use MailPoetVendor\Doctrine\ORM\QueryBuilder; class DynamicSegmentsListingRepository extends SegmentListingRepository { - protected function applyParameters(QueryBuilder $queryBuilder, array $parameters) { + protected function applyParameters(QueryBuilder $queryBuilder, array $parameters): void { $queryBuilder ->andWhere('s.type = :type') ->setParameter('type', SegmentEntity::TYPE_DYNAMIC); diff --git a/mailpoet/lib/Segments/DynamicSegments/FilterFactory.php b/mailpoet/lib/Segments/DynamicSegments/FilterFactory.php index 58bdb86677..75d7a522d7 100644 --- a/mailpoet/lib/Segments/DynamicSegments/FilterFactory.php +++ b/mailpoet/lib/Segments/DynamicSegments/FilterFactory.php @@ -122,7 +122,11 @@ class FilterFactory { } } - private function userRole($action) { + /** + * @param ?string $action + * @return MailPoetCustomFields|SubscriberScore|SubscriberSegment|SubscriberSubscribedDate|UserRole + */ + private function userRole(?string $action) { if ($action === SubscriberSubscribedDate::TYPE) { return $this->subscriberSubscribedDate; } elseif ($action === SubscriberScore::TYPE) { @@ -135,7 +139,11 @@ class FilterFactory { return $this->userRole; } - private function email($action) { + /** + * @param ?string $action + * @return EmailAction|EmailActionClickAny|EmailOpensAbsoluteCountAction + */ + private function email(?string $action) { $countActions = [EmailOpensAbsoluteCountAction::TYPE, EmailOpensAbsoluteCountAction::MACHINE_TYPE]; if (in_array($action, $countActions)) { return $this->emailOpensAbsoluteCount; @@ -145,15 +153,25 @@ class FilterFactory { return $this->emailAction; } + /** + * @return WooCommerceMembership + */ private function wooCommerceMembership() { return $this->wooCommerceMembership; } + /** + * @return WooCommerceSubscription + */ private function wooCommerceSubscription() { return $this->wooCommerceSubscription; } - private function wooCommerce($action) { + /** + * @param ?string $action + * @return WooCommerceCategory|WooCommerceCountry|WooCommerceNumberOfOrders|WooCommerceProduct|WooCommerceTotalSpent + */ + private function wooCommerce(?string $action) { if ($action === WooCommerceProduct::ACTION_PRODUCT) { return $this->wooCommerceProduct; } elseif ($action === WooCommerceNumberOfOrders::ACTION_NUMBER_OF_ORDERS) { diff --git a/mailpoet/tests/integration/Segments/DynamicSegments/FilterHandlerTest.php b/mailpoet/tests/integration/Segments/DynamicSegments/FilterHandlerTest.php index f35e73e801..249fdccc2f 100644 --- a/mailpoet/tests/integration/Segments/DynamicSegments/FilterHandlerTest.php +++ b/mailpoet/tests/integration/Segments/DynamicSegments/FilterHandlerTest.php @@ -14,6 +14,7 @@ use MailPoet\Segments\DynamicSegments\Filters\UserRole; use MailPoet\Subscribers\SubscribersRepository; use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Doctrine\DBAL\Driver\Statement; +use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder; class FilterHandlerTest extends \MailPoetTest { @@ -26,7 +27,7 @@ class FilterHandlerTest extends \MailPoetTest { /** @var SubscriberEntity */ private $subscriber2; - public function _before() { + public function _before(): void { $this->cleanWpUsers(); $this->filterHandler = $this->diContainer->get(FilterHandler::class); $this->tester->createWordPressUser('user-role-test1@example.com', 'editor'); @@ -53,7 +54,7 @@ class FilterHandlerTest extends \MailPoetTest { $this->entityManager->flush(); } - public function testItAppliesFilter() { + public function testItAppliesFilter(): void { $segment = $this->getSegment('editor'); $statement = $this->filterHandler->apply($this->getQueryBuilder(), $segment)->execute(); assert($statement instanceof Statement); @@ -80,7 +81,7 @@ class FilterHandlerTest extends \MailPoetTest { return $segment; } - private function getQueryBuilder() { + private function getQueryBuilder(): QueryBuilder { $subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName(); return $this->entityManager ->getConnection() @@ -89,7 +90,7 @@ class FilterHandlerTest extends \MailPoetTest { ->from($subscribersTable); } - public function _after() { + public function _after(): void { $this->cleanWpUsers(); $this->truncateEntity(SubscriberEntity::class); $this->truncateEntity(SegmentEntity::class); @@ -100,7 +101,7 @@ class FilterHandlerTest extends \MailPoetTest { $this->truncateEntity(ScheduledTaskEntity::class); } - private function cleanWpUsers() { + private function cleanWpUsers(): void { $emails = ['user-role-test1@example.com', 'user-role-test2@example.com', 'user-role-test3@example.com']; foreach ($emails as $email) { $this->tester->deleteWordPressUser($email); diff --git a/mailpoet/tests/integration/Segments/DynamicSegments/SegmentSaveControllerTest.php b/mailpoet/tests/integration/Segments/DynamicSegments/SegmentSaveControllerTest.php index 48395bb826..ff59493ed9 100644 --- a/mailpoet/tests/integration/Segments/DynamicSegments/SegmentSaveControllerTest.php +++ b/mailpoet/tests/integration/Segments/DynamicSegments/SegmentSaveControllerTest.php @@ -13,13 +13,13 @@ class SegmentSaveControllerTest extends \MailPoetTest { /** @var SegmentSaveController */ private $saveController; - public function _before() { + public function _before(): void { parent::_before(); $this->cleanup(); $this->saveController = $this->diContainer->get(SegmentSaveController::class); } - public function testItCanSaveASegment() { + public function testItCanSaveASegment(): void { $segmentData = [ 'name' => 'Test Segment', 'description' => 'Description', @@ -46,7 +46,7 @@ class SegmentSaveControllerTest extends \MailPoetTest { ]); } - public function testItCanRemoveRedundantFilter() { + public function testItCanRemoveRedundantFilter(): void { $segment = $this->createSegment('Test Segment'); $this->addDynamicFilter($segment, ['editor']); $this->addDynamicFilter($segment, ['administrator']); @@ -80,7 +80,7 @@ class SegmentSaveControllerTest extends \MailPoetTest { ]); } - public function testItCheckDuplicateSegment() { + public function testItCheckDuplicateSegment(): void { $name = 'Test name'; $this->createSegment($name); $segmentData = [ @@ -97,7 +97,7 @@ class SegmentSaveControllerTest extends \MailPoetTest { $this->saveController->save($segmentData); } - public function testItValidatesSegmentFilterData() { + public function testItValidatesSegmentFilterData(): void { $name = 'Test name'; $this->createSegment($name); $segmentData = [ @@ -132,7 +132,7 @@ class SegmentSaveControllerTest extends \MailPoetTest { return $dynamicFilter; } - private function cleanup() { + private function cleanup(): void { $this->truncateEntity(SegmentEntity::class); $this->truncateEntity(DynamicSegmentFilterEntity::class); } diff --git a/mailpoet/tests/unit/Segments/DynamicSegments/FilterDataMapperTest.php b/mailpoet/tests/unit/Segments/DynamicSegments/FilterDataMapperTest.php index c7fd95b848..8dc31b6831 100644 --- a/mailpoet/tests/unit/Segments/DynamicSegments/FilterDataMapperTest.php +++ b/mailpoet/tests/unit/Segments/DynamicSegments/FilterDataMapperTest.php @@ -19,7 +19,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { /** @var FilterDataMapper */ private $mapper; - public function _before() { + public function _before(): void { parent::_before(); $wp = $this->makeEmpty(WPFunctions::class, [ 'hasFilter' => false, @@ -27,28 +27,28 @@ class FilterDataMapperTest extends \MailPoetUnitTest { $this->mapper = new FilterDataMapper($wp); } - public function testItChecksFiltersArePresent() { + public function testItChecksFiltersArePresent(): void { $this->expectException(InvalidFilterException::class); $this->expectExceptionMessage('Filters are missing'); $this->expectExceptionCode(InvalidFilterException::MISSING_FILTER); $this->mapper->map([]); } - public function testItChecksFilterTypeIsPresent() { + public function testItChecksFilterTypeIsPresent(): void { $this->expectException(InvalidFilterException::class); $this->expectExceptionMessage('Segment type is not set'); $this->expectExceptionCode(InvalidFilterException::MISSING_TYPE); $this->mapper->map(['filters' => [['someFilter']]]); } - public function testItChecksFilterTypeIsValid() { + public function testItChecksFilterTypeIsValid(): void { $this->expectException(InvalidFilterException::class); $this->expectExceptionMessage('Invalid type'); $this->expectExceptionCode(InvalidFilterException::INVALID_TYPE); $this->mapper->map(['filters' => [['segmentType' => 'noexistent']]]); } - public function testItMapsEmailFilter() { + public function testItMapsEmailFilter(): void { $data = ['filters' => [[ 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, 'action' => EmailAction::ACTION_OPENED, @@ -71,7 +71,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]); } - public function testItMapsEmailFilterForClicksWithoutLink() { + public function testItMapsEmailFilterForClicksWithoutLink(): void { $data = ['filters' => [[ 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, 'action' => EmailAction::ACTION_CLICKED, @@ -93,7 +93,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]); } - public function testItMapsEmailFilterForClicksWithLinks() { + public function testItMapsEmailFilterForClicksWithLinks(): void { $data = ['filters' => [[ 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, 'action' => EmailAction::ACTION_CLICKED, @@ -118,7 +118,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]); } - public function testItChecksOperatorForEmailFilterForClicksWithLinks() { + public function testItChecksOperatorForEmailFilterForClicksWithLinks(): void { $data = ['filters' => [[ 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, 'action' => EmailAction::ACTION_CLICKED, @@ -132,7 +132,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { $this->mapper->map($data); } - public function testItChecksFilterEmailAction() { + public function testItChecksFilterEmailAction(): void { $this->expectException(InvalidFilterException::class); $this->expectExceptionMessage('Missing action'); $this->expectExceptionCode(InvalidFilterException::MISSING_ACTION); @@ -142,7 +142,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]]]); } - public function testItChecksFilterEmailNewsletter() { + public function testItChecksFilterEmailNewsletter(): void { $this->expectException(InvalidFilterException::class); $this->expectExceptionMessage('Missing newsletter'); $this->expectExceptionCode(InvalidFilterException::MISSING_NEWSLETTER_ID); @@ -152,7 +152,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]]]); } - public function testItChecksFilterEmailActionIsSupported() { + public function testItChecksFilterEmailActionIsSupported(): void { $this->expectException(InvalidFilterException::class); $this->expectExceptionMessage('Invalid email action'); $this->expectExceptionCode(InvalidFilterException::INVALID_EMAIL_ACTION); @@ -163,7 +163,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]]]); } - public function testItMapsUserRoleFilter() { + public function testItMapsUserRoleFilter(): void { $data = ['filters' => [[ 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, 'wordpressRole' => ['editor'], @@ -184,7 +184,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]); } - public function testItChecksUserRoleFilterRole() { + public function testItChecksUserRoleFilterRole(): void { $this->expectException(InvalidFilterException::class); $this->expectExceptionMessage('Missing role'); $this->expectExceptionCode(InvalidFilterException::MISSING_ROLE); @@ -193,7 +193,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]]]); } - public function testItChecksSubscribedDateValue() { + public function testItChecksSubscribedDateValue(): void { $this->expectException(InvalidFilterException::class); $this->mapper->map(['filters' => [[ 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, @@ -201,7 +201,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]]]); } - public function testItCreatesSubscribedDate() { + public function testItCreatesSubscribedDate(): void { $filters = $this->mapper->map(['filters' => [[ 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, 'action' => SubscriberSubscribedDate::TYPE, @@ -222,7 +222,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]); } - public function testItMapsWooCommerceCategory() { + public function testItMapsWooCommerceCategory(): void { $data = ['filters' => [[ 'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE, 'action' => WooCommerceCategory::ACTION_CATEGORY, @@ -245,7 +245,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]); } - public function testItChecksWooCommerceAction() { + public function testItChecksWooCommerceAction(): void { $this->expectException(InvalidFilterException::class); $this->expectExceptionMessage('Missing action'); $this->expectExceptionCode(InvalidFilterException::MISSING_ACTION); @@ -255,7 +255,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]]]); } - public function testItChecksWooCommerceCategoryId() { + public function testItChecksWooCommerceCategoryId(): void { $this->expectException(InvalidFilterException::class); $this->expectExceptionMessage('Missing category'); $this->expectExceptionCode(InvalidFilterException::MISSING_CATEGORY_ID); @@ -266,7 +266,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]]]); } - public function testItChecksWooCommerceCategoryOperator() { + public function testItChecksWooCommerceCategoryOperator(): void { $this->expectException(InvalidFilterException::class); $this->expectExceptionMessage('Missing operator'); $this->expectExceptionCode(InvalidFilterException::MISSING_OPERATOR); @@ -278,7 +278,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]]]); } - public function testItMapsWooCommerceProduct() { + public function testItMapsWooCommerceProduct(): void { $data = ['filters' => [[ 'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE, 'action' => WooCommerceProduct::ACTION_PRODUCT, @@ -301,7 +301,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]); } - public function testItChecksWooCommerceProductId() { + public function testItChecksWooCommerceProductId(): void { $this->expectException(InvalidFilterException::class); $this->expectExceptionMessage('Missing product'); $this->expectExceptionCode(InvalidFilterException::MISSING_PRODUCT_ID); @@ -311,7 +311,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]]]); } - public function testItCreatesEmailOpens() { + public function testItCreatesEmailOpens(): void { $data = ['filters' => [[ 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, 'action' => EmailOpensAbsoluteCountAction::TYPE, @@ -334,7 +334,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]); } - public function testItMapsLinkClicksAny() { + public function testItMapsLinkClicksAny(): void { $data = ['filters' => [[ 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, 'action' => EmailActionClickAny::TYPE, @@ -353,7 +353,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]); } - public function testItCreatesEmailOpensWithOperator() { + public function testItCreatesEmailOpensWithOperator(): void { $data = ['filters' => [[ 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, 'action' => EmailOpensAbsoluteCountAction::TYPE, @@ -377,7 +377,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]); } - public function testItCreatesEmailOpensWithMissingOpens() { + public function testItCreatesEmailOpensWithMissingOpens(): void { $data = ['filters' => [[ 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, 'action' => EmailOpensAbsoluteCountAction::TYPE, @@ -387,7 +387,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { $this->mapper->map($data); } - public function testItCreatesEmailOpensWithMissingDays() { + public function testItCreatesEmailOpensWithMissingDays(): void { $data = ['filters' => [[ 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, 'action' => EmailOpensAbsoluteCountAction::TYPE, @@ -397,7 +397,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { $this->mapper->map($data); } - public function testItMapsWooCommerceNumberOfOrders() { + public function testItMapsWooCommerceNumberOfOrders(): void { $data = ['filters' => [[ 'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE, 'action' => WooCommerceNumberOfOrders::ACTION_NUMBER_OF_ORDERS, @@ -423,7 +423,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { expect($filter->getData())->equals($expectedResult); } - public function testItRaisesExceptionWhenMappingWooCommerceNumberOfOrders() { + public function testItRaisesExceptionWhenMappingWooCommerceNumberOfOrders(): void { $this->expectException(InvalidFilterException::class); $this->expectExceptionMessage('Missing required fields'); $this->expectExceptionCode(InvalidFilterException::MISSING_NUMBER_OF_ORDERS_FIELDS); @@ -434,7 +434,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]]]); } - public function testItMapsWooCommerceSubscription() { + public function testItMapsWooCommerceSubscription(): void { $data = ['filters' => [[ 'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE_SUBSCRIPTION, 'action' => WooCommerceSubscription::ACTION_HAS_ACTIVE, @@ -457,7 +457,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]); } - public function testItChecksWooCommerceSubscriptionAction() { + public function testItChecksWooCommerceSubscriptionAction(): void { $this->expectException(InvalidFilterException::class); $this->expectExceptionMessage('Missing action'); $this->expectExceptionCode(InvalidFilterException::MISSING_ACTION); @@ -469,7 +469,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { $this->mapper->map($data); } - public function testItChecksWooCommerceSubscriptionProductIds() { + public function testItChecksWooCommerceSubscriptionProductIds(): void { $this->expectException(InvalidFilterException::class); $this->expectExceptionMessage('Missing product'); $this->expectExceptionCode(InvalidFilterException::MISSING_PRODUCT_ID); @@ -481,7 +481,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { $this->mapper->map($data); } - public function testItChecksWooCommerceSubscriptionMissingOperator() { + public function testItChecksWooCommerceSubscriptionMissingOperator(): void { $this->expectException(InvalidFilterException::class); $this->expectExceptionMessage('Missing product'); $this->expectExceptionCode(InvalidFilterException::MISSING_PRODUCT_ID); @@ -492,7 +492,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { $this->mapper->map($data); } - public function testItCreatesWooCommerceCustomerCountry() { + public function testItCreatesWooCommerceCustomerCountry(): void { $data = ['filters' => [[ 'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE, 'action' => WooCommerceCountry::ACTION_CUSTOMER_COUNTRY, @@ -514,7 +514,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest { ]); } - public function testItRaisesExceptionCountryIsMissingForWooCommerceCustomerCountry() { + public function testItRaisesExceptionCountryIsMissingForWooCommerceCustomerCountry(): void { $this->expectException(InvalidFilterException::class); $this->expectExceptionMessage('Missing country'); $this->expectExceptionCode(InvalidFilterException::MISSING_COUNTRY);