Add TYPO3 v11 and PHP 8.x compatibility

Migrate from prophecy to phpunit to get rid of additional dependencies.
Remove depenency checker to get rid of dependencies.
This commit is contained in:
Daniel Siepmann 2023-01-03 14:05:04 +01:00
parent f1d9466045
commit 03119236d0
Signed by: Daniel Siepmann
GPG key ID: 33D6629915560EF4
9 changed files with 85 additions and 100 deletions

View file

@ -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

View file

@ -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.

View file

@ -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,

View file

@ -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());
}

View file

@ -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());

View file

@ -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));
}
}

View file

@ -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());

View file

@ -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());

View file

@ -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": {