mirror of https://github.com/FriendsOfTYPO3/tea.git synced 2024-09-19 23:36:13 +02:00

[FEATURE] Add PHP-CS-Fixer (#53)

Also run the fixer on all classes and tests.
This commit is contained in:
Oliver Klee 2019-08-12 17:25:59 +02:00 committed by GitHub
parent 8da1b736b3
commit 3401e32a84
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 262 additions and 109 deletions

2
.gitignore vendored
View file

@ -1,6 +1,6 @@
/.Build/*
/*.idea
/.php_cs.cache
composer.lock
/composer.lock
/nbproject
/var

183
.php_cs.dist Normal file
View file

@ -0,0 +1,183 @@
<?php
if (PHP_SAPI !== 'cli') {
die('This script supports command line usage only. Please check your command.');
}
$rules = [
'@PSR2' => true,
'@PHP56Migration' => true,
'@PHP56Migration:risky' => true,
'@PHP70Migration' => true,
'@PHP71Migration' => true,
'@PHPUnit57Migration:risky' => true,
'@PHPUnit60Migration:risky' => true,
'@PHPUnit75Migration:risky' => true,
'align_multiline_comment' => true,
'array_indentation' => true,
'array_syntax' => ['syntax' => 'short'],
'binary_operator_spaces' => true,
'blank_line_before_statement' => true,
'braces' => [
'allow_single_line_closure' => true,
],
'class_attributes_separation' => ['elements' => ['method']],
'class_definition' => ['single_line' => true],
'combine_consecutive_issets' => true,
'combine_consecutive_unsets' => true,
'comment_to_phpdoc' => true,
'compact_nullable_typehint' => true,
'concat_space' => ['spacing' => 'one'],
'declare_equal_normalize' => true,
'dir_constant' => true,
'ereg_to_preg' => true,
'error_suppression' => true,
'escape_implicit_backslashes' => true,
'explicit_indirect_variable' => true,
'explicit_string_variable' => true,
'final_internal_class' => true,
'fopen_flag_order' => true,
'fopen_flags' => ['b_mode' => false],
'fully_qualified_strict_types' => true,
'function_to_constant' => true,
'function_typehint_space' => true,
'hash_to_slash_comment' => true,
'heredoc_to_nowdoc' => true,
'implode_call' => true,
'include' => true,
'is_null' => true,
'linebreak_after_opening_tag' => true,
'list_syntax' => ['syntax' => 'short'],
'logical_operators' => true,
'lowercase_cast' => true,
'lowercase_static_reference' => true,
'magic_constant_casing' => true,
'magic_method_casing' => true,
'method_argument_space' => ['on_multiline' => 'ensure_fully_multiline'],
'method_chaining_indentation' => true,
'method_separation' => true,
'modernize_types_casting' => true,
'multiline_comment_opening_closing' => true,
'native_function_casing' => true,
'new_with_braces' => true,
'no_alias_functions' => true,
'no_alternative_syntax' => true,
'no_binary_string' => true,
'no_blank_lines_after_class_opening' => true,
'no_blank_lines_after_phpdoc' => true,
'no_empty_comment' => true,
'no_empty_phpdoc' => true,
'no_empty_statement' => true,
'no_extra_blank_lines' => [
'tokens' => [
'break',
'continue',
'curly_brace_block',
'extra',
'parenthesis_brace_block',
'return',
'square_brace_block',
'throw',
'use',
],
],
'no_extra_consecutive_blank_lines' => true,
'no_homoglyph_names' => true,
'no_leading_import_slash' => true,
'no_leading_namespace_whitespace' => true,
'no_mixed_echo_print' => ['use' => 'echo'],
'no_multiline_whitespace_around_double_arrow' => true,
'no_multiline_whitespace_before_semicolons' => true,
'no_php4_constructor' => true,
'no_short_bool_cast' => true,
'no_short_echo_tag' => true,
'no_singleline_whitespace_before_semicolons' => true,
'no_spaces_after_function_name' => true,
'no_spaces_around_offset' => true,
'no_spaces_inside_parenthesis' => true,
'no_superfluous_elseif' => true,
'no_trailing_comma_in_list_call' => true,
'no_trailing_comma_in_singleline_array' => true,
'no_unneeded_control_parentheses' => true,
'no_unneeded_curly_braces' => true,
'no_unneeded_final_method' => true,
'no_unreachable_default_argument_value' => true,
'no_unset_cast' => true,
'no_unset_on_property' => true,
'no_unused_imports' => true,
'no_useless_else' => true,
'no_useless_return' => true,
'no_whitespace_before_comma_in_array' => true,
'no_whitespace_in_blank_line' => true,
'non_printable_character' => [
'use_escape_sequences_in_strings' => false,
],
'normalize_index_brace' => true,
'object_operator_without_whitespace' => true,
'ordered_imports' => true,
'phpdoc_add_missing_param_annotation' => true,
'phpdoc_no_package' => true,
'phpdoc_indent' => true,
'phpdoc_inline_tag' => true,
'phpdoc_no_access' => true,
'phpdoc_no_alias_tag' => true,
'phpdoc_no_useless_inheritdoc' => true,
'phpdoc_return_self_reference' => true,
'phpdoc_scalar' => true,
'phpdoc_single_line_var_spacing' => true,
'phpdoc_summary' => true,
'phpdoc_to_comment' => true,
'phpdoc_trim' => true,
'phpdoc_trim_consecutive_blank_line_separation' => true,
'phpdoc_types' => true,
'phpdoc_types_order' => [
'null_adjustment' => 'always_last',
'sort_algorithm' => 'none',
],
'phpdoc_var_annotation_correct_order' => true,
'phpdoc_var_without_name' => true,
'php_unit_construct' => true,
'php_unit_dedicate_assert' => true,
'php_unit_expectation' => true,
'php_unit_fqcn_annotation' => true,
'php_unit_method_casing' => true,
'php_unit_mock' => true,
'php_unit_no_expectation_annotation' => true,
'php_unit_ordered_covers' => true,
'php_unit_set_up_tear_down_visibility' => true,
'php_unit_test_case_static_method_calls' => ['call_type' => 'self'],
'protected_to_private' => true,
'psr4' => true,
'return_type_declaration' => true,
'self_accessor' => true,
'semicolon_after_instruction' => true,
'set_type_to_cast' => true,
'short_scalar_cast' => true,
'single_blank_line_before_namespace' => true,
'single_class_element_per_statement' => true,
'single_line_comment_style' => true,
'single_quote' => true,
'space_after_semicolon' => [
'remove_in_empty_for_expressions' => true,
],
'standardize_not_equals' => true,
'strict_comparison' => true,
'strict_param' => true,
'string_line_ending' => true,
'standardize_increment' => true,
'ternary_operator_spaces' => true,
'trailing_comma_in_multiline_array' => true,
'trim_array_spaces' => true,
'unary_operator_spaces' => true,
'void_return' => true,
'whitespace_after_comma_in_array' => true,
];
$config = \PhpCsFixer\Config::create()
->setRiskyAllowed(true)
->setRules($rules);
$finder = \PhpCsFixer\Finder::create()
->in('Classes')->in('Tests');
return $config->setFinder($finder);

View file

@ -6,6 +6,7 @@ This project adheres to [Semantic Versioning](https://semver.org/).
## x.y.z
### Added
- Add PHP-CS-Fixer (#53)
- Add support for PHP 7.3 (#51)
- Add support for TYPO3 9.6 (#48)
- Add PHP_CodeSniffer to the Travis CI build (#44,#46)

View file

@ -1,5 +1,6 @@
<?php
declare(strict_types = 1);
declare(strict_types=1);
namespace OliverKlee\Tea\Controller;
use OliverKlee\Tea\Domain\Model\Product\Tea;
@ -18,30 +19,17 @@ class TeaController extends ActionController
*/
private $teaRepository = null;
/**
* @param TeaRepository $teaRepository
*
* @return void
*/
public function injectTeaRepository(TeaRepository $teaRepository)
public function injectTeaRepository(TeaRepository $teaRepository): void
{
$this->teaRepository = $teaRepository;
}
/**
* @return void
*/
public function indexAction()
public function indexAction(): void
{
$this->view->assign('teas', $this->teaRepository->findAll());
}
/**
* @param Tea $tea
*
* @return void
*/
public function showAction(Tea $tea)
public function showAction(Tea $tea): void
{
$this->view->assign('tea', $tea);
}

View file

@ -1,5 +1,6 @@
<?php
declare(strict_types = 1);
declare(strict_types=1);
namespace OliverKlee\Tea\Domain\Model\Product;
use TYPO3\CMS\Extbase\Domain\Model\FileReference;
@ -30,38 +31,22 @@ class Tea extends AbstractEntity
*/
protected $image = null;
/**
* @return string
*/
public function getTitle(): string
{
return $this->title;
}
/**
* @param string $title
*
* @return void
*/
public function setTitle(string $title)
public function setTitle(string $title): void
{
$this->title = $title;
}
/**
* @return string
*/
public function getDescription(): string
{
return $this->description;
}
/**
* @param string $description
*
* @return void
*/
public function setDescription(string $description)
public function setDescription(string $description): void
{
$this->description = $description;
}
@ -78,12 +63,7 @@ class Tea extends AbstractEntity
return $this->image;
}
/**
* @param FileReference $image
*
* @return void
*/
public function setImage(FileReference $image)
public function setImage(FileReference $image): void
{
$this->image = $image;
}

View file

@ -1,5 +1,6 @@
<?php
declare(strict_types = 1);
declare(strict_types=1);
namespace OliverKlee\Tea\Domain\Repository\Product;
use OliverKlee\Tea\Domain\Repository\Traits\StoragePageAgnosticTrait;

View file

@ -1,5 +1,6 @@
<?php
declare(strict_types = 1);
declare(strict_types=1);
namespace OliverKlee\Tea\Domain\Repository\Traits;
use TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface;
@ -11,12 +12,7 @@ use TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface;
*/
trait StoragePageAgnosticTrait
{
/**
* Initializes this object.
*
* @return void
*/
public function initializeObject()
public function initializeObject(): void
{
/** @var QuerySettingsInterface $querySettings */
$querySettings = $this->objectManager->get(QuerySettingsInterface::class);

View file

@ -1,5 +1,5 @@
<?php
declare(strict_types = 1);
declare(strict_types=1);
namespace OliverKlee\Tea\Tests\Acceptance;
@ -10,17 +10,17 @@ namespace OliverKlee\Tea\Tests\Acceptance;
*/
class StarterCest
{
public function _before(\AcceptanceTester $I)
public function _before(\AcceptanceTester $I): void
{
$I->amOnPage('/');
}
public function seeAuthorName(\AcceptanceTester $I)
public function seeAuthorName(\AcceptanceTester $I): void
{
$I->see('Oliver Klee');
}
public function canNavigateToPastWorkshops(\AcceptanceTester $I)
public function canNavigateToPastWorkshops(\AcceptanceTester $I): void
{
$I->click('Workshops');
$I->click('Rückblick');

View file

@ -1,8 +1,8 @@
<?php
declare(strict_types = 1);
declare(strict_types=1);
/**
* Inherited Methods
* Inherited Methods.
* @method void wantToTest($text)
* @method void wantTo($text)
* @method void execute($callable)
@ -12,7 +12,7 @@ declare(strict_types = 1);
* @method void am($role)
* @method void lookForwardTo($achieveValue)
* @method void comment($description)
* @method \Codeception\Lib\Friend haveFriend($name, $actorClass = NULL)
* @method \Codeception\Lib\Friend haveFriend($name, $actorClass = null)
*
* @SuppressWarnings(PHPMD)
*/
@ -20,7 +20,5 @@ class AcceptanceTester extends \Codeception\Actor
{
use _generated\AcceptanceTesterActions;
/*
* Define custom actions here
*/
// Define custom actions here
}

View file

@ -7,5 +7,4 @@ namespace Helper;
class Acceptance extends \Codeception\Module
{
}

View file

@ -1,5 +1,6 @@
<?php
declare(strict_types = 1);
declare(strict_types=1);
namespace OliverKlee\Tea\Tests\Functional\Controller;
use Nimut\TestingFramework\TestCase\FunctionalTestCase;
@ -21,7 +22,7 @@ class TeaControllerTest extends FunctionalTestCase
*/
protected $coreExtensionsToLoad = ['fluid_styled_content'];
protected function setUp()
protected function setUp(): void
{
parent::setUp();
@ -41,11 +42,11 @@ class TeaControllerTest extends FunctionalTestCase
/**
* @test
*/
public function indexActionRendersTeaTitle()
public function indexActionRendersTeaTitle(): void
{
$responseContent = $this->getFrontendResponse(1)->getContent();
$teaTitle = 'Earl Grey';
$this->assertContains($teaTitle, $responseContent);
self::assertContains($teaTitle, $responseContent);
}
}

View file

@ -1,5 +1,6 @@
<?php
declare(strict_types = 1);
declare(strict_types=1);
namespace OliverKlee\Tea\Tests\Functional\Domain\Repository\Product;
use Nimut\TestingFramework\TestCase\FunctionalTestCase;
@ -32,7 +33,7 @@ class TeaRepositoryTest extends FunctionalTestCase
*/
private $persistenceManager = null;
protected function setUp()
protected function setUp(): void
{
parent::setUp();
@ -46,42 +47,42 @@ class TeaRepositoryTest extends FunctionalTestCase
/**
* @test
*/
public function findAllForNoRecordsReturnsEmptyContainer()
public function findAllForNoRecordsReturnsEmptyContainer(): void
{
$container = $this->subject->findAll();
static::assertCount(0, $container);
self::assertCount(0, $container);
}
/**
* @test
*/
public function findAllWithRecordsFindsRecordsFromAllPages()
public function findAllWithRecordsFindsRecordsFromAllPages(): void
{
$this->importDataSet(__DIR__ . '/../Fixtures/Product/Tea.xml');
$container = $this->subject->findAll();
static::assertGreaterThanOrEqual(1, \count($container));
self::assertGreaterThanOrEqual(1, \count($container));
}
/**
* @test
*/
public function findAllSortsByTitleInAscendingOrder()
public function findAllSortsByTitleInAscendingOrder(): void
{
$this->importDataSet(__DIR__ . '/../Fixtures/Product/Tea.xml');
$container = $this->subject->findAll();
$container->rewind();
static::assertSame(2, $container->current()->getUid());
self::assertSame(2, $container->current()->getUid());
}
/**
* @test
*/
public function findByUidForExistingRecordReturnsModelWithData()
public function findByUidForExistingRecordReturnsModelWithData(): void
{
$this->importDataSet(__DIR__ . '/../Fixtures/Product/Tea.xml');
@ -89,15 +90,15 @@ class TeaRepositoryTest extends FunctionalTestCase
/** @var Tea $model */
$model = $this->subject->findByUid($uid);
static::assertNotNull($model);
static::assertSame('Earl Grey', $model->getTitle());
static::assertSame('Fresh and hot.', $model->getDescription());
self::assertNotNull($model);
self::assertSame('Earl Grey', $model->getTitle());
self::assertSame('Fresh and hot.', $model->getDescription());
}
/**
* @test
*/
public function fillsImageRelation()
public function fillsImageRelation(): void
{
$this->importDataSet(__DIR__ . '/../Fixtures/Product/Tea.xml');
@ -106,14 +107,14 @@ class TeaRepositoryTest extends FunctionalTestCase
$model = $this->subject->findByUid($uid);
$image = $model->getImage();
static::assertInstanceOf(FileReference::class, $image);
static::assertSame(1, $image->getUid());
self::assertInstanceOf(FileReference::class, $image);
self::assertSame(1, $image->getUid());
}
/**
* @test
*/
public function addAndPersistAllCreatesNewRecord()
public function addAndPersistAllCreatesNewRecord(): void
{
$title = 'Godesberger Burgtee';
$model = new Tea();
@ -127,6 +128,6 @@ class TeaRepositoryTest extends FunctionalTestCase
'tx_tea_domain_model_product_tea',
'uid = ' . $model->getUid()
);
static::assertSame($title, $databaseRow['title']);
self::assertSame($title, $databaseRow['title']);
}
}

View file

@ -1,5 +1,6 @@
<?php
declare(strict_types = 1);
declare(strict_types=1);
namespace OliverKlee\Tea\Tests\Unit\Controller;
use Nimut\TestingFramework\TestCase\UnitTestCase;
@ -44,7 +45,7 @@ class TeaControllerTest extends UnitTestCase
*/
private $teaRepository = null;
protected function setUp()
protected function setUp(): void
{
$this->subject = new TeaController();
@ -60,15 +61,15 @@ class TeaControllerTest extends UnitTestCase
/**
* @test
*/
public function isActionController()
public function isActionController(): void
{
static::assertInstanceOf(ActionController::class, $this->subject);
self::assertInstanceOf(ActionController::class, $this->subject);
}
/**
* @test
*/
public function indexActionAssignsAllTeaAsTeasToView()
public function indexActionAssignsAllTeaAsTeasToView(): void
{
$teas = $this->prophesize(QueryResultInterface::class)->reveal();
$this->teaRepositoryProphecy->findAll()->willReturn($teas);
@ -80,7 +81,7 @@ class TeaControllerTest extends UnitTestCase
/**
* @test
*/
public function showActionAssignsPassedTeaAsTeaToView()
public function showActionAssignsPassedTeaAsTeaToView(): void
{
$tea = new Tea();
$this->viewProphecy->assign('tea', $tea)->shouldBeCalled();

View file

@ -1,5 +1,6 @@
<?php
declare(strict_types = 1);
declare(strict_types=1);
namespace OliverKlee\Tea\Tests\Unit\Domain\Model\Product;
use Nimut\TestingFramework\TestCase\UnitTestCase;
@ -19,7 +20,7 @@ class TeaTest extends UnitTestCase
*/
private $subject = null;
protected function setUp()
protected function setUp(): void
{
$this->subject = new Tea();
}
@ -27,65 +28,65 @@ class TeaTest extends UnitTestCase
/**
* @test
*/
public function isAbstractEntity()
public function isAbstractEntity(): void
{
static::assertInstanceOf(AbstractEntity::class, $this->subject);
self::assertInstanceOf(AbstractEntity::class, $this->subject);
}
/**
* @test
*/
public function getTitleInitiallyReturnsEmptyString()
public function getTitleInitiallyReturnsEmptyString(): void
{
static::assertSame('', $this->subject->getTitle());
self::assertSame('', $this->subject->getTitle());
}
/**
* @test
*/
public function setTitleSetsTitle()
public function setTitleSetsTitle(): void
{
$value = 'Club-Mate';
$this->subject->setTitle($value);
static::assertSame($value, $this->subject->getTitle());
self::assertSame($value, $this->subject->getTitle());
}
/**
* @test
*/
public function getDescriptionInitiallyReturnsEmptyString()
public function getDescriptionInitiallyReturnsEmptyString(): void
{
static::assertSame('', $this->subject->getDescription());
self::assertSame('', $this->subject->getDescription());
}
/**
* @test
*/
public function setDescriptionSetsDescription()
public function setDescriptionSetsDescription(): void
{
$value = 'Club-Mate';
$this->subject->setDescription($value);
static::assertSame($value, $this->subject->getDescription());
self::assertSame($value, $this->subject->getDescription());
}
/**
* @test
*/
public function getImageInitiallyReturnsNull()
public function getImageInitiallyReturnsNull(): void
{
static::assertNull($this->subject->getImage());
self::assertNull($this->subject->getImage());
}
/**
* @test
*/
public function setImageSetsImage()
public function setImageSetsImage(): void
{
$model = new FileReference();
$this->subject->setImage($model);
static::assertSame($model, $this->subject->getImage());
self::assertSame($model, $this->subject->getImage());
}
}

View file

@ -1,5 +1,6 @@
<?php
declare(strict_types = 1);
declare(strict_types=1);
namespace OliverKlee\Tea\Tests\Unit\Domain\Repository\Product;
use Nimut\TestingFramework\TestCase\UnitTestCase;
@ -25,7 +26,7 @@ class TeaRepositoryTest extends UnitTestCase
*/
protected $objectManager = null;
protected function setUp()
protected function setUp(): void
{
$objectManagerProphecy = $this->prophesize(ObjectManagerInterface::class);
$this->objectManager = $objectManagerProphecy->reveal();
@ -35,8 +36,8 @@ class TeaRepositoryTest extends UnitTestCase
/**
* @test
*/
public function isRepository()
public function isRepository(): void
{
static::assertInstanceOf(Repository::class, $this->subject);
self::assertInstanceOf(Repository::class, $this->subject);
}
}

View file

@ -37,6 +37,7 @@
"helhum/typo3-composer-setup": "^0.5.4",
"squizlabs/php_codesniffer": "^3.4.2",
"helmich/typo3-typoscript-lint": "^1.5.0",
"friendsofphp/php-cs-fixer": "^2.15.1",
"nimut/testing-framework": "^4.1.5",
"codeception/codeception": "^2.5.6"
},
@ -85,6 +86,7 @@
"@php -r 'is_dir($extFolder=__DIR__.\"/.Build/public/typo3conf/ext/\") || mkdir($extFolder, 0777, true);'",
"@php -r 'file_exists($extFolder=__DIR__.\"/.Build/public/typo3conf/ext/tea\") || symlink(__DIR__,$extFolder);'"
],
"fix:php-cs": "php-cs-fixer fix",
"post-autoload-dump": [
"@link-extension"
]