From 03320171ce8a741cdf918aa5001db840e6423d49 Mon Sep 17 00:00:00 2001 From: Daniel Siepmann Date: Wed, 4 Jan 2023 09:48:08 +0100 Subject: [PATCH] Add TYPO3 v11 and PHP 8.x compatibility (#6) --- .github/workflows/ci.yaml | 65 +++++++++---------- Documentation/Changelog/1.1.0.rst | 2 + README.rst | 12 +++- Tests/Unit/Domain/Model/ContextTest.php | 23 +++---- Tests/Unit/Domain/Model/DayTest.php | 19 +++--- Tests/Unit/Domain/Model/MonthTest.php | 18 +++-- .../Unit/Domain/Model/NullDataFactoryTest.php | 7 +- Tests/Unit/Domain/Model/WeekTest.php | 18 +++-- Tests/Unit/Domain/Model/YearTest.php | 14 ++-- composer.json | 19 +++--- 10 files changed, 95 insertions(+), 102 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 099e929..e6e7aff 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -6,6 +6,12 @@ jobs: steps: - uses: actions/checkout@v3 + - name: Install PHP + uses: shivammathur/setup-php@v2 + with: + coverage: none + tools: composer:v2 + - name: Validate composer.json run: composer validate @@ -16,6 +22,9 @@ jobs: php-version: - 7.3 - 7.4 + - 8.0 + - 8.1 + - 8.2 steps: - name: Checkout uses: actions/checkout@v3 @@ -23,31 +32,12 @@ jobs: - name: Install PHP uses: shivammathur/setup-php@v2 with: + coverage: none php-version: "${{ matrix.php-version }}" - name: PHP lint run: "find *.php Classes Tests -name '*.php' -print0 | xargs -0 -n 1 -P 4 php -l" - check-dependencies: - runs-on: ubuntu-latest - needs: [check-composer] - steps: - - uses: actions/checkout@v3 - - - name: Install PHP - uses: shivammathur/setup-php@v2 - with: - php-version: "7.3" - - - name: Keep composer at 1.x - run: sudo composer selfupdate --1 - - - name: Install dependencies - run: composer install --prefer-dist --no-progress --no-suggest --no-plugins - - - name: Missing composer requirements - run: ./vendor/bin/composer-require-checker check - xml-linting: runs-on: ubuntu-latest needs: [check-composer] @@ -57,14 +47,13 @@ jobs: - name: Install PHP uses: shivammathur/setup-php@v2 with: - php-version: "7.3" + php-version: "8.2" + coverage: none + tools: composer:v2 - name: Install xmllint run: sudo apt-get install libxml2-utils - - name: Keep composer at 1.x - run: sudo composer selfupdate --1 - - name: Install dependencies run: composer install --prefer-dist --no-progress --no-suggest @@ -80,7 +69,6 @@ jobs: coding-guideline: runs-on: ubuntu-latest needs: - - check-dependencies - xml-linting steps: - uses: actions/checkout@v3 @@ -88,10 +76,9 @@ jobs: - name: Install PHP uses: shivammathur/setup-php@v2 with: - php-version: "7.3" - - - name: Keep composer at 1.x - run: sudo composer selfupdate --1 + coverage: none + tools: composer:v2 + php-version: "8.2" - name: Install dependencies run: composer install --prefer-dist --no-progress --no-suggest @@ -102,24 +89,30 @@ jobs: tests: runs-on: ubuntu-latest needs: - - check-dependencies - xml-linting strategy: matrix: - php-version: - - 7.3 - - 7.4 + include: + - php-version: '7.3' + typo3-version: '^10.4' + - php-version: '7.4' + typo3-version: '^10.4' + - php-version: '7.4' + typo3-version: '^11.5' + - php-version: '8.1' + typo3-version: '^11.5' + - php-version: '8.2' + typo3-version: '^11.5' steps: - uses: actions/checkout@v3 - name: Install PHP uses: shivammathur/setup-php@v2 with: + coverage: none + tools: composer:v2 php-version: "${{ matrix.php-version }}" - - name: Keep composer at 1.x - run: sudo composer selfupdate --1 - - name: Install dependencies run: composer install --prefer-dist --no-progress --no-suggest diff --git a/Documentation/Changelog/1.1.0.rst b/Documentation/Changelog/1.1.0.rst index 108a41d..b70b480 100644 --- a/Documentation/Changelog/1.1.0.rst +++ b/Documentation/Changelog/1.1.0.rst @@ -9,6 +9,8 @@ Nothing Features -------- +* Add compatibility for TYPO3 v11 and PHP 8.0, 8.1, 8.2. + * Add context to foreign data factory. The factory can optionally implement the ``WerkraumMedia\Calendar\Domain\Model\ContextSpecificFactory`` interface. That way it will receive a bit of context to react on the current situation. diff --git a/README.rst b/README.rst index 4bad2a9..fada1e7 100644 --- a/README.rst +++ b/README.rst @@ -3,13 +3,21 @@ TYPO3 Extension: calendar Provides: -* Data (classes) for Month, Week and Day. +* Data (classes) for Year, Month, Week and Day. -* Controller with action to view Month, Week and Day. +* Controller with action to view Year, Month, Week and Day. Each day can have foreign data created by a factory. That way extensions or TYPO3 instances can add further data to each day. +Alter Variables +--------------- + +The controller also has an event to alter assigned variables for each action. + +Check out ``Tests/Fixtures/calendar_example/`` as an example on how to provide +necessary custom setup. + Configuration ------------- diff --git a/Tests/Unit/Domain/Model/ContextTest.php b/Tests/Unit/Domain/Model/ContextTest.php index 783bee9..380822d 100644 --- a/Tests/Unit/Domain/Model/ContextTest.php +++ b/Tests/Unit/Domain/Model/ContextTest.php @@ -24,7 +24,6 @@ declare(strict_types=1); namespace WerkraumMedia\Calendar\Tests\Unit\Domain\Model; use PHPUnit\Framework\TestCase; -use Prophecy\PhpUnit\ProphecyTrait; use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; use WerkraumMedia\Calendar\Domain\Model\Context; @@ -33,15 +32,17 @@ use WerkraumMedia\Calendar\Domain\Model\Context; */ class ContextTest extends TestCase { - use ProphecyTrait; - /** * @test */ public function canNotBeCreatedViaNew(): void { $this->expectError(); - $this->expectErrorMessage('Call to private WerkraumMedia\Calendar\Domain\Model\Context::__construct() from context \'WerkraumMedia\Calendar\Tests\Unit\Domain\Model\ContextTest\''); + if (version_compare(PHP_VERSION, '8.0', '>=')) { + $this->expectErrorMessage('Call to private WerkraumMedia\Calendar\Domain\Model\Context::__construct() from scope WerkraumMedia\Calendar\Tests\Unit\Domain\Model\ContextTest'); + } else { + $this->expectErrorMessage('Call to private WerkraumMedia\Calendar\Domain\Model\Context::__construct() from context \'WerkraumMedia\Calendar\Tests\Unit\Domain\Model\ContextTest\''); + } $subject = new Context(); } @@ -50,8 +51,8 @@ class ContextTest extends TestCase */ public function canBeCreatedFromContentObjectRenderer(): void { - $contentObjectRenderer = $this->prophesize(ContentObjectRenderer::class); - $subject = Context::createFromContentObjectRenderer($contentObjectRenderer->reveal()); + $contentObjectRenderer = $this->createStub(ContentObjectRenderer::class); + $subject = Context::createFromContentObjectRenderer($contentObjectRenderer); self::assertInstanceOf(Context::class, $subject); } @@ -61,9 +62,9 @@ class ContextTest extends TestCase */ public function providesTableNameInheritedFromContentObjectRenderer(): void { - $contentObjectRenderer = $this->prophesize(ContentObjectRenderer::class); - $contentObjectRenderer->getCurrentTable()->willReturn('tx_calendar_example_table'); - $subject = Context::createFromContentObjectRenderer($contentObjectRenderer->reveal()); + $contentObjectRenderer = $this->createStub(ContentObjectRenderer::class); + $contentObjectRenderer->method('getCurrentTable')->willReturn('tx_calendar_example_table'); + $subject = Context::createFromContentObjectRenderer($contentObjectRenderer); self::assertSame('tx_calendar_example_table', $subject->getTableName()); } @@ -73,12 +74,12 @@ class ContextTest extends TestCase */ public function providesDatabaseRowInheritedFromContentObjectRenderer(): void { - $contentObjectRenderer = $this->prophesize(ContentObjectRenderer::class); + $contentObjectRenderer = $this->createStub(ContentObjectRenderer::class); $contentObjectRenderer->data = [ 'uid' => 10, 'pid' => 1, ]; - $subject = Context::createFromContentObjectRenderer($contentObjectRenderer->reveal()); + $subject = Context::createFromContentObjectRenderer($contentObjectRenderer); self::assertSame([ 'uid' => 10, diff --git a/Tests/Unit/Domain/Model/DayTest.php b/Tests/Unit/Domain/Model/DayTest.php index df211d6..7bfc028 100644 --- a/Tests/Unit/Domain/Model/DayTest.php +++ b/Tests/Unit/Domain/Model/DayTest.php @@ -22,8 +22,6 @@ namespace WerkraumMedia\Calendar\Tests\Unit\Domain\Model; */ use PHPUnit\Framework\TestCase; -use Prophecy\Argument; -use Prophecy\PhpUnit\ProphecyTrait; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Persistence\ObjectStorage; use WerkraumMedia\Calendar\Domain\Model\Day; @@ -38,7 +36,6 @@ use WerkraumMedia\Calendar\Tests\ForcePropertyTrait; */ class DayTest extends TestCase { - use ProphecyTrait; use ForcePropertyTrait; public function tearDown(): void @@ -127,11 +124,11 @@ class DayTest extends TestCase { $subject = new Day(new \DateTime('2020-10-19')); - $foreignData = $this->prophesize(IsDayActive::class); - $foreignData->isActive(Argument::any())->willReturn(false); + $foreignData = $this->createStub(IsDayActive::class); + $foreignData->method('isActive')->willReturn(false); $this->forceProperty($subject, 'initialized', true); - $this->forceProperty($subject, 'foreignData', $foreignData->reveal()); + $this->forceProperty($subject, 'foreignData', $foreignData); self::assertFalse($subject->isActive()); } @@ -143,13 +140,13 @@ class DayTest extends TestCase { $subject = new Day(new \DateTime('2020-10-19')); - $foreignData = $this->prophesize(IsDayActive::class); - $foreignData->isActive(Argument::any())->willReturn(true); + $foreignData = $this->createStub(IsDayActive::class); + $foreignData->method('isActive')->willReturn(true); - $factory = $this->prophesize(ForeignDataFactory::class); - $factory->getData($subject)->willReturn($foreignData->reveal()); + $factory = $this->createStub(ForeignDataFactory::class); + $factory->method('getData')->willReturn($foreignData); - GeneralUtility::addInstance(ForeignDataFactory::class, $factory->reveal()); + GeneralUtility::addInstance(ForeignDataFactory::class, $factory); self::assertTrue($subject->isActive()); } diff --git a/Tests/Unit/Domain/Model/MonthTest.php b/Tests/Unit/Domain/Model/MonthTest.php index 02a45f7..e604516 100644 --- a/Tests/Unit/Domain/Model/MonthTest.php +++ b/Tests/Unit/Domain/Model/MonthTest.php @@ -22,7 +22,6 @@ namespace WerkraumMedia\Calendar\Tests\Unit\Domain\Model; */ use PHPUnit\Framework\TestCase; -use Prophecy\PhpUnit\ProphecyTrait; use WerkraumMedia\Calendar\Domain\Model\Month; use WerkraumMedia\Calendar\Domain\Model\Week; use WerkraumMedia\Calendar\Tests\ForcePropertyTrait; @@ -33,7 +32,6 @@ use WerkraumMedia\Calendar\Tests\ForcePropertyTrait; */ class MonthTest extends TestCase { - use ProphecyTrait; use ForcePropertyTrait; /** @@ -194,9 +192,9 @@ class MonthTest extends TestCase { $subject = new Month(02, 2018); - $week = $this->prophesize(Week::class); - $week->isActive()->willReturn(false); - $weeks = [$week->reveal()]; + $week = $this->createStub(Week::class); + $week->method('isActive')->willReturn(false); + $weeks = [$week]; $this->forceProperty($subject, 'weeks', $weeks); self::assertFalse($subject->isActive()); @@ -209,11 +207,11 @@ class MonthTest extends TestCase { $subject = new Month(02, 2018); - $week = $this->prophesize(Week::class); - $week->isActive()->willReturn(true); - $week2 = $this->prophesize(Week::class); - $week2->isActive()->willReturn(false); - $weeks = [$week->reveal(), $week2->reveal()]; + $week = $this->createStub(Week::class); + $week->method('isActive')->willReturn(true); + $week2 = $this->createStub(Week::class); + $week2->method('isActive')->willReturn(false); + $weeks = [$week, $week2]; $this->forceProperty($subject, 'weeks', $weeks); self::assertTrue($subject->isActive()); diff --git a/Tests/Unit/Domain/Model/NullDataFactoryTest.php b/Tests/Unit/Domain/Model/NullDataFactoryTest.php index e50aac7..90106bc 100644 --- a/Tests/Unit/Domain/Model/NullDataFactoryTest.php +++ b/Tests/Unit/Domain/Model/NullDataFactoryTest.php @@ -22,7 +22,6 @@ namespace WerkraumMedia\Calendar\Tests\Unit\Domain\Model; */ use PHPUnit\Framework\TestCase; -use Prophecy\PhpUnit\ProphecyTrait; use WerkraumMedia\Calendar\Domain\Model\Day; use WerkraumMedia\Calendar\Domain\Model\NullDataFactory; @@ -31,15 +30,13 @@ use WerkraumMedia\Calendar\Domain\Model\NullDataFactory; */ class NullDataFactoryTest extends TestCase { - use ProphecyTrait; - /** * @test */ public function returnsNull(): void { $subject = new NullDataFactory(); - $day = $this->prophesize(Day::class); - self::assertNull($subject->getData($day->reveal())); + $day = $this->createStub(Day::class); + self::assertNull($subject->getData($day)); } } diff --git a/Tests/Unit/Domain/Model/WeekTest.php b/Tests/Unit/Domain/Model/WeekTest.php index be5a8cf..afee954 100644 --- a/Tests/Unit/Domain/Model/WeekTest.php +++ b/Tests/Unit/Domain/Model/WeekTest.php @@ -22,7 +22,6 @@ namespace WerkraumMedia\Calendar\Tests\Unit\Domain\Model; */ use PHPUnit\Framework\TestCase; -use Prophecy\PhpUnit\ProphecyTrait; use WerkraumMedia\Calendar\Domain\Model\Day; use WerkraumMedia\Calendar\Domain\Model\Week; use WerkraumMedia\Calendar\Tests\ForcePropertyTrait; @@ -33,7 +32,6 @@ use WerkraumMedia\Calendar\Tests\ForcePropertyTrait; */ class WeekTest extends TestCase { - use ProphecyTrait; use ForcePropertyTrait; /** @@ -208,9 +206,9 @@ class WeekTest extends TestCase { $subject = new Week(02, 2018); - $day = $this->prophesize(Day::class); - $day->isActive()->willReturn(false); - $days = [$day->reveal()]; + $day = $this->createStub(Day::class); + $day->method('isActive')->willReturn(false); + $days = [$day]; $this->forceProperty($subject, 'days', $days); self::assertFalse($subject->isActive()); @@ -223,11 +221,11 @@ class WeekTest extends TestCase { $subject = new Week(02, 2018); - $day = $this->prophesize(Day::class); - $day->isActive()->willReturn(true); - $day2 = $this->prophesize(Day::class); - $day2->isActive()->willReturn(false); - $days = [$day->reveal(), $day2->reveal()]; + $day = $this->createStub(Day::class); + $day->method('isActive')->willReturn(true); + $day2 = $this->createStub(Day::class); + $day2->method('isActive')->willReturn(false); + $days = [$day, $day2]; $this->forceProperty($subject, 'days', $days); self::assertTrue($subject->isActive()); diff --git a/Tests/Unit/Domain/Model/YearTest.php b/Tests/Unit/Domain/Model/YearTest.php index 97eee36..c55c65a 100644 --- a/Tests/Unit/Domain/Model/YearTest.php +++ b/Tests/Unit/Domain/Model/YearTest.php @@ -22,7 +22,6 @@ namespace WerkraumMedia\Calendar\Tests\Unit\Domain\Model; */ use PHPUnit\Framework\TestCase; -use Prophecy\PhpUnit\ProphecyTrait; use WerkraumMedia\Calendar\Domain\Model\Month; use WerkraumMedia\Calendar\Domain\Model\Year; use WerkraumMedia\Calendar\Tests\ForcePropertyTrait; @@ -33,7 +32,6 @@ use WerkraumMedia\Calendar\Tests\ForcePropertyTrait; */ class YearTest extends TestCase { - use ProphecyTrait; use ForcePropertyTrait; /** @@ -133,9 +131,9 @@ class YearTest extends TestCase { $subject = new Year(2020); - $month = $this->prophesize(Month::class); - $month->isActive()->willReturn(false); - $months = [$month->reveal()]; + $month = $this->createStub(Month::class); + $month->method('isActive')->willReturn(false); + $months = [$month]; $this->forceProperty($subject, 'months', $months); self::assertFalse($subject->isActive()); @@ -148,9 +146,9 @@ class YearTest extends TestCase { $subject = new Year(2020); - $month = $this->prophesize(Month::class); - $month->isActive()->willReturn(true); - $months = [$month->reveal()]; + $month = $this->createStub(Month::class); + $month->method('isActive')->willReturn(true); + $months = [$month]; $this->forceProperty($subject, 'months', $months); self::assertTrue($subject->isActive()); diff --git a/composer.json b/composer.json index 34cda36..7dc5dda 100644 --- a/composer.json +++ b/composer.json @@ -10,13 +10,17 @@ } ], "config": { - "sort-packages": true + "sort-packages": true, + "allow-plugins": { + "typo3/class-alias-loader": true, + "typo3/cms-composer-installers": true + } }, "require": { - "php": "^7.3.0 || ^7.4.0", - "typo3/cms-core": "^10.4", - "typo3/cms-extbase": "^10.4", - "typo3/cms-frontend": "^10.4" + "php": "^7.3.0 || ^7.4.0 || ^8.0.0 || ^8.1.0 || ^8.2.0", + "typo3/cms-core": "^10.4 || ^11.5", + "typo3/cms-extbase": "^10.4 || ^11.5", + "typo3/cms-frontend": "^10.4 || ^11.5" }, "autoload": { "psr-4": { @@ -30,12 +34,9 @@ } }, "require-dev": { - "jangregor/phpstan-prophecy": "^0.6.2", - "maglnet/composer-require-checker": "^2.1", - "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", "symplify/easy-coding-standard": "^9.2", - "typo3/cms-fluid-styled-content": "^10.4", + "typo3/cms-fluid-styled-content": "^10.4 || ^11.5", "typo3/testing-framework": "^6.6" }, "extra": {