From e13a451dd18febcffd3248b4dcb44f13a827f715 Mon Sep 17 00:00:00 2001 From: Daniel Siepmann Date: Mon, 5 Feb 2024 11:25:00 +0100 Subject: [PATCH] Update * Rector result with cgl applied * Fix constructor multi line by hand * Migrate away from prophecy. --- Classes/Command/UpdateDataCommand.php | 12 +- .../Provider/LanguageAspectFactory.php | 38 +++ .../Dashboard/Provider/NewestPageviews.php | 33 +-- .../Dashboard/Provider/PageviewsPerDay.php | 46 +-- .../Provider/PageviewsPerOperatingSystem.php | 37 +-- .../Dashboard/Provider/PageviewsPerPage.php | 60 +--- Classes/Dashboard/Provider/Recordviews.php | 86 ++---- .../SymfonyExpressionLanguage.php | 2 +- Classes/Domain/Model/Pageview.php | 56 +--- Classes/Domain/Model/RecordRule.php | 24 +- Classes/Domain/Model/Recordview.php | 56 +--- Classes/Domain/Model/SymfonyExpression.php | 24 +- Classes/Domain/Pageview/Factory.php | 11 +- Classes/Domain/Recordview/Factory.php | 8 +- Classes/Domain/Repository/Pageview.php | 22 +- Classes/Domain/Repository/Recordview.php | 8 +- Classes/Hooks/DataHandler.php | 4 +- Classes/Middleware/Pageview.php | 40 +-- Classes/Middleware/Recordview.php | 35 +-- Configuration/Backend/DashboardWidgets.yaml | 4 - Configuration/TCA/tx_tracking_pageview.php | 4 +- Configuration/TCA/tx_tracking_recordview.php | 4 +- ...est.php => AbstractFunctionalTestCase.php} | 15 +- .../Command/UpdateDataCommandTest.php | 29 +- .../Provider/NewestPageviewsTest.php | 30 +- .../Provider/PageviewsPerDayTest.php | 37 +-- .../PageviewsPerOperatingSystemTest.php | 37 +-- .../Provider/PageviewsPerPageTest.php | 81 +++--- .../Dashboard/Provider/RecordviewsTest.php | 53 +--- .../Domain/Recordview/FactoryTest.php | 275 +++++++++--------- Tests/Functional/PageviewTest.php | 42 +-- Tests/Functional/RecordviewTest.php | 34 +-- Tests/Functional/Typo3FeaturesTest.php | 36 +-- Tests/Unit/Domain/Model/ExtractorTest.php | 30 +- Tests/Unit/Domain/Model/PageviewTest.php | 92 +++--- Tests/Unit/Domain/Model/RecordRuleTest.php | 31 +- Tests/Unit/Domain/Model/RecordviewTest.php | 84 ++---- Tests/Unit/Domain/Pageview/FactoryTest.php | 224 +++++++------- Tests/Unit/Domain/Repository/PageviewTest.php | 188 ++++++------ .../Unit/Domain/Repository/RecordviewTest.php | 81 +++--- composer.json | 2 - shell.nix | 18 +- 42 files changed, 749 insertions(+), 1284 deletions(-) create mode 100644 Classes/Dashboard/Provider/LanguageAspectFactory.php rename Tests/Functional/{AbstractFunctionalTest.php => AbstractFunctionalTestCase.php} (75%) diff --git a/Classes/Command/UpdateDataCommand.php b/Classes/Command/UpdateDataCommand.php index d9ae240..874606e 100644 --- a/Classes/Command/UpdateDataCommand.php +++ b/Classes/Command/UpdateDataCommand.php @@ -31,15 +31,9 @@ class UpdateDataCommand extends Command { - /** - * @var Pageview - */ - private $repository; - - public function __construct(Pageview $repository) - { - $this->repository = $repository; - + public function __construct( + private readonly Pageview $repository + ) { parent::__construct(); } diff --git a/Classes/Dashboard/Provider/LanguageAspectFactory.php b/Classes/Dashboard/Provider/LanguageAspectFactory.php new file mode 100644 index 0000000..e4df301 --- /dev/null +++ b/Classes/Dashboard/Provider/LanguageAspectFactory.php @@ -0,0 +1,38 @@ + + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +namespace DanielSiepmann\Tracking\Dashboard\Provider; + +use TYPO3\CMS\Core\Context\LanguageAspect; + +class LanguageAspectFactory +{ + public function createFromLanguageUid(int $languageUid): LanguageAspect + { + return new LanguageAspect( + $languageUid, + null, + LanguageAspect::OVERLAYS_MIXED + ); + } +} diff --git a/Classes/Dashboard/Provider/NewestPageviews.php b/Classes/Dashboard/Provider/NewestPageviews.php index 41a2eda..9e22277 100644 --- a/Classes/Dashboard/Provider/NewestPageviews.php +++ b/Classes/Dashboard/Provider/NewestPageviews.php @@ -30,35 +30,14 @@ class NewestPageviews implements ListDataProviderInterface { /** - * @var QueryBuilder + * @param int[] $languageLimitation */ - private $queryBuilder; - - /** - * @var int - */ - private $maxResults; - - /** - * @var array - */ - private $pagesToExclude; - - /** - * @var array - */ - private $languageLimitation; - public function __construct( - QueryBuilder $queryBuilder, - int $maxResults = 6, - array $pagesToExclude = [], - array $languageLimitation = [] + private readonly QueryBuilder $queryBuilder, + private readonly int $maxResults = 6, + private readonly array $pagesToExclude = [], + private readonly array $languageLimitation = [] ) { - $this->queryBuilder = $queryBuilder; - $this->maxResults = $maxResults; - $this->pagesToExclude = $pagesToExclude; - $this->languageLimitation = $languageLimitation; } public function getItems(): array @@ -98,7 +77,7 @@ public function getItems(): array $this->queryBuilder->where(...$constraints); } - $items = $this->queryBuilder->execute()->fetchAll(); + $items = $this->queryBuilder->executeQuery()->fetchAllAssociative(); foreach ($items as $item) { if (is_array($item) === false) { continue; diff --git a/Classes/Dashboard/Provider/PageviewsPerDay.php b/Classes/Dashboard/Provider/PageviewsPerDay.php index 1a71837..886f139 100644 --- a/Classes/Dashboard/Provider/PageviewsPerDay.php +++ b/Classes/Dashboard/Provider/PageviewsPerDay.php @@ -24,6 +24,7 @@ namespace DanielSiepmann\Tracking\Dashboard\Provider; use DanielSiepmann\Tracking\Extension; +use Doctrine\DBAL\Platforms\SqlitePlatform; use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Database\Query\QueryBuilder; use TYPO3\CMS\Core\Localization\LanguageService; @@ -38,43 +39,17 @@ class PageviewsPerDay implements ChartDataProviderInterface private $languageService; /** - * @var QueryBuilder + * @param int[] $pagesToExclude + * @param int[] $languageLimitation */ - private $queryBuilder; - - /** - * @var int - */ - private $days; - - /** - * @var array - */ - private $pagesToExclude; - - /** - * @var string - */ - private $dateFormat; - - /** - * @var array - */ - private $languageLimitation; - public function __construct( - QueryBuilder $queryBuilder, - int $days = 31, - array $pagesToExclude = [], - array $languageLimitation = [], - string $dateFormat = 'Y-m-d' + private readonly QueryBuilder $queryBuilder, + private readonly int $days = 31, + private readonly array $pagesToExclude = [], + private readonly array $languageLimitation = [], + private readonly string $dateFormat = 'Y-m-d' ) { $this->languageService = $GLOBALS['LANG']; - $this->queryBuilder = $queryBuilder; - $this->days = $days; - $this->pagesToExclude = $pagesToExclude; - $this->languageLimitation = $languageLimitation; - $this->dateFormat = $dateFormat; } public function getChartData(): array @@ -154,13 +129,12 @@ private function getPageviewsInPeriod(int $start, int $end): array ->groupBy('label') ->orderBy('label', 'ASC') ; - - if ($this->queryBuilder->getConnection()->getDatabasePlatform()->getName() === 'sqlite') { + if ($this->queryBuilder->getConnection()->getDatabasePlatform() instanceof SqlitePlatform) { $this->queryBuilder->addSelectLiteral('date(crdate, "unixepoch") as "label"'); } else { $this->queryBuilder->addSelectLiteral('FROM_UNIXTIME(crdate, "%Y-%m-%d") as "label"'); } - return $this->queryBuilder->execute()->fetchAll(); + return $this->queryBuilder->executeQuery()->fetchAllAssociative(); } } diff --git a/Classes/Dashboard/Provider/PageviewsPerOperatingSystem.php b/Classes/Dashboard/Provider/PageviewsPerOperatingSystem.php index 54ab8d4..f731673 100644 --- a/Classes/Dashboard/Provider/PageviewsPerOperatingSystem.php +++ b/Classes/Dashboard/Provider/PageviewsPerOperatingSystem.php @@ -31,35 +31,14 @@ class PageviewsPerOperatingSystem implements ChartDataProviderInterface { /** - * @var QueryBuilder + * @param int[] $languageLimitation */ - private $queryBuilder; - - /** - * @var int - */ - private $days; - - /** - * @var int - */ - private $maxResults; - - /** - * @var array - */ - private $languageLimitation; - public function __construct( - QueryBuilder $queryBuilder, - int $days = 31, - int $maxResults = 6, - array $languageLimitation = [] + private readonly QueryBuilder $queryBuilder, + private readonly int $days = 31, + private readonly int $maxResults = 6, + private readonly array $languageLimitation = [] ) { - $this->queryBuilder = $queryBuilder; - $this->days = $days; - $this->maxResults = $maxResults; - $this->languageLimitation = $languageLimitation; } public function getChartData(): array @@ -112,8 +91,8 @@ private function getPageViewsPerPage(): array ->orderBy('total', 'desc') ->addOrderBy('operating_system', 'asc') ->setMaxResults($this->maxResults) - ->execute() - ->fetchAll() + ->executeQuery() + ->fetchAllAssociative() ; foreach ($result as $row) { @@ -121,7 +100,7 @@ private function getPageViewsPerPage(): array continue; } - $labels[] = mb_strimwidth($row['operating_system'], 0, 50, '…'); + $labels[] = mb_strimwidth((string)$row['operating_system'], 0, 50, '…'); $data[] = $row['total']; } diff --git a/Classes/Dashboard/Provider/PageviewsPerPage.php b/Classes/Dashboard/Provider/PageviewsPerPage.php index 723c95e..670aa23 100644 --- a/Classes/Dashboard/Provider/PageviewsPerPage.php +++ b/Classes/Dashboard/Provider/PageviewsPerPage.php @@ -33,49 +33,18 @@ class PageviewsPerPage implements ChartDataProviderInterface { /** - * @var QueryBuilder + * @param int[] $pagesToExclude + * @param int[] $languageLimitation */ - private $queryBuilder; - - /** - * @var PageRepository - */ - private $pageRepository; - - /** - * @var int - */ - private $days; - - /** - * @var int - */ - private $maxResults; - - /** - * @var array - */ - private $pagesToExclude; - - /** - * @var array - */ - private $languageLimitation; - public function __construct( - QueryBuilder $queryBuilder, - PageRepository $pageRepository, - int $days = 31, - int $maxResults = 6, - array $pagesToExclude = [], - array $languageLimitation = [] + private readonly QueryBuilder $queryBuilder, + private readonly PageRepository $pageRepository, + private readonly LanguageAspectFactory $languageAspectFactory, + private readonly int $days = 31, + private readonly int $maxResults = 6, + private readonly array $pagesToExclude = [], + private readonly array $languageLimitation = [] ) { - $this->queryBuilder = $queryBuilder; - $this->pageRepository = $pageRepository; - $this->days = $days; - $this->maxResults = $maxResults; - $this->pagesToExclude = $pagesToExclude; - $this->languageLimitation = $languageLimitation; } public function getChartData(): array @@ -136,8 +105,8 @@ private function getPageviewsPerPage(): array ->orderBy('total', 'desc') ->addOrderBy('latest', 'desc') ->setMaxResults($this->maxResults) - ->execute() - ->fetchAll() + ->executeQuery() + ->fetchAllAssociative() ; foreach ($result as $row) { @@ -159,13 +128,16 @@ private function getRecordTitle(int $uid): string { $record = BackendUtility::getRecord('pages', $uid); if (count($this->languageLimitation) === 1 && $record !== null) { - $record = $this->pageRepository->getRecordOverlay('pages', $record, $this->languageLimitation[0]); + $record = $this->pageRepository->getPageOverlay( + $record, + $this->languageLimitation[0] + ); } if (is_array($record) === false) { return 'Unkown'; } - return strip_tags(BackendUtility::getRecordTitle('pages', $record, true)); + return strip_tags((string)BackendUtility::getRecordTitle('pages', $record, true)); } } diff --git a/Classes/Dashboard/Provider/Recordviews.php b/Classes/Dashboard/Provider/Recordviews.php index c6bd398..df219fe 100644 --- a/Classes/Dashboard/Provider/Recordviews.php +++ b/Classes/Dashboard/Provider/Recordviews.php @@ -35,63 +35,20 @@ class Recordviews implements ChartDataProviderInterface { /** - * @var PageRepository + * @param int[] $pagesToExclude + * @param int[] $languageLimitation */ - private $pageRepository; - - /** - * @var QueryBuilder - */ - private $queryBuilder; - - /** - * @var int - */ - private $days; - - /** - * @var int - */ - private $maxResults; - - /** - * @var array - */ - private $pagesToExclude; - - /** - * @var array - */ - private $languageLimitation; - - /** - * @var array - */ - private $recordTableLimitation; - - /** - * @var array - */ - private $recordTypeLimitation; - public function __construct( - PageRepository $pageRepository, - QueryBuilder $queryBuilder, - int $days = 31, - int $maxResults = 6, - array $pagesToExclude = [], - array $languageLimitation = [], - array $recordTableLimitation = [], - array $recordTypeLimitation = [] + private readonly PageRepository $pageRepository, + private readonly QueryBuilder $queryBuilder, + private readonly LanguageAspectFactory $languageAspectFactory, + private readonly int $days = 31, + private readonly int $maxResults = 6, + private readonly array $pagesToExclude = [], + private readonly array $languageLimitation = [], + private readonly array $recordTableLimitation = [], + private readonly array $recordTypeLimitation = [] ) { - $this->pageRepository = $pageRepository; - $this->queryBuilder = $queryBuilder; - $this->days = $days; - $this->pagesToExclude = $pagesToExclude; - $this->languageLimitation = $languageLimitation; - $this->maxResults = $maxResults; - $this->recordTableLimitation = $recordTableLimitation; - $this->recordTypeLimitation = $recordTypeLimitation; } public function getChartData(): array @@ -133,7 +90,7 @@ private function getRecordviews(): array continue; } - $labels[] = mb_strimwidth($record['title'], 0, 25, '…'); + $labels[] = mb_strimwidth((string)$record['title'], 0, 25, '…'); $data[] = $recordview['total']; } @@ -194,10 +151,10 @@ private function getRecordviewsRecords(): Generator ->orderBy('total', 'desc') ->addOrderBy('latest', 'desc') ->setMaxResults($this->maxResults) - ->execute() + ->executeQuery() ; - while ($row = $result->fetch()) { + while ($row = $result->fetchAssociative()) { yield $row; } } @@ -210,10 +167,10 @@ private function getRecord( $record = BackendUtility::getRecord($table, $uid); if (count($this->languageLimitation) === 1 && $record !== null) { - $record = $this->pageRepository->getRecordOverlay( + $record = $this->pageRepository->getLanguageOverlay( $table, $record, - $this->createLanguageAspect($this->languageLimitation[0]) + $this->languageAspectFactory->createFromLanguageUid($this->languageLimitation[0]) ); } @@ -222,17 +179,8 @@ private function getRecord( } return [ - 'title' => strip_tags(BackendUtility::getRecordTitle($table, $record, true)), + 'title' => strip_tags((string)BackendUtility::getRecordTitle($table, $record, true)), 'type' => $record[$recordTypeField] ?? '', ]; } - - private function createLanguageAspect(int $languageUid): LanguageAspect - { - return new LanguageAspect( - $languageUid, - null, - LanguageAspect::OVERLAYS_MIXED - ); - } } diff --git a/Classes/Domain/ExpressionLanguage/SymfonyExpressionLanguage.php b/Classes/Domain/ExpressionLanguage/SymfonyExpressionLanguage.php index f30cf06..eb90340 100644 --- a/Classes/Domain/ExpressionLanguage/SymfonyExpressionLanguage.php +++ b/Classes/Domain/ExpressionLanguage/SymfonyExpressionLanguage.php @@ -61,7 +61,7 @@ static function ($arguments, $array, $path) { } try { return ArrayUtility::getValueByPath($array, $path); - } catch (MissingArrayPathException $e) { + } catch (MissingArrayPathException) { return ''; } } diff --git a/Classes/Domain/Model/Pageview.php b/Classes/Domain/Model/Pageview.php index eef5058..cfd3917 100644 --- a/Classes/Domain/Model/Pageview.php +++ b/Classes/Domain/Model/Pageview.php @@ -28,57 +28,15 @@ class Pageview implements HasUserAgent { - /** - * @var int - */ - private $uid = 0; - - /** - * @var int - */ - private $pageUid; - - /** - * @var SiteLanguage - */ - private $language; - - /** - * @var DateTimeImmutable - */ - private $crdate; - - /** - * @var int - */ - private $pageType; - - /** - * @var string - */ - private $url; - - /** - * @var string - */ - private $userAgent; - public function __construct( - int $pageUid, - SiteLanguage $language, - DateTimeImmutable $crdate, - int $pageType, - string $url, - string $userAgent, - int $uid = 0 + private readonly int $pageUid, + private readonly SiteLanguage $language, + private readonly DateTimeImmutable $crdate, + private readonly int $pageType, + private readonly string $url, + private readonly string $userAgent, + private readonly int $uid = 0 ) { - $this->uid = $uid; - $this->pageUid = $pageUid; - $this->language = $language; - $this->crdate = $crdate; - $this->pageType = $pageType; - $this->url = $url; - $this->userAgent = $userAgent; } public function getUid(): int diff --git a/Classes/Domain/Model/RecordRule.php b/Classes/Domain/Model/RecordRule.php index 3f64c31..0d7f6e9 100644 --- a/Classes/Domain/Model/RecordRule.php +++ b/Classes/Domain/Model/RecordRule.php @@ -25,29 +25,11 @@ class RecordRule { - /** - * @var string - */ - private $matches; - - /** - * @var string - */ - private $recordUid; - - /** - * @var string - */ - private $tableName; - public function __construct( - string $matches, - string $recordUid, - string $tableName + private readonly string $matches, + private readonly string $recordUid, + private readonly string $tableName ) { - $this->matches = $matches; - $this->recordUid = $recordUid; - $this->tableName = $tableName; } public static function fromArray(array $config): self diff --git a/Classes/Domain/Model/Recordview.php b/Classes/Domain/Model/Recordview.php index a89fdca..e5d7576 100644 --- a/Classes/Domain/Model/Recordview.php +++ b/Classes/Domain/Model/Recordview.php @@ -28,57 +28,15 @@ class Recordview implements HasUserAgent { - /** - * @var int - */ - private $pageUid; - - /** - * @var SiteLanguage - */ - private $language; - - /** - * @var DateTimeImmutable - */ - private $crdate; - - /** - * @var string - */ - private $url; - - /** - * @var string - */ - private $userAgent; - - /** - * @var int - */ - private $recordUid; - - /** - * @var string - */ - private $tableName; - public function __construct( - int $pageUid, - SiteLanguage $language, - DateTimeImmutable $crdate, - string $url, - string $userAgent, - int $recordUid, - string $tableName + private readonly int $pageUid, + private readonly SiteLanguage $language, + private readonly DateTimeImmutable $crdate, + private readonly string $url, + private readonly string $userAgent, + private readonly int $recordUid, + private readonly string $tableName ) { - $this->pageUid = $pageUid; - $this->language = $language; - $this->crdate = $crdate; - $this->url = $url; - $this->userAgent = $userAgent; - $this->recordUid = $recordUid; - $this->tableName = $tableName; } public function getPageUid(): int diff --git a/Classes/Domain/Model/SymfonyExpression.php b/Classes/Domain/Model/SymfonyExpression.php index a659902..d5c2789 100644 --- a/Classes/Domain/Model/SymfonyExpression.php +++ b/Classes/Domain/Model/SymfonyExpression.php @@ -27,29 +27,11 @@ class SymfonyExpression implements Expression { - /** - * @var string - */ - private $expression; - - /** - * @var array - */ - private $values; - - /** - * @var ExpressionLanguage - */ - private $symfonyExpression; - public function __construct( - string $expression, - array $values, - ExpressionLanguage $symfonyExpression + private readonly string $expression, + private readonly array $values, + private readonly ExpressionLanguage $symfonyExpression ) { - $this->expression = $expression; - $this->values = $values; - $this->symfonyExpression = $symfonyExpression; } public function evaluate() diff --git a/Classes/Domain/Pageview/Factory.php b/Classes/Domain/Pageview/Factory.php index 4dd7b1e..3626aee 100644 --- a/Classes/Domain/Pageview/Factory.php +++ b/Classes/Domain/Pageview/Factory.php @@ -33,14 +33,9 @@ class Factory { - /** - * @var SiteFinder - */ - private $siteFinder; - - public function __construct(SiteFinder $siteFinder) - { - $this->siteFinder = $siteFinder; + public function __construct( + private readonly SiteFinder $siteFinder + ) { } public function fromRequest(ServerRequestInterface $request): Pageview diff --git a/Classes/Domain/Recordview/Factory.php b/Classes/Domain/Recordview/Factory.php index a2b5c75..27b355d 100644 --- a/Classes/Domain/Recordview/Factory.php +++ b/Classes/Domain/Recordview/Factory.php @@ -34,15 +34,9 @@ class Factory { - /** - * @var ExpressionFactory - */ - private $expressionFactory; - public function __construct( - ExpressionFactory $expressionFactory + private readonly ExpressionFactory $expressionFactory ) { - $this->expressionFactory = $expressionFactory; } public function fromRequest( diff --git a/Classes/Domain/Repository/Pageview.php b/Classes/Domain/Repository/Pageview.php index 75c8104..1c6e269 100644 --- a/Classes/Domain/Repository/Pageview.php +++ b/Classes/Domain/Repository/Pageview.php @@ -31,22 +31,10 @@ class Pageview { - /** - * @var Connection - */ - private $connection; - - /** - * @var Factory - */ - private $factory; - public function __construct( - Connection $connection, - Factory $factory + private readonly Connection $connection, + private readonly Factory $factory ) { - $this->connection = $connection; - $this->factory = $factory; } public function countAll(): int @@ -54,7 +42,7 @@ public function countAll(): int $result = $this->connection->createQueryBuilder() ->count('uid') ->from('tx_tracking_pageview') - ->execute() + ->executeQuery() ->fetchOne() ; @@ -68,9 +56,9 @@ public function countAll(): int public function findAll(): Generator { $queryBuilder = $this->connection->createQueryBuilder(); - $pageViews = $queryBuilder->select('*')->from('tx_tracking_pageview')->execute(); + $pageViews = $queryBuilder->select('*')->from('tx_tracking_pageview')->executeQuery(); - while ($pageView = $pageViews->fetch()) { + while ($pageView = $pageViews->fetchAssociative()) { if (is_array($pageView) === false) { continue; } diff --git a/Classes/Domain/Repository/Recordview.php b/Classes/Domain/Repository/Recordview.php index 0849dd8..7cff637 100644 --- a/Classes/Domain/Repository/Recordview.php +++ b/Classes/Domain/Repository/Recordview.php @@ -28,15 +28,9 @@ class Recordview { - /** - * @var Connection - */ - private $connection; - public function __construct( - Connection $connection + private readonly Connection $connection ) { - $this->connection = $connection; } public function add(Model $recordview): void diff --git a/Classes/Hooks/DataHandler.php b/Classes/Hooks/DataHandler.php index 92d4386..2411821 100644 --- a/Classes/Hooks/DataHandler.php +++ b/Classes/Hooks/DataHandler.php @@ -55,9 +55,7 @@ private function preventCopyOfTrackingTables(Typo3DataHandler $dataHandler): voi $copyWhichTables = GeneralUtility::trimExplode(',', $dataHandler->copyWhichTables, true); } - $copyWhichTables = array_filter($copyWhichTables, static function (string $tableName) { - return \str_starts_with($tableName, 'tx_tracking_') === false; - }); + $copyWhichTables = array_filter($copyWhichTables, static fn (string $tableName) => \str_starts_with($tableName, 'tx_tracking_') === false); $dataHandler->copyWhichTables = implode(',', $copyWhichTables); } diff --git a/Classes/Middleware/Pageview.php b/Classes/Middleware/Pageview.php index 3eae658..24919ab 100644 --- a/Classes/Middleware/Pageview.php +++ b/Classes/Middleware/Pageview.php @@ -34,43 +34,13 @@ class Pageview implements MiddlewareInterface { - /** - * @var Repository - */ - private $repository; - - /** - * @var Context - */ - private $context; - - /** - * @var Factory - */ - private $factory; - - /** - * @var ExpressionFactory - */ - private $expressionFactory; - - /** - * @var string - */ - private $rule = ''; - public function __construct( - Repository $repository, - Context $context, - Factory $factory, - ExpressionFactory $expressionFactory, - string $rule + private readonly Repository $repository, + private readonly Context $context, + private readonly Factory $factory, + private readonly ExpressionFactory $expressionFactory, + private readonly string $rule ) { - $this->repository = $repository; - $this->context = $context; - $this->factory = $factory; - $this->expressionFactory = $expressionFactory; - $this->rule = $rule; } public function process( diff --git a/Classes/Middleware/Recordview.php b/Classes/Middleware/Recordview.php index 8427790..6a96dce 100644 --- a/Classes/Middleware/Recordview.php +++ b/Classes/Middleware/Recordview.php @@ -35,43 +35,18 @@ class Recordview implements MiddlewareInterface { - /** - * @var Repository - */ - private $repository; - - /** - * @var Context - */ - private $context; - - /** - * @var Factory - */ - private $factory; - - /** - * @var ExpressionFactory - */ - private $expressionFactory; - /** * @var array */ - private $rules = []; + private array $rules = []; public function __construct( - Repository $repository, - Context $context, - Factory $factory, - ExpressionFactory $expressionFactory, + private readonly Repository $repository, + private readonly Context $context, + private readonly Factory $factory, + private readonly ExpressionFactory $expressionFactory, array $rules ) { - $this->repository = $repository; - $this->context = $context; - $this->factory = $factory; - $this->expressionFactory = $expressionFactory; - $this->rules = RecordRule::multipleFromArray($rules); } diff --git a/Configuration/Backend/DashboardWidgets.yaml b/Configuration/Backend/DashboardWidgets.yaml index 7fa7a7d..aad5363 100644 --- a/Configuration/Backend/DashboardWidgets.yaml +++ b/Configuration/Backend/DashboardWidgets.yaml @@ -14,7 +14,6 @@ services: dashboard.widget.danielsiepmann.tracking.pageViewsPerDay: class: 'TYPO3\CMS\Dashboard\Widgets\BarChartWidget' arguments: - $view: '@dashboard.views.widget' $dataProvider: '@DanielSiepmann\Tracking\Dashboard\Provider\PageviewsPerDay' tags: - name: 'dashboard.widget' @@ -34,7 +33,6 @@ services: dashboard.widget.danielsiepmann.tracking.pageViewsPerPage: class: 'TYPO3\CMS\Dashboard\Widgets\DoughnutChartWidget' arguments: - $view: '@dashboard.views.widget' $dataProvider: '@DanielSiepmann\Tracking\Dashboard\Provider\PageviewsPerPage' tags: - name: 'dashboard.widget' @@ -54,7 +52,6 @@ services: dashboard.widget.danielsiepmann.tracking.newestPageviews: class: 'TYPO3\CMS\Dashboard\Widgets\ListWidget' arguments: - $view: '@dashboard.views.widget' $dataProvider: '@DanielSiepmann\Tracking\Dashboard\Provider\NewestPageviews' tags: - name: 'dashboard.widget' @@ -74,7 +71,6 @@ services: dashboard.widget.danielsiepmann.tracking.operatingSystems: class: 'TYPO3\CMS\Dashboard\Widgets\DoughnutChartWidget' arguments: - $view: '@dashboard.views.widget' $dataProvider: '@DanielSiepmann\Tracking\Dashboard\Provider\PageviewsPerOperatingSystem' tags: - name: 'dashboard.widget' diff --git a/Configuration/TCA/tx_tracking_pageview.php b/Configuration/TCA/tx_tracking_pageview.php index 7a70688..5ec5c33 100644 --- a/Configuration/TCA/tx_tracking_pageview.php +++ b/Configuration/TCA/tx_tracking_pageview.php @@ -1,5 +1,7 @@ [ 'label' => 'url', @@ -70,7 +72,7 @@ ], ]; -if ((new \TYPO3\CMS\Core\Information\Typo3Version())->getMajorVersion() < 12) { +if ((new Typo3Version())->getMajorVersion() < 12) { $tca['ctrl']['cruser_id'] = 'cruser_id'; $tca['columns']['crdate']['config']['type'] = 'input'; diff --git a/Configuration/TCA/tx_tracking_recordview.php b/Configuration/TCA/tx_tracking_recordview.php index feca156..228f1db 100644 --- a/Configuration/TCA/tx_tracking_recordview.php +++ b/Configuration/TCA/tx_tracking_recordview.php @@ -1,5 +1,7 @@ [ 'label' => 'record', @@ -73,7 +75,7 @@ ], ]; -if ((new \TYPO3\CMS\Core\Information\Typo3Version())->getMajorVersion() < 12) { +if ((new Typo3Version())->getMajorVersion() < 12) { $tca['ctrl']['cruser_id'] = 'cruser_id'; $tca['columns']['crdate']['config']['type'] = 'input'; diff --git a/Tests/Functional/AbstractFunctionalTest.php b/Tests/Functional/AbstractFunctionalTestCase.php similarity index 75% rename from Tests/Functional/AbstractFunctionalTest.php rename to Tests/Functional/AbstractFunctionalTestCase.php index 7677227..0d587f7 100644 --- a/Tests/Functional/AbstractFunctionalTest.php +++ b/Tests/Functional/AbstractFunctionalTestCase.php @@ -21,21 +21,14 @@ * 02110-1301, USA. */ -namespace DanielSiepmann\Tests\Functional; +namespace DanielSiepmann\Tracking\Tests\Functional; use Codappix\Typo3PhpDatasets\TestingFramework; -use DanielSiepmann\AbstractFunctional; use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase; -abstract class AbstractFunctionalTest extends FunctionalTestCase +abstract class AbstractFunctionalTestCase extends FunctionalTestCase { use TestingFramework; - - protected array $testExtensionsToLoad = [ - 'danielsiepmann/tracking', - ]; - - protected array $coreExtensionsToLoad = [ - 'typo3/cms-dashboard', - ]; + protected array $testExtensionsToLoad = ['danielsiepmann/tracking']; + protected array $coreExtensionsToLoad = ['typo3/cms-dashboard']; } diff --git a/Tests/Functional/Command/UpdateDataCommandTest.php b/Tests/Functional/Command/UpdateDataCommandTest.php index 50345a5..14c74ec 100644 --- a/Tests/Functional/Command/UpdateDataCommandTest.php +++ b/Tests/Functional/Command/UpdateDataCommandTest.php @@ -21,30 +21,21 @@ * 02110-1301, USA. */ -use Codappix\Typo3PhpDatasets\TestingFramework; use DanielSiepmann\Tracking\Command\UpdateDataCommand; +use DanielSiepmann\Tracking\Tests\Functional\AbstractFunctionalTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; use Symfony\Component\Console\Tester\CommandTester; use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase; -/** - * @covers \DanielSiepmann\Tracking\Command\UpdateDataCommand - */ -class UpdateDataCommandTest extends FunctionalTestCase +#[CoversClass(UpdateDataCommand::class)] +final class UpdateDataCommandTest extends AbstractFunctionalTestCase { - use TestingFramework; - - protected array $testExtensionsToLoad = [ - 'typo3conf/ext/tracking', - ]; - protected array $pathsToLinkInTestInstance = [ 'typo3conf/ext/tracking/Tests/Functional/Fixtures/sites' => 'typo3conf/sites', ]; - /** - * @test - */ + #[Test] public function updatesAllEntriesWithMissingOperatingSystem(): void { $this->importPHPDataSet(__DIR__ . '/../Fixtures/UpdateDataCommandTest/PageviewsWithMissingOperatingSystem.php'); @@ -61,9 +52,7 @@ public function updatesAllEntriesWithMissingOperatingSystem(): void self::assertSame('Android', $records[1]['operating_system']); } - /** - * @test - */ + #[Test] public function doesNotChangeExistingOperatingSystem(): void { $this->importPHPDataSet(__DIR__ . '/../Fixtures/UpdateDataCommandTest/PageviewsWithOperatingSystem.php'); @@ -80,9 +69,7 @@ public function doesNotChangeExistingOperatingSystem(): void self::assertSame('Android', $records[1]['operating_system']); } - /** - * @test - */ + #[Test] public function doesNothingIfNoRecordExists(): void { $this->importPHPDataSet(__DIR__ . '/../Fixtures/Pages.php'); diff --git a/Tests/Functional/Dashboard/Provider/NewestPageviewsTest.php b/Tests/Functional/Dashboard/Provider/NewestPageviewsTest.php index e88bd72..9a7edc0 100644 --- a/Tests/Functional/Dashboard/Provider/NewestPageviewsTest.php +++ b/Tests/Functional/Dashboard/Provider/NewestPageviewsTest.php @@ -22,22 +22,16 @@ */ use DanielSiepmann\Tracking\Dashboard\Provider\NewestPageviews; +use DanielSiepmann\Tracking\Tests\Functional\AbstractFunctionalTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase; -/** - * @covers \DanielSiepmann\Tracking\Dashboard\Provider\NewestPageviews - */ -class NewestPageviewsTest extends FunctionalTestCase +#[CoversClass(NewestPageviews::class)] +final class NewestPageviewsTest extends AbstractFunctionalTestCase { - protected array $testExtensionsToLoad = [ - 'typo3conf/ext/tracking', - ]; - - /** - * @test - */ + #[Test] public function returnsRecentSixPageviews(): void { $connection = $this->getConnectionPool()->getConnectionForTable('tx_tracking_pageview'); @@ -64,9 +58,7 @@ public function returnsRecentSixPageviews(): void ], $subject->getItems()); } - /** - * @test - */ + #[Test] public function respectsMaxResults(): void { $connection = $this->getConnectionPool()->getConnectionForTable('tx_tracking_pageview'); @@ -90,9 +82,7 @@ public function respectsMaxResults(): void ], $subject->getItems()); } - /** - * @test - */ + #[Test] public function respectsPagesToExclude(): void { $connection = $this->getConnectionPool()->getConnectionForTable('tx_tracking_pageview'); @@ -121,9 +111,7 @@ public function respectsPagesToExclude(): void ], $subject->getItems()); } - /** - * @test - */ + #[Test] public function respectsLimitToLanguages(): void { $connection = $this->getConnectionPool()->getConnectionForTable('tx_tracking_pageview'); diff --git a/Tests/Functional/Dashboard/Provider/PageviewsPerDayTest.php b/Tests/Functional/Dashboard/Provider/PageviewsPerDayTest.php index 2336757..028478c 100644 --- a/Tests/Functional/Dashboard/Provider/PageviewsPerDayTest.php +++ b/Tests/Functional/Dashboard/Provider/PageviewsPerDayTest.php @@ -21,24 +21,17 @@ * 02110-1301, USA. */ -use Codappix\Typo3PhpDatasets\TestingFramework; use DanielSiepmann\Tracking\Dashboard\Provider\PageviewsPerDay; +use DanielSiepmann\Tracking\Tests\Functional\AbstractFunctionalTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Localization\LanguageServiceFactory; use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase; -/** - * @covers \DanielSiepmann\Tracking\Dashboard\Provider\PageviewsPerDay - */ -class PageviewsPerDayTest extends FunctionalTestCase +#[CoversClass(PageviewsPerDay::class)] +final class PageviewsPerDayTest extends AbstractFunctionalTestCase { - use TestingFramework; - - protected array $testExtensionsToLoad = [ - 'typo3conf/ext/tracking', - ]; - protected function setUp(): void { parent::setUp(); @@ -51,9 +44,7 @@ protected function tearDown(): void parent::tearDown(); } - /** - * @test - */ + #[Test] public function listsResultsForLast31DaysByDefault(): void { $connection = $this->getConnectionPool()->getConnectionForTable('tx_tracking_pageview'); @@ -73,9 +64,7 @@ public function listsResultsForLast31DaysByDefault(): void self::assertCount(32, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function respectedNumberOfDays(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/Pages.php'); @@ -102,9 +91,7 @@ public function respectedNumberOfDays(): void ], $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function respectedExcludedPages(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/Pages.php'); @@ -132,9 +119,7 @@ public function respectedExcludedPages(): void ], $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function respectedDateFormat(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/Pages.php'); @@ -156,9 +141,7 @@ public function respectedDateFormat(): void self::assertCount(2, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function respectsLimitToLanguages(): void { $connection = $this->getConnectionPool()->getConnectionForTable('tx_tracking_pageview'); diff --git a/Tests/Functional/Dashboard/Provider/PageviewsPerOperatingSystemTest.php b/Tests/Functional/Dashboard/Provider/PageviewsPerOperatingSystemTest.php index 334ba9f..91fd8fd 100644 --- a/Tests/Functional/Dashboard/Provider/PageviewsPerOperatingSystemTest.php +++ b/Tests/Functional/Dashboard/Provider/PageviewsPerOperatingSystemTest.php @@ -21,26 +21,17 @@ * 02110-1301, USA. */ -use Codappix\Typo3PhpDatasets\TestingFramework; use DanielSiepmann\Tracking\Dashboard\Provider\PageviewsPerOperatingSystem; +use DanielSiepmann\Tracking\Tests\Functional\AbstractFunctionalTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase; -/** - * @covers \DanielSiepmann\Tracking\Dashboard\Provider\PageviewsPerOperatingSystem - */ -class PageviewsPerOperatingSystemTest extends FunctionalTestCase +#[CoversClass(PageviewsPerOperatingSystem::class)] +final class PageviewsPerOperatingSystemTest extends AbstractFunctionalTestCase { - use TestingFramework; - - protected array $testExtensionsToLoad = [ - 'typo3conf/ext/tracking', - ]; - - /** - * @test - */ + #[Test] public function listsSixResultsForLast31DaysByDefault(): void { $connection = $this->getConnectionPool()->getConnectionForTable('tx_tracking_pageview'); @@ -68,9 +59,7 @@ public function listsSixResultsForLast31DaysByDefault(): void self::assertCount(6, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function respectedOrdering(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/Pages.php'); @@ -109,9 +98,7 @@ public function respectedOrdering(): void self::assertCount(3, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function respectedNumberOfDays(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/Pages.php'); @@ -145,9 +132,7 @@ public function respectedNumberOfDays(): void self::assertCount(2, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function respectedMaxResults(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/Pages.php'); @@ -176,9 +161,7 @@ public function respectedMaxResults(): void self::assertCount(4, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function respectsLimitToLanguages(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/Pages.php'); diff --git a/Tests/Functional/Dashboard/Provider/PageviewsPerPageTest.php b/Tests/Functional/Dashboard/Provider/PageviewsPerPageTest.php index b1f44fb..b328ce7 100644 --- a/Tests/Functional/Dashboard/Provider/PageviewsPerPageTest.php +++ b/Tests/Functional/Dashboard/Provider/PageviewsPerPageTest.php @@ -21,25 +21,19 @@ * 02110-1301, USA. */ -use Codappix\Typo3PhpDatasets\TestingFramework; +use DanielSiepmann\Tracking\Dashboard\Provider\LanguageAspectFactory; use DanielSiepmann\Tracking\Dashboard\Provider\PageviewsPerPage; +use DanielSiepmann\Tracking\Tests\Functional\AbstractFunctionalTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Domain\Repository\PageRepository; use TYPO3\CMS\Core\Localization\LanguageServiceFactory; use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase; -/** - * @covers \DanielSiepmann\Tracking\Dashboard\Provider\PageviewsPerPage - */ -class PageviewsPerPageTest extends FunctionalTestCase +#[CoversClass(PageviewsPerPage::class)] +final class PageviewsPerPageTest extends AbstractFunctionalTestCase { - use TestingFramework; - - protected array $testExtensionsToLoad = [ - 'typo3conf/ext/tracking', - ]; - protected function setUp(): void { parent::setUp(); @@ -52,9 +46,7 @@ protected function tearDown(): void parent::tearDown(); } - /** - * @test - */ + #[Test] public function listsSixResultsForLast31DaysByDefault(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/Pages.php'); @@ -67,8 +59,9 @@ public function listsSixResultsForLast31DaysByDefault(): void } $subject = new PageviewsPerPage( - GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'), - GeneralUtility::makeInstance(PageRepository::class) + $this->get(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'), + $this->get(PageRepository::class), + $this->get(LanguageAspectFactory::class) ); $result = $subject->getChartData(); @@ -83,9 +76,7 @@ public function listsSixResultsForLast31DaysByDefault(): void self::assertCount(6, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function respectedOrdering(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/Pages.php'); @@ -108,8 +99,9 @@ public function respectedOrdering(): void ]); $subject = new PageviewsPerPage( - GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'), - GeneralUtility::makeInstance(PageRepository::class) + $this->get(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'), + $this->get(PageRepository::class), + $this->get(LanguageAspectFactory::class) ); $result = $subject->getChartData(); @@ -121,9 +113,7 @@ public function respectedOrdering(): void self::assertCount(3, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function respectedNumberOfDays(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/Pages.php'); @@ -142,8 +132,9 @@ public function respectedNumberOfDays(): void ]); $subject = new PageviewsPerPage( - GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'), - GeneralUtility::makeInstance(PageRepository::class), + $this->get(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'), + $this->get(PageRepository::class), + $this->get(LanguageAspectFactory::class), 2 ); @@ -155,9 +146,7 @@ public function respectedNumberOfDays(): void self::assertCount(2, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function respectedMaxResults(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/Pages.php'); @@ -170,8 +159,9 @@ public function respectedMaxResults(): void } $subject = new PageviewsPerPage( - GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'), - GeneralUtility::makeInstance(PageRepository::class), + $this->get(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'), + $this->get(PageRepository::class), + $this->get(LanguageAspectFactory::class), 31, 4 ); @@ -186,9 +176,7 @@ public function respectedMaxResults(): void self::assertCount(4, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function respectedExcludedPages(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/Pages.php'); @@ -201,8 +189,9 @@ public function respectedExcludedPages(): void } $subject = new PageviewsPerPage( - GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'), - GeneralUtility::makeInstance(PageRepository::class), + $this->get(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'), + $this->get(PageRepository::class), + $this->get(LanguageAspectFactory::class), 31, 6, [1, 2, 3, 4, 5, 6] @@ -218,9 +207,7 @@ public function respectedExcludedPages(): void self::assertCount(4, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function localizedRecordTitlesIfLimitedToSingleLanguage(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/Pages.php'); @@ -249,8 +236,9 @@ public function localizedRecordTitlesIfLimitedToSingleLanguage(): void ]); $subject = new PageviewsPerPage( - GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'), - GeneralUtility::makeInstance(PageRepository::class), + $this->get(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'), + $this->get(PageRepository::class), + $this->get(LanguageAspectFactory::class), 31, 6, [], @@ -265,9 +253,7 @@ public function localizedRecordTitlesIfLimitedToSingleLanguage(): void self::assertCount(2, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function defaultLanguageTitleIsUsedIfMultipleLanguagesAreAllowed(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/Pages.php'); @@ -296,8 +282,9 @@ public function defaultLanguageTitleIsUsedIfMultipleLanguagesAreAllowed(): void ]); $subject = new PageviewsPerPage( - GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'), - GeneralUtility::makeInstance(PageRepository::class), + $this->get(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'), + $this->get(PageRepository::class), + $this->get(LanguageAspectFactory::class), 31, 6, [], diff --git a/Tests/Functional/Dashboard/Provider/RecordviewsTest.php b/Tests/Functional/Dashboard/Provider/RecordviewsTest.php index 1d6b454..9105f6c 100644 --- a/Tests/Functional/Dashboard/Provider/RecordviewsTest.php +++ b/Tests/Functional/Dashboard/Provider/RecordviewsTest.php @@ -21,24 +21,17 @@ * 02110-1301, USA. */ -use Codappix\Typo3PhpDatasets\TestingFramework; use DanielSiepmann\Tracking\Dashboard\Provider\Recordviews; +use DanielSiepmann\Tracking\Tests\Functional\AbstractFunctionalTestCase; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; use TYPO3\CMS\Core\Domain\Repository\PageRepository; use TYPO3\CMS\Core\Localization\LanguageServiceFactory; use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase; -/** - * @covers \DanielSiepmann\Tracking\Dashboard\Provider\Recordviews - */ -class RecordviewsTest extends FunctionalTestCase +#[CoversClass(Recordviews::class)] +final class RecordviewsTest extends AbstractFunctionalTestCase { - use TestingFramework; - - protected array $testExtensionsToLoad = [ - 'typo3conf/ext/tracking', - ]; - protected function setUp(): void { parent::setUp(); @@ -51,9 +44,7 @@ protected function tearDown(): void parent::tearDown(); } - /** - * @test - */ + #[Test] public function listsSixResultsForLast31DaysByDefault(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/SysCategories.php'); @@ -84,9 +75,7 @@ public function listsSixResultsForLast31DaysByDefault(): void self::assertCount(6, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function respectedOrdering(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/SysCategories.php'); @@ -131,9 +120,7 @@ public function respectedOrdering(): void self::assertCount(3, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function respectedNumberOfDays(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/SysCategories.php'); @@ -171,9 +158,7 @@ public function respectedNumberOfDays(): void self::assertCount(2, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function respectedMaxResults(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/SysCategories.php'); @@ -202,9 +187,7 @@ public function respectedMaxResults(): void self::assertCount(2, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function respectedExcludedPages(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/SysCategories.php'); @@ -238,9 +221,7 @@ public function respectedExcludedPages(): void self::assertCount(5, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function respectLimitesTables(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/SysCategories.php'); @@ -279,9 +260,7 @@ public function respectLimitesTables(): void self::assertCount(3, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function respectsLimitedTypes(): void { $connection = $this->getConnectionPool()->getConnectionForTable('tx_tracking_recordview'); @@ -318,9 +297,7 @@ public function respectsLimitedTypes(): void self::assertCount(2, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function localizedRecordTitlesIfLimitedToSingleLanguage(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/SysCategories.php'); @@ -366,9 +343,7 @@ public function localizedRecordTitlesIfLimitedToSingleLanguage(): void self::assertCount(2, $result['datasets'][0]['data']); } - /** - * @test - */ + #[Test] public function defaultLanguageTitleIsUsedIfMultipleLanguagesAreAllowed(): void { $this->importPHPDataSet(__DIR__ . '/../../Fixtures/SysCategories.php'); diff --git a/Tests/Functional/Domain/Recordview/FactoryTest.php b/Tests/Functional/Domain/Recordview/FactoryTest.php index 9853086..daf6837 100644 --- a/Tests/Functional/Domain/Recordview/FactoryTest.php +++ b/Tests/Functional/Domain/Recordview/FactoryTest.php @@ -24,253 +24,246 @@ use DanielSiepmann\Tracking\Domain\Model\RecordRule; use DanielSiepmann\Tracking\Domain\Model\Recordview; use DanielSiepmann\Tracking\Domain\Recordview\Factory; +use DanielSiepmann\Tracking\Tests\Functional\AbstractFunctionalTestCase; use DateTimeImmutable; -use Prophecy\PhpUnit\ProphecyTrait; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; use Psr\Http\Message\ServerRequestInterface; use TYPO3\CMS\Core\Routing\PageArguments; use TYPO3\CMS\Core\Site\Entity\SiteLanguage; -use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase; -/** - * @covers \DanielSiepmann\Tracking\Domain\Recordview\Factory - */ -class FactoryTest extends FunctionalTestCase +#[CoversClass(Factory::class)] +final class FactoryTest extends AbstractFunctionalTestCase { - use ProphecyTrait; - - protected array $testExtensionsToLoad = [ - 'typo3conf/ext/tracking', - ]; - - /** - * @test - */ + #[Test] public function returnsRecordviewFromRequest(): void { - $rule = $this->prophesize(RecordRule::class); - $rule->getUidExpression()->willReturn('request.getQueryParams()["category"]'); - $rule->getTableName()->willReturn('sys_category'); + $rule = $this->createStub(RecordRule::class); + $rule->method('getUidExpression')->willReturn('request.getQueryParams()["category"]'); + $rule->method('getTableName')->willReturn('sys_category'); - $routing = $this->prophesize(PageArguments::class); - $routing->getPageId()->willReturn(10); + $routing = $this->createStub(PageArguments::class); + $routing->method('getPageId')->willReturn(10); - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); - $request = $this->prophesize(ServerRequestInterface::class); - $request->getAttribute('routing')->willReturn($routing->reveal()); - $request->getAttribute('language')->willReturn($language->reveal()); - $request->getUri()->willReturn(''); - $request->getHeader('User-Agent')->willReturn([]); - $request->getQueryParams()->willReturn([ + $request = $this->createStub(ServerRequestInterface::class); + $request->method('getAttribute')->willReturnMap([ + ['routing', null, $routing], + ['language', null, $language], + ]); + $request->method('getUri')->willReturn(''); + $request->method('getHeader')->willReturn([]); + $request->method('getQueryParams')->willReturn([ 'category' => 10, ]); $subject = $this->get(Factory::class); - $result = $subject->fromRequest($request->reveal(), $rule->reveal()); + $result = $subject->fromRequest($request, $rule); self::assertInstanceOf(Recordview::class, $result); } - /** - * @test - */ + #[Test] public function returnedRecordviewContainsUserAgent(): void { - $rule = $this->prophesize(RecordRule::class); - $rule->getUidExpression()->willReturn('request.getQueryParams()["category"]'); - $rule->getTableName()->willReturn('sys_category'); + $rule = $this->createStub(RecordRule::class); + $rule->method('getUidExpression')->willReturn('request.getQueryParams()["category"]'); + $rule->method('getTableName')->willReturn('sys_category'); - $routing = $this->prophesize(PageArguments::class); - $routing->getPageId()->willReturn(10); + $routing = $this->createStub(PageArguments::class); + $routing->method('getPageId')->willReturn(10); - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); - $request = $this->prophesize(ServerRequestInterface::class); - $request->getAttribute('routing')->willReturn($routing->reveal()); - $request->getAttribute('language')->willReturn($language->reveal()); - $request->getUri()->willReturn(''); - $request->getHeader('User-Agent')->willReturn(['Some User Agent']); - $request->getQueryParams()->willReturn([ + $request = $this->createStub(ServerRequestInterface::class); + $request->method('getAttribute')->willReturnMap([ + ['routing', null, $routing], + ['language', null, $language], + ]); + $request->method('getUri')->willReturn(''); + $request->method('getHeader')->willReturn(['Some User Agent']); + $request->method('getQueryParams')->willReturn([ 'category' => 10, ]); $subject = $this->get(Factory::class); - $result = $subject->fromRequest($request->reveal(), $rule->reveal()); + $result = $subject->fromRequest($request, $rule); self::assertSame('Some User Agent', $result->getUserAgent()); } - /** - * @test - */ + #[Test] public function returnedRecordviewContainsUri(): void { - $rule = $this->prophesize(RecordRule::class); - $rule->getUidExpression()->willReturn('request.getQueryParams()["category"]'); - $rule->getTableName()->willReturn('sys_category'); + $rule = $this->createStub(RecordRule::class); + $rule->method('getUidExpression')->willReturn('request.getQueryParams()["category"]'); + $rule->method('getTableName')->willReturn('sys_category'); - $routing = $this->prophesize(PageArguments::class); - $routing->getPageId()->willReturn(10); + $routing = $this->createStub(PageArguments::class); + $routing->method('getPageId')->willReturn(10); - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); - $request = $this->prophesize(ServerRequestInterface::class); - $request->getAttribute('routing')->willReturn($routing->reveal()); - $request->getAttribute('language')->willReturn($language->reveal()); - $request->getUri()->willReturn('https://example.com'); - $request->getHeader('User-Agent')->willReturn(['']); - $request->getQueryParams()->willReturn([ + $request = $this->createStub(ServerRequestInterface::class); + $request->method('getAttribute')->willReturnMap([ + ['routing', null, $routing], + ['language', null, $language], + ]); + $request->method('getUri')->willReturn('https://example.com'); + $request->method('getHeader')->willReturn(['']); + $request->method('getQueryParams')->willReturn([ 'category' => 10, ]); $subject = $this->get(Factory::class); - $result = $subject->fromRequest($request->reveal(), $rule->reveal()); + $result = $subject->fromRequest($request, $rule); self::assertSame('https://example.com', $result->getUrl()); } - /** - * @test - */ + #[Test] public function returnedRecordviewContainsDateTime(): void { - $rule = $this->prophesize(RecordRule::class); - $rule->getUidExpression()->willReturn('request.getQueryParams()["category"]'); - $rule->getTableName()->willReturn('sys_category'); + $rule = $this->createStub(RecordRule::class); + $rule->method('getUidExpression')->willReturn('request.getQueryParams()["category"]'); + $rule->method('getTableName')->willReturn('sys_category'); - $routing = $this->prophesize(PageArguments::class); - $routing->getPageId()->willReturn(10); + $routing = $this->createStub(PageArguments::class); + $routing->method('getPageId')->willReturn(10); - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); - $request = $this->prophesize(ServerRequestInterface::class); - $request->getAttribute('routing')->willReturn($routing->reveal()); - $request->getAttribute('language')->willReturn($language->reveal()); - $request->getUri()->willReturn('https://example.com'); - $request->getHeader('User-Agent')->willReturn(['']); - $request->getQueryParams()->willReturn([ + $request = $this->createStub(ServerRequestInterface::class); + $request->method('getAttribute')->willReturnMap([ + ['routing', null, $routing], + ['language', null, $language], + ]); + $request->method('getUri')->willReturn('https://example.com'); + $request->method('getHeader')->willReturn(['']); + $request->method('getQueryParams')->willReturn([ 'category' => 10, ]); $subject = $this->get(Factory::class); - $result = $subject->fromRequest($request->reveal(), $rule->reveal()); + $result = $subject->fromRequest($request, $rule); self::assertInstanceOf(DateTimeImmutable::class, $result->getCrdate()); } - /** - * @test - */ + #[Test] public function returnedRecordviewContainsLanguage(): void { - $rule = $this->prophesize(RecordRule::class); - $rule->getUidExpression()->willReturn('request.getQueryParams()["category"]'); - $rule->getTableName()->willReturn('sys_category'); + $rule = $this->createStub(RecordRule::class); + $rule->method('getUidExpression')->willReturn('request.getQueryParams()["category"]'); + $rule->method('getTableName')->willReturn('sys_category'); - $routing = $this->prophesize(PageArguments::class); - $routing->getPageId()->willReturn(10); + $routing = $this->createStub(PageArguments::class); + $routing->method('getPageId')->willReturn(10); - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); - $request = $this->prophesize(ServerRequestInterface::class); - $request->getAttribute('routing')->willReturn($routing->reveal()); - $request->getAttribute('language')->willReturn($language->reveal()); - $request->getUri()->willReturn('https://example.com'); - $request->getHeader('User-Agent')->willReturn(['']); - $request->getQueryParams()->willReturn([ + $request = $this->createStub(ServerRequestInterface::class); + $request->method('getAttribute')->willReturnMap([ + ['routing', null, $routing], + ['language', null, $language], + ]); + $request->method('getUri')->willReturn('https://example.com'); + $request->method('getHeader')->willReturn(['']); + $request->method('getQueryParams')->willReturn([ 'category' => 10, ]); $subject = $this->get(Factory::class); - $result = $subject->fromRequest($request->reveal(), $rule->reveal()); - self::assertSame($language->reveal(), $result->getLanguage()); + $result = $subject->fromRequest($request, $rule); + self::assertSame($language, $result->getLanguage()); } - /** - * @test - */ + #[Test] public function returnedRecordviewContainsPageId(): void { - $rule = $this->prophesize(RecordRule::class); - $rule->getUidExpression()->willReturn('request.getQueryParams()["category"]'); - $rule->getTableName()->willReturn('sys_category'); + $rule = $this->createStub(RecordRule::class); + $rule->method('getUidExpression')->willReturn('request.getQueryParams()["category"]'); + $rule->method('getTableName')->willReturn('sys_category'); - $routing = $this->prophesize(PageArguments::class); - $routing->getPageId()->willReturn(10); + $routing = $this->createStub(PageArguments::class); + $routing->method('getPageId')->willReturn(10); - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); - $request = $this->prophesize(ServerRequestInterface::class); - $request->getAttribute('routing')->willReturn($routing->reveal()); - $request->getAttribute('language')->willReturn($language->reveal()); - $request->getUri()->willReturn('https://example.com'); - $request->getHeader('User-Agent')->willReturn(['']); - $request->getQueryParams()->willReturn([ + $request = $this->createStub(ServerRequestInterface::class); + $request->method('getAttribute')->willReturnMap([ + ['routing', null, $routing], + ['language', null, $language], + ]); + $request->method('getUri')->willReturn('https://example.com'); + $request->method('getHeader')->willReturn(['']); + $request->method('getQueryParams')->willReturn([ 'category' => 10, ]); $subject = $this->get(Factory::class); - $result = $subject->fromRequest($request->reveal(), $rule->reveal()); + $result = $subject->fromRequest($request, $rule); self::assertSame(10, $result->getPageUid()); } - /** - * @test - */ + #[Test] public function returnedRecordviewContainsRecordUid(): void { - $rule = $this->prophesize(RecordRule::class); - $rule->getUidExpression()->willReturn('request.getQueryParams()["category"]'); - $rule->getTableName()->willReturn('sys_category'); + $rule = $this->createStub(RecordRule::class); + $rule->method('getUidExpression')->willReturn('request.getQueryParams()["category"]'); + $rule->method('getTableName')->willReturn('sys_category'); - $routing = $this->prophesize(PageArguments::class); - $routing->getPageId()->willReturn(10); + $routing = $this->createStub(PageArguments::class); + $routing->method('getPageId')->willReturn(10); - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); - $request = $this->prophesize(ServerRequestInterface::class); - $request->getAttribute('routing')->willReturn($routing->reveal()); - $request->getAttribute('language')->willReturn($language->reveal()); - $request->getUri()->willReturn('https://example.com'); - $request->getHeader('User-Agent')->willReturn(['']); - $request->getQueryParams()->willReturn([ + $request = $this->createStub(ServerRequestInterface::class); + $request->method('getAttribute')->willReturnMap([ + ['routing', null, $routing], + ['language', null, $language], + ]); + $request->method('getUri')->willReturn('https://example.com'); + $request->method('getHeader')->willReturn(['']); + $request->method('getQueryParams')->willReturn([ 'category' => 20, ]); $subject = $this->get(Factory::class); - $result = $subject->fromRequest($request->reveal(), $rule->reveal()); + $result = $subject->fromRequest($request, $rule); self::assertSame(20, $result->getRecordUid()); } - /** - * @test - */ + #[Test] public function returnedRecordviewContainsTableName(): void { - $rule = $this->prophesize(RecordRule::class); - $rule->getUidExpression()->willReturn('request.getQueryParams()["category"]'); - $rule->getTableName()->willReturn('sys_category'); + $rule = $this->createStub(RecordRule::class); + $rule->method('getUidExpression')->willReturn('request.getQueryParams()["category"]'); + $rule->method('getTableName')->willReturn('sys_category'); - $routing = $this->prophesize(PageArguments::class); - $routing->getPageId()->willReturn(10); + $routing = $this->createStub(PageArguments::class); + $routing->method('getPageId')->willReturn(10); - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); - $request = $this->prophesize(ServerRequestInterface::class); - $request->getAttribute('routing')->willReturn($routing->reveal()); - $request->getAttribute('language')->willReturn($language->reveal()); - $request->getUri()->willReturn('https://example.com'); - $request->getHeader('User-Agent')->willReturn(['']); - $request->getQueryParams()->willReturn([ + $request = $this->createStub(ServerRequestInterface::class); + $request->method('getAttribute')->willReturnMap([ + ['routing', null, $routing], + ['language', null, $language], + ]); + $request->method('getUri')->willReturn('https://example.com'); + $request->method('getHeader')->willReturn(['']); + $request->method('getQueryParams')->willReturn([ 'category' => 20, ]); $subject = $this->get(Factory::class); - $result = $subject->fromRequest($request->reveal(), $rule->reveal()); + $result = $subject->fromRequest($request, $rule); self::assertSame('sys_category', $result->getTableName()); } } diff --git a/Tests/Functional/PageviewTest.php b/Tests/Functional/PageviewTest.php index 8149fcb..61b8613 100644 --- a/Tests/Functional/PageviewTest.php +++ b/Tests/Functional/PageviewTest.php @@ -21,24 +21,17 @@ * 02110-1301, USA. */ -use Codappix\Typo3PhpDatasets\TestingFramework; +use PHPUnit\Framework\Attributes\CoversNothing; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\Attributes\TestDox; use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\InternalRequest; use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\InternalRequestContext; -use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase; -/** - * @testdox Pageviews are - * - * @coversNothing - */ -class PageviewTest extends FunctionalTestCase +#[TestDox('Pageviews are')] +#[CoversNothing] +final class PageviewTest extends AbstractFunctionalTestCase { - use TestingFramework; - - protected array $testExtensionsToLoad = [ - 'typo3conf/ext/tracking', - ]; - protected array $pathsToLinkInTestInstance = [ 'typo3conf/ext/tracking/Tests/Functional/Fixtures/sites' => 'typo3conf/sites', ]; @@ -53,15 +46,13 @@ protected function setUp(): void ]); } - /** - * @test - */ + #[Test] public function trackedWhenAllowed(): void { $request = new InternalRequest(); $request = $request->withPageId(1); $request = $request->withHeader('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0'); - $response = $this->executeFrontendRequest($request); + $response = $this->executeFrontendSubRequest($request); self::assertSame(200, $response->getStatusCode()); @@ -75,9 +66,7 @@ public function trackedWhenAllowed(): void self::assertSame('0', (string)$records[0]['type']); } - /** - * @test - */ + #[Test] public function notTrackedWhenDisallowed(): void { $this->importPHPDataSet(__DIR__ . '/Fixtures/BackendUser.php'); @@ -87,7 +76,7 @@ public function notTrackedWhenDisallowed(): void $request = $request->withPageId(1); $context = new InternalRequestContext(); $context = $context->withBackendUserId(1); - $response = $this->executeFrontendRequest($request, $context); + $response = $this->executeFrontendSubRequest($request, $context); self::assertSame(200, $response->getStatusCode()); @@ -95,17 +84,14 @@ public function notTrackedWhenDisallowed(): void self::assertCount(0, $records); } - /** - * @test - * - * @dataProvider possibleDeniedUserAgents - */ + #[DataProvider('possibleDeniedUserAgents')] + #[Test] public function preventsTrackingOfUserAgents(string $userAgent): void { $request = new InternalRequest(); $request = $request->withPageId(1); $request = $request->withHeader('User-Agent', $userAgent); - $response = $this->executeFrontendRequest($request); + $response = $this->executeFrontendSubRequest($request); self::assertSame(200, $response->getStatusCode()); self::assertCount(0, $this->getAllRecords('tx_tracking_pageview')); diff --git a/Tests/Functional/RecordviewTest.php b/Tests/Functional/RecordviewTest.php index 619694a..59dc9c8 100644 --- a/Tests/Functional/RecordviewTest.php +++ b/Tests/Functional/RecordviewTest.php @@ -21,24 +21,15 @@ * 02110-1301, USA. */ -use Codappix\Typo3PhpDatasets\TestingFramework; +use PHPUnit\Framework\Attributes\CoversNothing; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\Attributes\TestDox; use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\InternalRequest; -use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase; -/** - * @testdox Recordviews are - * - * @coversNothing - */ -class RecordviewTest extends FunctionalTestCase +#[TestDox('Recordviews are')] +#[CoversNothing] +final class RecordviewTest extends AbstractFunctionalTestCase { - use TestingFramework; - - protected array $testExtensionsToLoad = [ - 'typo3conf/ext/tracking', - 'typo3conf/ext/tracking/Tests/Functional/Fixtures/Extensions/recordview', - ]; - protected array $pathsToLinkInTestInstance = [ 'typo3conf/ext/tracking/Tests/Functional/Fixtures/sites' => 'typo3conf/sites', ]; @@ -53,6 +44,7 @@ class RecordviewTest extends FunctionalTestCase protected function setUp(): void { + $this->testExtensionsToLoad[] = 'typo3conf/ext/tracking/Tests/Functional/Fixtures/Extensions/recordview'; parent::setUp(); $this->importPHPDataSet(__DIR__ . '/Fixtures/Pages.php'); @@ -61,16 +53,14 @@ protected function setUp(): void ]); } - /** - * @test - */ + #[Test] public function trackedWhenAllowed(): void { $request = new InternalRequest(); $request = $request->withPageId(1); $request = $request->withQueryParameter('topic_id', 1); $request = $request->withHeader('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0'); - $response = $this->executeFrontendRequest($request); + $response = $this->executeFrontendSubRequest($request); self::assertSame(200, $response->getStatusCode()); @@ -86,14 +76,12 @@ public function trackedWhenAllowed(): void self::assertSame('sys_category', $records[0]['record_table_name']); } - /** - * @test - */ + #[Test] public function notTrackedWhenNotDetected(): void { $request = new InternalRequest(); $request = $request->withPageId(1); - $response = $this->executeFrontendRequest($request); + $response = $this->executeFrontendSubRequest($request); self::assertSame(200, $response->getStatusCode()); diff --git a/Tests/Functional/Typo3FeaturesTest.php b/Tests/Functional/Typo3FeaturesTest.php index 3a0fdb4..4ce357e 100644 --- a/Tests/Functional/Typo3FeaturesTest.php +++ b/Tests/Functional/Typo3FeaturesTest.php @@ -20,26 +20,18 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ - -use Codappix\Typo3PhpDatasets\TestingFramework; +use DanielSiepmann\Tracking\Functional\CopyingPageWithRecordsWorks; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\Attributes\TestDox; use TYPO3\CMS\Core\DataHandling\DataHandler; use TYPO3\CMS\Core\Localization\LanguageServiceFactory; -use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase; use UnexpectedValueException; -/** - * @covers \DanielSiepmann\Tracking\Functional\CopyingPageWithRecordsWorks - * - * @testdox This extension works with TYPO3 feature: - */ -class Typo3FeaturesTest extends FunctionalTestCase +#[CoversClass(CopyingPageWithRecordsWorks::class)] +#[TestDox('This extension works with TYPO3 feature:')] +final class Typo3FeaturesTest extends AbstractFunctionalTestCase { - use TestingFramework; - - protected array $testExtensionsToLoad = [ - 'typo3conf/ext/tracking', - ]; - protected function setUp(): void { parent::setUp(); @@ -61,11 +53,8 @@ protected function tearDown(): void parent::tearDown(); } - /** - * @test - * - * @testdox Copy pages. Tracking records will not be copied. - */ + #[TestDox('Copy pages. Tracking records will not be copied.')] + #[Test] public function copyContainingRecords(): void { $dataHandler = new DataHandler(); @@ -84,11 +73,8 @@ public function copyContainingRecords(): void ); } - /** - * @test - * - * @testdox Copy individual tables, but always exclude tracking tables. - */ + #[TestDox('Copy individual tables, but always exclude tracking tables.')] + #[Test] public function copyCustomTablesViaDataHandler(): void { $dataHandler = new DataHandler(); diff --git a/Tests/Unit/Domain/Model/ExtractorTest.php b/Tests/Unit/Domain/Model/ExtractorTest.php index 99d2439..19ab333 100644 --- a/Tests/Unit/Domain/Model/ExtractorTest.php +++ b/Tests/Unit/Domain/Model/ExtractorTest.php @@ -20,38 +20,32 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ - use DanielSiepmann\Tracking\Domain\Model\Extractor; use DanielSiepmann\Tracking\Domain\Model\HasUserAgent; -use Prophecy\PhpUnit\ProphecyTrait; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\Attributes\TestDox; use TYPO3\TestingFramework\Core\Unit\UnitTestCase; -/** - * @covers \DanielSiepmann\Tracking\Domain\Model\Extractor - */ +#[CoversClass(Extractor::class)] class ExtractorTest extends UnitTestCase { - use ProphecyTrait; - - /** - * @test - * - * @dataProvider possibleUserStringWithOperatingSystems - * - * @testdox Operating system $expectedOperatingSystem is extracted from UserAgent string: $userAgent - */ + #[DataProvider('possibleUserStringWithOperatingSystems')] + #[TestDox('Operating system $expectedOperatingSystem is extracted from UserAgent string: $userAgent')] + #[Test] public function returnsOperatingSystem(string $userAgent, string $expectedOperatingSystem): void { - $model = $this->prophesize(HasUserAgent::class); - $model->getUserAgent()->willReturn($userAgent); + $model = $this->createStub(HasUserAgent::class); + $model->method('getUserAgent')->willReturn($userAgent); self::assertSame( $expectedOperatingSystem, - Extractor::getOperatingSystem($model->reveal()) + Extractor::getOperatingSystem($model) ); } - public function possibleUserStringWithOperatingSystems(): array + public static function possibleUserStringWithOperatingSystems(): array { return [ [ diff --git a/Tests/Unit/Domain/Model/PageviewTest.php b/Tests/Unit/Domain/Model/PageviewTest.php index 5392fd2..fb0f804 100644 --- a/Tests/Unit/Domain/Model/PageviewTest.php +++ b/Tests/Unit/Domain/Model/PageviewTest.php @@ -20,30 +20,24 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ - use DanielSiepmann\Tracking\Domain\Model\Pageview; use DateTimeImmutable; -use Prophecy\PhpUnit\ProphecyTrait; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; use TYPO3\CMS\Core\Site\Entity\SiteLanguage; use TYPO3\TestingFramework\Core\Unit\UnitTestCase; -/** - * @covers \DanielSiepmann\Tracking\Domain\Model\Pageview - */ +#[CoversClass(Pageview::class)] class PageviewTest extends UnitTestCase { - use ProphecyTrait; - - /** - * @test - */ + #[Test] public function canBeCreated(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $subject = new Pageview( 0, - $language->reveal(), + $language, new DateTimeImmutable(), 0, '', @@ -53,16 +47,14 @@ public function canBeCreated(): void self::assertInstanceOf(Pageview::class, $subject); } - /** - * @test - */ + #[Test] public function returnsPageUid(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $subject = new Pageview( 500, - $language->reveal(), + $language, new DateTimeImmutable(), 0, '', @@ -72,36 +64,32 @@ public function returnsPageUid(): void self::assertSame(500, $subject->getPageUid()); } - /** - * @test - */ + #[Test] public function returnsLanguage(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $subject = new Pageview( 0, - $language->reveal(), + $language, new DateTimeImmutable(), 0, '', '' ); - self::assertSame($language->reveal(), $subject->getLanguage()); + self::assertSame($language, $subject->getLanguage()); } - /** - * @test - */ + #[Test] public function returnsCrdate(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $crdate = new DateTimeImmutable(); $subject = new Pageview( 0, - $language->reveal(), + $language, $crdate, 0, '', @@ -111,16 +99,14 @@ public function returnsCrdate(): void self::assertSame($crdate, $subject->getCrdate()); } - /** - * @test - */ + #[Test] public function returnsPageType(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $subject = new Pageview( 0, - $language->reveal(), + $language, new DateTimeImmutable(), 999, '', @@ -130,16 +116,14 @@ public function returnsPageType(): void self::assertSame(999, $subject->getPageType()); } - /** - * @test - */ + #[Test] public function returnsUrl(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $subject = new Pageview( 0, - $language->reveal(), + $language, new DateTimeImmutable(), 0, 'https://example.com/path.html', @@ -149,16 +133,14 @@ public function returnsUrl(): void self::assertSame('https://example.com/path.html', $subject->getUrl()); } - /** - * @test - */ + #[Test] public function returnsUserAgent(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $subject = new Pageview( 0, - $language->reveal(), + $language, new DateTimeImmutable(), 0, '', @@ -171,16 +153,14 @@ public function returnsUserAgent(): void ); } - /** - * @test - */ + #[Test] public function returnsZeroAsDefaultUid(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $subject = new Pageview( 0, - $language->reveal(), + $language, new DateTimeImmutable(), 0, '', @@ -193,16 +173,14 @@ public function returnsZeroAsDefaultUid(): void ); } - /** - * @test - */ + #[Test] public function returnsSetAsUid(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $subject = new Pageview( 0, - $language->reveal(), + $language, new DateTimeImmutable(), 0, '', @@ -216,16 +194,14 @@ public function returnsSetAsUid(): void ); } - /** - * @test - */ + #[Test] public function returnsOperatingSystem(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $subject = new Pageview( 0, - $language->reveal(), + $language, new DateTimeImmutable(), 0, '', diff --git a/Tests/Unit/Domain/Model/RecordRuleTest.php b/Tests/Unit/Domain/Model/RecordRuleTest.php index 8a9b107..4b7edd7 100644 --- a/Tests/Unit/Domain/Model/RecordRuleTest.php +++ b/Tests/Unit/Domain/Model/RecordRuleTest.php @@ -20,18 +20,15 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ - use DanielSiepmann\Tracking\Domain\Model\RecordRule; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; use TYPO3\TestingFramework\Core\Unit\UnitTestCase; -/** - * @covers \DanielSiepmann\Tracking\Domain\Model\RecordRule - */ +#[CoversClass(RecordRule::class)] class RecordRuleTest extends UnitTestCase { - /** - * @test - */ + #[Test] public function canBeCreatedViaConstructor(): void { $subject = new RecordRule( @@ -43,9 +40,7 @@ public function canBeCreatedViaConstructor(): void self::assertInstanceOf(RecordRule::class, $subject); } - /** - * @test - */ + #[Test] public function canBeCreatedFromArray(): void { $subject = RecordRule::fromArray([ @@ -58,9 +53,7 @@ public function canBeCreatedFromArray(): void self::assertInstanceOf(RecordRule::class, $subject); } - /** - * @test - */ + #[Test] public function multipleCanBeCratedFromArray(): void { $result = RecordRule::multipleFromArray([ @@ -81,9 +74,7 @@ public function multipleCanBeCratedFromArray(): void self::assertInstanceOf(RecordRule::class, $result[1]); } - /** - * @test - */ + #[Test] public function returnsMatchExpression(): void { $subject = new RecordRule( @@ -95,9 +86,7 @@ public function returnsMatchExpression(): void self::assertSame('match expression', $subject->getMatchesExpression()); } - /** - * @test - */ + #[Test] public function returnsUidExpression(): void { $subject = new RecordRule( @@ -109,9 +98,7 @@ public function returnsUidExpression(): void self::assertSame('match expression', $subject->getUidExpression()); } - /** - * @test - */ + #[Test] public function returnsTableName(): void { $subject = new RecordRule( diff --git a/Tests/Unit/Domain/Model/RecordviewTest.php b/Tests/Unit/Domain/Model/RecordviewTest.php index bef5707..e5d0e08 100644 --- a/Tests/Unit/Domain/Model/RecordviewTest.php +++ b/Tests/Unit/Domain/Model/RecordviewTest.php @@ -20,30 +20,24 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ - use DanielSiepmann\Tracking\Domain\Model\Recordview; use DateTimeImmutable; -use Prophecy\PhpUnit\ProphecyTrait; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; use TYPO3\CMS\Core\Site\Entity\SiteLanguage; use TYPO3\TestingFramework\Core\Unit\UnitTestCase; -/** - * @covers \DanielSiepmann\Tracking\Domain\Model\Recordview - */ +#[CoversClass(Recordview::class)] class RecordviewTest extends UnitTestCase { - use ProphecyTrait; - - /** - * @test - */ + #[Test] public function canBeCreated(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $subject = new Recordview( 0, - $language->reveal(), + $language, new DateTimeImmutable(), '', '', @@ -54,16 +48,14 @@ public function canBeCreated(): void self::assertInstanceOf(Recordview::class, $subject); } - /** - * @test - */ + #[Test] public function returnsPageUid(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $subject = new Recordview( 500, - $language->reveal(), + $language, new DateTimeImmutable(), '', '', @@ -74,16 +66,14 @@ public function returnsPageUid(): void self::assertSame(500, $subject->getPageUid()); } - /** - * @test - */ + #[Test] public function returnsLanguage(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $subject = new Recordview( 0, - $language->reveal(), + $language, new DateTimeImmutable(), '', '', @@ -91,20 +81,18 @@ public function returnsLanguage(): void 'sys_category' ); - self::assertSame($language->reveal(), $subject->getLanguage()); + self::assertSame($language, $subject->getLanguage()); } - /** - * @test - */ + #[Test] public function returnsCrdate(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $crdate = new DateTimeImmutable(); $subject = new Recordview( 0, - $language->reveal(), + $language, $crdate, '', '', @@ -115,16 +103,14 @@ public function returnsCrdate(): void self::assertSame($crdate, $subject->getCrdate()); } - /** - * @test - */ + #[Test] public function returnsUrl(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $subject = new Recordview( 0, - $language->reveal(), + $language, new DateTimeImmutable(), 'https://example.com/path.html', '', @@ -135,16 +121,14 @@ public function returnsUrl(): void self::assertSame('https://example.com/path.html', $subject->getUrl()); } - /** - * @test - */ + #[Test] public function returnsUserAgent(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $subject = new Recordview( 0, - $language->reveal(), + $language, new DateTimeImmutable(), '', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0', @@ -158,16 +142,14 @@ public function returnsUserAgent(): void ); } - /** - * @test - */ + #[Test] public function returnsRecordUid(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $subject = new Recordview( 0, - $language->reveal(), + $language, new DateTimeImmutable(), '', '', @@ -181,16 +163,14 @@ public function returnsRecordUid(): void ); } - /** - * @test - */ + #[Test] public function returnsTableName(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $subject = new Recordview( 0, - $language->reveal(), + $language, new DateTimeImmutable(), '', '', @@ -204,16 +184,14 @@ public function returnsTableName(): void ); } - /** - * @test - */ + #[Test] public function returnsOperatingSystem(): void { - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); $subject = new Recordview( 0, - $language->reveal(), + $language, new DateTimeImmutable(), '', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36', diff --git a/Tests/Unit/Domain/Pageview/FactoryTest.php b/Tests/Unit/Domain/Pageview/FactoryTest.php index 7edfdb6..00f893d 100644 --- a/Tests/Unit/Domain/Pageview/FactoryTest.php +++ b/Tests/Unit/Domain/Pageview/FactoryTest.php @@ -20,11 +20,11 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ - use DanielSiepmann\Tracking\Domain\Model\Pageview; use DanielSiepmann\Tracking\Domain\Pageview\Factory; use DateTimeImmutable; -use Prophecy\PhpUnit\ProphecyTrait; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; use Psr\Http\Message\ServerRequestInterface; use TYPO3\CMS\Core\Routing\PageArguments; use TYPO3\CMS\Core\Site\Entity\Site; @@ -32,200 +32,194 @@ use TYPO3\CMS\Core\Site\SiteFinder; use TYPO3\TestingFramework\Core\Unit\UnitTestCase; -/** - * @covers \DanielSiepmann\Tracking\Domain\Pageview\Factory - */ +#[CoversClass(Factory::class)] class FactoryTest extends UnitTestCase { - use ProphecyTrait; - - /** - * @test - */ + #[Test] public function returnsPageviewFromRequest(): void { - $routing = $this->prophesize(PageArguments::class); - $routing->getPageId()->willReturn(10); - $routing->getPageType()->willReturn(0); + $routing = $this->createStub(PageArguments::class); + $routing->method('getPageId')->willReturn(10); + $routing->method('getPageType')->willReturn('0'); - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); - $request = $this->prophesize(ServerRequestInterface::class); - $request->getAttribute('routing')->willReturn($routing->reveal()); - $request->getAttribute('language')->willReturn($language->reveal()); - $request->getUri()->willReturn(''); - $request->getHeader('User-Agent')->willReturn([]); + $request = $this->createStub(ServerRequestInterface::class); + $request->method('getAttribute')->willReturnMap([ + ['routing', null, $routing], + ['language', null, $language], + ]); + $request->method('getUri')->willReturn(''); + $request->method('getHeader')->willReturn([]); - $subject = new Factory($this->prophesize(SiteFinder::class)->reveal()); + $subject = new Factory($this->createStub(SiteFinder::class)); - $result = $subject->fromRequest($request->reveal()); + $result = $subject->fromRequest($request); self::assertInstanceOf(Pageview::class, $result); } - /** - * @test - */ + #[Test] public function returnedPageviewContainsUserAgent(): void { - $routing = $this->prophesize(PageArguments::class); - $routing->getPageId()->willReturn(10); - $routing->getPageType()->willReturn(0); + $routing = $this->createStub(PageArguments::class); + $routing->method('getPageId')->willReturn(10); + $routing->method('getPageType')->willReturn('0'); - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); - $request = $this->prophesize(ServerRequestInterface::class); - $request->getAttribute('routing')->willReturn($routing->reveal()); - $request->getAttribute('language')->willReturn($language->reveal()); - $request->getUri()->willReturn(''); - $request->getHeader('User-Agent')->willReturn([ + $request = $this->createStub(ServerRequestInterface::class); + $request->method('getAttribute')->willReturnMap([ + ['routing', null, $routing], + ['language', null, $language], + ]); + $request->method('getUri')->willReturn(''); + $request->method('getHeader')->willReturn([ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0', ]); - $subject = new Factory($this->prophesize(SiteFinder::class)->reveal()); + $subject = new Factory($this->createStub(SiteFinder::class)); - $result = $subject->fromRequest($request->reveal()); + $result = $subject->fromRequest($request); self::assertSame( 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0', $result->getUserAgent() ); } - /** - * @test - */ + #[Test] public function returnedPageviewContainsUri(): void { - $routing = $this->prophesize(PageArguments::class); - $routing->getPageId()->willReturn(10); - $routing->getPageType()->willReturn(0); + $routing = $this->createStub(PageArguments::class); + $routing->method('getPageId')->willReturn(10); + $routing->method('getPageType')->willReturn('0'); - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); - $request = $this->prophesize(ServerRequestInterface::class); - $request->getAttribute('routing')->willReturn($routing->reveal()); - $request->getAttribute('language')->willReturn($language->reveal()); - $request->getUri()->willReturn('https://example.com/path?query=params&some=more#anchor'); - $request->getHeader('User-Agent')->willReturn([]); + $request = $this->createStub(ServerRequestInterface::class); + $request->method('getAttribute')->willReturnMap([ + ['routing', null, $routing], + ['language', null, $language], + ]); + $request->method('getUri')->willReturn('https://example.com/path?query=params&some=more#anchor'); + $request->method('getHeader')->willReturn([]); - $subject = new Factory($this->prophesize(SiteFinder::class)->reveal()); + $subject = new Factory($this->createStub(SiteFinder::class)); - $result = $subject->fromRequest($request->reveal()); + $result = $subject->fromRequest($request); self::assertSame( 'https://example.com/path?query=params&some=more#anchor', $result->getUrl() ); } - /** - * @test - */ + #[Test] public function returnedPageviewContainsPageType(): void { - $routing = $this->prophesize(PageArguments::class); - $routing->getPageId()->willReturn(10); - $routing->getPageType()->willReturn(50); + $routing = $this->createStub(PageArguments::class); + $routing->method('getPageId')->willReturn(10); + $routing->method('getPageType')->willReturn('50'); - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); - $request = $this->prophesize(ServerRequestInterface::class); - $request->getAttribute('routing')->willReturn($routing->reveal()); - $request->getAttribute('language')->willReturn($language->reveal()); - $request->getUri()->willReturn(''); - $request->getHeader('User-Agent')->willReturn([]); + $request = $this->createStub(ServerRequestInterface::class); + $request->method('getAttribute')->willReturnMap([ + ['routing', null, $routing], + ['language', null, $language], + ]); + $request->method('getUri')->willReturn(''); + $request->method('getHeader')->willReturn([]); - $subject = new Factory($this->prophesize(SiteFinder::class)->reveal()); + $subject = new Factory($this->createStub(SiteFinder::class)); - $result = $subject->fromRequest($request->reveal()); + $result = $subject->fromRequest($request); self::assertSame( 50, $result->getPageType() ); } - /** - * @test - */ + #[Test] public function returnedPageviewContainsDateTime(): void { - $routing = $this->prophesize(PageArguments::class); - $routing->getPageId()->willReturn(10); - $routing->getPageType()->willReturn(0); + $routing = $this->createStub(PageArguments::class); + $routing->method('getPageId')->willReturn(10); + $routing->method('getPageType')->willReturn('0'); - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); - $request = $this->prophesize(ServerRequestInterface::class); - $request->getAttribute('routing')->willReturn($routing->reveal()); - $request->getAttribute('language')->willReturn($language->reveal()); - $request->getUri()->willReturn(''); - $request->getHeader('User-Agent')->willReturn([]); + $request = $this->createStub(ServerRequestInterface::class); + $request->method('getAttribute')->willReturnMap([ + ['routing', null, $routing], + ['language', null, $language], + ]); + $request->method('getUri')->willReturn(''); + $request->method('getHeader')->willReturn([]); - $subject = new Factory($this->prophesize(SiteFinder::class)->reveal()); + $subject = new Factory($this->createStub(SiteFinder::class)); - $result = $subject->fromRequest($request->reveal()); + $result = $subject->fromRequest($request); self::assertInstanceOf(DateTimeImmutable::class, $result->getCrdate()); } - /** - * @test - */ + #[Test] public function returnedPageviewContainsLanguage(): void { - $routing = $this->prophesize(PageArguments::class); - $routing->getPageId()->willReturn(10); - $routing->getPageType()->willReturn(0); + $routing = $this->createStub(PageArguments::class); + $routing->method('getPageId')->willReturn(10); + $routing->method('getPageType')->willReturn('0'); - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); - $request = $this->prophesize(ServerRequestInterface::class); - $request->getAttribute('routing')->willReturn($routing->reveal()); - $request->getAttribute('language')->willReturn($language->reveal()); - $request->getUri()->willReturn(''); - $request->getHeader('User-Agent')->willReturn([]); + $request = $this->createStub(ServerRequestInterface::class); + $request->method('getAttribute')->willReturnMap([ + ['routing', null, $routing], + ['language', null, $language], + ]); + $request->method('getUri')->willReturn(''); + $request->method('getHeader')->willReturn([]); - $subject = new Factory($this->prophesize(SiteFinder::class)->reveal()); + $subject = new Factory($this->createStub(SiteFinder::class)); - $result = $subject->fromRequest($request->reveal()); + $result = $subject->fromRequest($request); self::assertInstanceOf(SiteLanguage::class, $result->getLanguage()); } - /** - * @test - */ + #[Test] public function returnedPageviewContainsPageId(): void { - $routing = $this->prophesize(PageArguments::class); - $routing->getPageId()->willReturn(10); - $routing->getPageType()->willReturn(0); + $routing = $this->createStub(PageArguments::class); + $routing->method('getPageId')->willReturn(10); + $routing->method('getPageType')->willReturn('0'); - $language = $this->prophesize(SiteLanguage::class); + $language = $this->createStub(SiteLanguage::class); - $request = $this->prophesize(ServerRequestInterface::class); - $request->getAttribute('routing')->willReturn($routing->reveal()); - $request->getAttribute('language')->willReturn($language->reveal()); - $request->getUri()->willReturn(''); - $request->getHeader('User-Agent')->willReturn([]); + $request = $this->createStub(ServerRequestInterface::class); + $request->method('getAttribute')->willReturnMap([ + ['routing', null, $routing], + ['language', null, $language], + ]); + $request->method('getUri')->willReturn(''); + $request->method('getHeader')->willReturn([]); - $subject = new Factory($this->prophesize(SiteFinder::class)->reveal()); + $subject = new Factory($this->createStub(SiteFinder::class)); - $result = $subject->fromRequest($request->reveal()); + $result = $subject->fromRequest($request); self::assertSame( 10, $result->getPageUid() ); } - /** - * @test - */ + #[Test] public function returnsPageviewFromDbRow(): void { - $siteLanguage = $this->prophesize(SiteLanguage::class); - $site = $this->prophesize(Site::class); - $site->getLanguageById(0)->willReturn($siteLanguage->reveal()); - $siteFinder = $this->prophesize(SiteFinder::class); - $siteFinder->getSiteByPageId(2)->willReturn($site->reveal()); + $siteLanguage = $this->createStub(SiteLanguage::class); + $site = $this->createStub(Site::class); + $site->method('getLanguageById')->willReturn($siteLanguage); + $siteFinder = $this->createStub(SiteFinder::class); + $siteFinder->method('getSiteByPageId')->willReturn($site); - $subject = new Factory($siteFinder->reveal()); + $subject = new Factory($siteFinder); $result = $subject->fromDbRow([ 'uid' => 1, @@ -240,7 +234,7 @@ public function returnsPageviewFromDbRow(): void self::assertInstanceOf(Pageview::class, $result); self::assertSame(1, $result->getUid()); self::assertSame(2, $result->getPageUid()); - self::assertSame($siteLanguage->reveal(), $result->getLanguage()); + self::assertSame($siteLanguage, $result->getLanguage()); self::assertSame('1533906435', $result->getCrdate()->format('U')); self::assertSame(0, $result->getPageType()); self::assertSame('https://example.com/path', $result->getUrl()); diff --git a/Tests/Unit/Domain/Repository/PageviewTest.php b/Tests/Unit/Domain/Repository/PageviewTest.php index 2be1d42..44affb8 100644 --- a/Tests/Unit/Domain/Repository/PageviewTest.php +++ b/Tests/Unit/Domain/Repository/PageviewTest.php @@ -20,122 +20,122 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ - use DanielSiepmann\Tracking\Domain\Model\Pageview as Model; use DanielSiepmann\Tracking\Domain\Pageview\Factory; use DanielSiepmann\Tracking\Domain\Repository\Pageview; use DateTimeImmutable; -use Prophecy\PhpUnit\ProphecyTrait; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Site\Entity\SiteLanguage; use TYPO3\TestingFramework\Core\Unit\UnitTestCase; -/** - * @covers \DanielSiepmann\Tracking\Domain\Repository\Pageview - */ +#[CoversClass(Pageview::class)] class PageviewTest extends UnitTestCase { - use ProphecyTrait; - - /** - * @test - */ + #[Test] public function modelCanBeAdded(): void { - $connection = $this->prophesize(Connection::class); - $factory = $this->prophesize(Factory::class); - - $dateTime = $this->prophesize(DateTimeImmutable::class); - $dateTime->format('U')->willReturn(1582660189); - - $language = $this->prophesize(SiteLanguage::class); - $language->getLanguageId()->willReturn(2); - - $model = $this->prophesize(Model::class); - $model->getPageUid()->willReturn(10); - $model->getCrdate()->willReturn($dateTime->reveal()); - $model->getPageType()->willReturn(999); - $model->getLanguage()->willReturn($language->reveal()); - $model->getUrl()->willReturn('https://example.com/path.html'); - $model->getUserAgent()->willReturn('Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/74.0'); - $model->getOperatingSystem()->willReturn('Linux'); - - $connection->insert( - 'tx_tracking_pageview', - [ - 'pid' => 10, - 'crdate' => 1582660189, - 'tstamp' => 1582660189, - 'type' => 999, - 'sys_language_uid' => 2, - 'url' => 'https://example.com/path.html', - 'user_agent' => 'Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/74.0', - 'operating_system' => 'Linux', - ] - )->willReturn(1)->shouldBeCalledTimes(1); - - $subject = new Pageview($connection->reveal(), $factory->reveal()); - $subject->add($model->reveal()); + $connection = $this->createMock(Connection::class); + $factory = $this->createMock(Factory::class); + + $dateTime = $this->createStub(DateTimeImmutable::class); + $dateTime->method('format')->willReturn('1582660189'); + + $language = $this->createStub(SiteLanguage::class); + $language->method('getLanguageId')->willReturn(2); + + $model = $this->createStub(Model::class); + $model->method('getPageUid')->willReturn(10); + $model->method('getCrdate')->willReturn($dateTime); + $model->method('getPageType')->willReturn(999); + $model->method('getLanguage')->willReturn($language); + $model->method('getUrl')->willReturn('https://example.com/path.html'); + $model->method('getUserAgent')->willReturn('Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/74.0'); + $model->method('getOperatingSystem')->willReturn('Linux'); + + $connection + ->expects(self::once()) + ->method('insert') + ->with( + 'tx_tracking_pageview', + [ + 'pid' => 10, + 'crdate' => 1582660189, + 'tstamp' => 1582660189, + 'type' => 999, + 'sys_language_uid' => 2, + 'url' => 'https://example.com/path.html', + 'user_agent' => 'Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/74.0', + 'operating_system' => 'Linux', + ] + ) + ->willReturn(1) + ; + + $subject = new Pageview($connection, $factory); + $subject->add($model); } - /** - * @test - */ + #[Test] public function throwsExceptionIfModelToUodateHasNoUid(): void { - $connection = $this->prophesize(Connection::class); - $factory = $this->prophesize(Factory::class); + $connection = $this->createMock(Connection::class); + $factory = $this->createMock(Factory::class); - $model = $this->prophesize(Model::class); - $model->getUid()->willReturn(0); + $model = $this->createStub(Model::class); + $model->method('getUid')->willReturn(0); - $subject = new Pageview($connection->reveal(), $factory->reveal()); + $subject = new Pageview($connection, $factory); $this->expectExceptionMessage('Can not update pageview if uid is 0.'); - $subject->update($model->reveal()); + $subject->update($model); } - /** - * @test - */ + #[Test] public function modelCanBeUpdated(): void { - $connection = $this->prophesize(Connection::class); - $factory = $this->prophesize(Factory::class); - - $dateTime = $this->prophesize(DateTimeImmutable::class); - $dateTime->format('U')->willReturn(1582660189); - - $language = $this->prophesize(SiteLanguage::class); - $language->getLanguageId()->willReturn(2); - - $model = $this->prophesize(Model::class); - $model->getUid()->willReturn(1); - $model->getPageUid()->willReturn(10); - $model->getCrdate()->willReturn($dateTime->reveal()); - $model->getPageType()->willReturn(999); - $model->getLanguage()->willReturn($language->reveal()); - $model->getUrl()->willReturn('https://example.com/path.html'); - $model->getUserAgent()->willReturn('Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/74.0'); - $model->getOperatingSystem()->willReturn('Linux'); - - $connection->update( - 'tx_tracking_pageview', - [ - 'pid' => 10, - 'crdate' => 1582660189, - 'tstamp' => 1582660189, - 'type' => 999, - 'sys_language_uid' => 2, - 'url' => 'https://example.com/path.html', - 'user_agent' => 'Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/74.0', - 'operating_system' => 'Linux', - ], - [ - 'uid' => 1, - ] - )->willReturn(1)->shouldBeCalledTimes(1); - - $subject = new Pageview($connection->reveal(), $factory->reveal()); - $subject->update($model->reveal()); + $connection = $this->createMock(Connection::class); + $factory = $this->createMock(Factory::class); + + $dateTime = $this->createStub(DateTimeImmutable::class); + $dateTime->method('format')->willReturn('1582660189'); + + $language = $this->createStub(SiteLanguage::class); + $language->method('getLanguageId')->willReturn(2); + + $model = $this->createStub(Model::class); + $model->method('getUid')->willReturn(1); + $model->method('getPageUid')->willReturn(10); + $model->method('getCrdate')->willReturn($dateTime); + $model->method('getPageType')->willReturn(999); + $model->method('getLanguage')->willReturn($language); + $model->method('getUrl')->willReturn('https://example.com/path.html'); + $model->method('getUserAgent')->willReturn('Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/74.0'); + $model->method('getOperatingSystem')->willReturn('Linux'); + + $connection + ->expects(self::once()) + ->method('update') + ->with( + 'tx_tracking_pageview', + [ + 'pid' => 10, + 'crdate' => 1582660189, + 'tstamp' => 1582660189, + 'type' => 999, + 'sys_language_uid' => 2, + 'url' => 'https://example.com/path.html', + 'user_agent' => 'Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/74.0', + 'operating_system' => 'Linux', + ], + [ + 'uid' => 1, + ] + ) + ->willReturn(1) + ; + + $subject = new Pageview($connection, $factory); + $subject->update($model); } } diff --git a/Tests/Unit/Domain/Repository/RecordviewTest.php b/Tests/Unit/Domain/Repository/RecordviewTest.php index 5cac445..72e0f42 100644 --- a/Tests/Unit/Domain/Repository/RecordviewTest.php +++ b/Tests/Unit/Domain/Repository/RecordviewTest.php @@ -20,62 +20,61 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ - use DanielSiepmann\Tracking\Domain\Model\Recordview as Model; use DanielSiepmann\Tracking\Domain\Repository\Recordview; use DateTimeImmutable; -use Prophecy\PhpUnit\ProphecyTrait; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\Test; use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Site\Entity\SiteLanguage; use TYPO3\TestingFramework\Core\Unit\UnitTestCase; -/** - * @covers \DanielSiepmann\Tracking\Domain\Repository\Recordview - */ +#[CoversClass(Recordview::class)] class RecordviewTest extends UnitTestCase { - use ProphecyTrait; - - /** - * @test - */ + #[Test] public function modelCanBeAdded(): void { - $connection = $this->prophesize(Connection::class); + $connection = $this->createMock(Connection::class); - $dateTime = $this->prophesize(DateTimeImmutable::class); - $dateTime->format('U')->willReturn(1582660189); + $dateTime = $this->createStub(DateTimeImmutable::class); + $dateTime->method('format')->willReturn('1582660189'); - $language = $this->prophesize(SiteLanguage::class); - $language->getLanguageId()->willReturn(2); + $language = $this->createStub(SiteLanguage::class); + $language->method('getLanguageId')->willReturn(2); - $model = $this->prophesize(Model::class); - $model->getPageUid()->willReturn(10); - $model->getCrdate()->willReturn($dateTime->reveal()); - $model->getLanguage()->willReturn($language->reveal()); - $model->getUrl()->willReturn('https://example.com/path.html'); - $model->getUserAgent()->willReturn('Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/74.0'); - $model->getOperatingSystem()->willReturn('Linux'); - $model->getRecordUid()->willReturn(10); - $model->getTableName()->willReturn('sys_category'); + $model = $this->createStub(Model::class); + $model->method('getPageUid')->willReturn(10); + $model->method('getCrdate')->willReturn($dateTime); + $model->method('getLanguage')->willReturn($language); + $model->method('getUrl')->willReturn('https://example.com/path.html'); + $model->method('getUserAgent')->willReturn('Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/74.0'); + $model->method('getOperatingSystem')->willReturn('Linux'); + $model->method('getRecordUid')->willReturn(10); + $model->method('getTableName')->willReturn('sys_category'); - $connection->insert( - 'tx_tracking_recordview', - [ - 'pid' => 10, - 'crdate' => 1582660189, - 'tstamp' => 1582660189, - 'sys_language_uid' => 2, - 'url' => 'https://example.com/path.html', - 'user_agent' => 'Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/74.0', - 'operating_system' => 'Linux', - 'record_uid' => 10, - 'record_table_name' => 'sys_category', - 'record' => 'sys_category_10', - ] - )->willReturn(1)->shouldBeCalledTimes(1); + $connection + ->expects(self::once()) + ->method('insert') + ->with( + 'tx_tracking_recordview', + [ + 'pid' => 10, + 'crdate' => 1582660189, + 'tstamp' => 1582660189, + 'sys_language_uid' => 2, + 'url' => 'https://example.com/path.html', + 'user_agent' => 'Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/74.0', + 'operating_system' => 'Linux', + 'record_uid' => 10, + 'record_table_name' => 'sys_category', + 'record' => 'sys_category_10', + ] + ) + ->willReturn(1) + ; - $subject = new Recordview($connection->reveal()); - $subject->add($model->reveal()); + $subject = new Recordview($connection); + $subject->add($model); } } diff --git a/composer.json b/composer.json index 1805b19..4a3c645 100644 --- a/composer.json +++ b/composer.json @@ -42,8 +42,6 @@ "codappix/typo3-php-datasets": "^1.3", "cweagans/composer-patches": "^1.7", "friendsofphp/php-cs-fixer": "^3.14", - "jangregor/phpstan-prophecy": "^1.0", - "phpspec/prophecy-phpunit": "^2.0", "phpstan/extension-installer": "^1.1", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^10.1", diff --git a/shell.nix b/shell.nix index 24c561e..18bfdad 100644 --- a/shell.nix +++ b/shell.nix @@ -1,8 +1,20 @@ -{ pkgs ? import { } }: +{ + pkgs ? import { } + ,phps ? import +}: let - php = pkgs.php83; - inherit(pkgs.php83Packages) composer; + php = phps.packages.x86_64-linux.php83.buildEnv { + extensions = { enabled, all }: enabled ++ (with all; [ + xdebug + ]); + extraConfig = '' + xdebug.mode = debug + memory_limit = 4G + ''; + }; + + inherit(php.packages) composer; projectInstall = pkgs.writeShellApplication { name = "project-install";