first version passing tests in Flow 8.3
All checks were successful
ci/woodpecker/push/code-style Pipeline was successful
ci/woodpecker/push/functional-tests/2 Pipeline was successful
ci/woodpecker/push/functional-tests/1 Pipeline was successful
ci/woodpecker/push/functional-tests/3 Pipeline was successful
ci/woodpecker/push/functional-tests/4 Pipeline was successful

This commit is contained in:
Ferdinand Kuhl 2024-05-30 14:01:25 +02:00
parent c3e777f53b
commit b3430789ec
11 changed files with 218 additions and 0 deletions

View file

@ -0,0 +1,10 @@
steps:
code-style:
image: composer
commands:
- composer global config repositories.repo-name vcs https://git.digital-competence.de/Packages/php-codesniffer
- composer global config --no-plugins allow-plugins.dealerdirect/phpcodesniffer-composer-installer true
- composer global require digicomp/php-codesniffer:@dev
- composer global exec -- phpcs --runtime-set ignore_warnings_on_exit 1 --standard=DigiComp Classes/ Tests/
when:
- event: [push, pull_request, manual]

View file

@ -0,0 +1,34 @@
workspace:
base: /woodpecker
path: package
matrix:
include:
- FLOW_VERSION: 6.3
PHP_VERSION: 7.4
- FLOW_VERSION: 7.3
PHP_VERSION: 7.4
- FLOW_VERSION: 7.3
PHP_VERSION: 8.2
- FLOW_VERSION: 8.2
PHP_VERSION: 8.2
steps:
functional-tests:
image: "thecodingmachine/php:${PHP_VERSION}-v4-cli"
environment:
# Enable the PDO_SQLITE extension
- "PHP_EXTENSION_PDO_SQLITE=1"
- "FLOW_VERSION=${FLOW_VERSION}"
- "NEOS_BUILD_DIR=/woodpecker/Build-${FLOW_VERSION}"
commands:
- "sudo mkdir $NEOS_BUILD_DIR"
- "sudo chown -R docker:docker $NEOS_BUILD_DIR"
- "cd $NEOS_BUILD_DIR"
- "composer create-project --no-install neos/flow-base-distribution:^$FLOW_VERSION ."
- "composer config repositories.repo-name path /woodpecker/package"
- "composer remove --dev --no-update neos/behat || composer remove --no-update neos/behat"
- "composer require digicomp/fluid-currentcontroller-expression:@dev"
- "bin/phpunit --configuration Build/BuildEssentials/PhpUnit/FunctionalTests.xml Packages/Application/DigiComp.FluidCurrentControllerExpression/Tests/Functional"
when:
- event: [ push, pull_request, manual ]

View file

@ -0,0 +1,41 @@
<?php
declare(strict_types=1);
namespace DigiComp\FluidCurrentControllerExpression;
use Neos\FluidAdaptor\Core\Rendering\RenderingContext;
use Neos\Utility\ObjectAccess;
use TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\Expression\AbstractExpressionNode;
use TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\Expression\ExpressionNodeInterface;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
class CurrentControllerExpressionNode extends AbstractExpressionNode implements ExpressionNodeInterface
{
/**
* note: this could be readonly in PHP8
* @var string
*/
public static string $detectionExpression = '/{currentController:([a-z0-9]+)}/i';
public static function evaluateExpression(RenderingContextInterface $renderingContext, $expression, array $matches)
{
if ($renderingContext instanceof RenderingContext) {
$propertyToReturn = $matches[1];
if (
\in_array(
$propertyToReturn,
['actionName', 'name', 'objectName', 'packageKey', 'subpackageKey'],
true
)
) {
$propertyToReturn = 'controller' . \ucfirst($propertyToReturn);
}
return ObjectAccess::getProperty(
$renderingContext->getControllerContext()->getRequest(),
$propertyToReturn
);
}
return '';
}
}

View file

@ -0,0 +1,9 @@
Neos\FluidAdaptor\Core\Rendering\RenderingContext:
properties:
expressionNodeTypes:
value:
- Neos\FluidAdaptor\Core\Parser\SyntaxTree\Expression\LegacyNamespaceExpressionNode
- TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\Expression\CastingExpressionNode
- TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\Expression\MathExpressionNode
- TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\Expression\TernaryExpressionNode
- DigiComp\FluidCurrentControllerExpression\CurrentControllerExpressionNode

View file

@ -0,0 +1,7 @@
-
requestFilter: 'isFormat("html") && isPackage("DigiComp.FluidCurrentControllerExpression")'
options:
layoutRootPaths:
- "resource://DigiComp.FluidCurrentControllerExpression/Private/Layouts"
partialRootPaths:
- "resource://DigiComp.FluidCurrentControllerExpression/Private/Partials"

View file

@ -0,0 +1 @@
<f:render section="Content" />

View file

@ -0,0 +1,6 @@
{currentController:name}
{currentController:actionName}
{currentController:packageKey}
{currentController:subpackageKey}
{currentController:objectName}
{currentController:format}

View file

@ -0,0 +1,7 @@
<f:layout name="Test" />
<f:section name="Content">{currentController:name}
{currentController:actionName}
{currentController:packageKey}
{currentController:subpackageKey}
{currentController:objectName}
{currentController:format}</f:section>

View file

@ -0,0 +1,65 @@
<?php
declare(strict_types=1);
namespace DigiComp\FluidCurrentControllerExpression\Tests\Functional;
use Neos\Flow\Mvc\Routing\Route;
use Neos\Flow\Tests\FunctionalTestCase;
class CurrentControllerExpressionNodeTest extends FunctionalTestCase
{
/**
* @var \Neos\Flow\Http\Client\Browser
*/
protected $browser;
/**
* Initializer
*/
protected function setUp(): void
{
parent::setUp();
$route = new Route();
$route->setUriPattern('test/currentcontrollerexpressions/test(/{@action})');
$route->setDefaults([
'@package' => 'DigiComp.FluidCurrentControllerExpression',
'@subpackage' => 'Tests\Functional\Fixtures',
'@controller' => 'Test',
'@action' => 'index',
]);
$route->setAppendExceedingArguments(true);
$this->router->addRoute($route);
}
/**
* @test
*/
public function itReturnsCurrentControllerInformations(): void
{
$response = $this->browser->request('http://localhost/test/currentcontrollerexpressions/test');
static::assertEquals(
'Test
index
DigiComp.FluidCurrentControllerExpression
Tests\Functional\Fixtures
DigiComp\FluidCurrentControllerExpression\Tests\Functional\Fixtures\Controller\TestController
html
',
(string)$response->getBody()
);
$response = $this->browser->request('http://localhost/test/currentcontrollerexpressions/test/withlayout');
static::assertEquals(
'Test
withLayout
DigiComp.FluidCurrentControllerExpression
Tests\Functional\Fixtures
DigiComp\FluidCurrentControllerExpression\Tests\Functional\Fixtures\Controller\TestController
html
',
(string)$response->getBody()
);
}
}

View file

@ -0,0 +1,18 @@
<?php
declare(strict_types=1);
namespace DigiComp\FluidCurrentControllerExpression\Tests\Functional\Fixtures\Controller;
use Neos\Flow\Mvc\Controller\ActionController;
class TestController extends ActionController
{
public function indexAction()
{
}
public function withLayoutAction()
{
}
}

20
composer.json Normal file
View file

@ -0,0 +1,20 @@
{
"name": "digicomp/fluid-currentcontroller-expression",
"type": "neos-package",
"description": "",
"require": {
"php": "^7.4 | ^8.1",
"neos/flow": "^6.3 | ^7.3 | ^8.2",
"neos/fluid-adaptor": "^6.3 | ^7.3 | ^8.3"
},
"extra":{
"branch-alias": {
"dev-develop": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"DigiComp\\FluidCurrentControllerExpression\\": "Classes/"
}
}
}