diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 52d7b97..3a9f666 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,51 +4,12 @@ on: [push, pull_request] jobs: testsuite: - runs-on: ubuntu-20.04 - strategy: - fail-fast: false - matrix: - prefer-lowest: [''] - php-version: ['8.1', '8.2'] - include: - - php-version: '8.1' - prefer-lowest: 'prefer-lowest' - - steps: - - uses: actions/checkout@v3 - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ matrix.php-version }} - extensions: mbstring, intl, pdo_${{ matrix.db-type }} - coverage: pcov - - - name: Composer install - run: | - if ${{ matrix.prefer-lowest == 'prefer-lowest' }}; then - composer update --prefer-lowest --prefer-stable - elif ${{ matrix.php-version == '8.2' }}; then - composer update --ignore-platform-req=php - else - composer update - fi - - - name: Run PHPUnit - run: | - if [[ ${{ matrix.php-version }} == '8.1' ]]; then - vendor/bin/phpunit --coverage-clover=coverage.xml - else - vendor/bin/phpunit - fi - - - name: Code Coverage Report - if: matrix.php-version == '8.1' - uses: codecov/codecov-action@v3 + uses: cakephp/.github/.github/workflows/testsuite-without-db.yml@5.x + secrets: inherit cs-stan: name: Coding Standard & Static Analysis - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 @@ -59,10 +20,10 @@ jobs: php-version: '8.1' extensions: mbstring, intl coverage: none - tools: vimeo/psalm:4, phpstan:1.9, cs2pr + tools: vimeo/psalm:5, phpstan:1.9, cs2pr - name: Composer Install - run: composer require --dev cakephp/cakephp-codesniffer:5.x-dev + run: composer require --dev cakephp/cakephp-codesniffer:^5.0 - name: Run phpcs run: vendor/bin/phpcs --report=checkstyle --standard=vendor/cakephp/cakephp-codesniffer/CakePHP src/ tests/ | cs2pr diff --git a/composer.json b/composer.json index 6a8ca25..4f9bed6 100644 --- a/composer.json +++ b/composer.json @@ -35,6 +35,7 @@ }, "require-dev": { "friendsofcake/cakephp-test-utilities": "dev-cake-5.x", + "markstory/asset_compress": "5.x-dev", "phpunit/phpunit": "^9.5.19" }, "autoload": { @@ -53,11 +54,12 @@ "wiki": "http://cakephp.nu/cakephp-crud/", "irc": "irc://irc.freenode.org/friendsofcake" }, - "prefer-stable": true, "config": { "sort-packages": true, "allow-plugins": { "dealerdirect/phpcodesniffer-composer-installer": true } - } + }, + "minimum-stability": "dev", + "prefer-stable": true } diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index f58831e..5b56306 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -26,32 +26,7 @@ parameters: path: src/Listener/ViewSearchListener.php - - message: "#^Call to method css\\(\\) on an unknown class AssetCompress\\\\View\\\\Helper\\\\AssetCompressHelper\\.$#" - count: 1 - path: src/View/CrudView.php - - - - message: "#^Call to method script\\(\\) on an unknown class AssetCompress\\\\View\\\\Helper\\\\AssetCompressHelper\\.$#" - count: 2 - path: src/View/CrudView.php - - - - message: "#^Binary operation \"\\+\" between string and array\\{data\\-enable\\-seconds\\?\\: 'true', data\\-date\\-format\\: string, data\\-alt\\-format\\?\\: mixed, data\\-alt\\-input\\?\\: 'true', data\\-no\\-calendar\\?\\: 'true', data\\-enable\\-time\\?\\: 'true', data\\-alt\\-input\\-class\\?\\: string, class\\: array\\{'input\\-group', 'flatpickr'\\}\\} results in an error\\.$#" - count: 1 - path: src/View/Widget/DateTimeWidget.php - - - - message: "#^Binary operation \"\\+\\=\" between array\\\\|string\\|null and array\\{data\\-enable\\-seconds\\?\\: 'true', data\\-date\\-format\\: string, data\\-alt\\-format\\?\\: mixed, data\\-alt\\-input\\?\\: 'true', data\\-no\\-calendar\\?\\: 'true', data\\-enable\\-time\\?\\: 'true'\\} results in an error\\.$#" - count: 1 - path: src/View/Widget/DateTimeWidget.php - - - - message: "#^Offset 'data\\-wrap' does not exist on array\\{data\\-enable\\-seconds\\?\\: 'true', data\\-date\\-format\\: string, data\\-alt\\-format\\?\\: mixed, data\\-alt\\-input\\?\\: 'true', data\\-no\\-calendar\\?\\: 'true', data\\-enable\\-time\\?\\: 'true'\\}\\.$#" - count: 1 - path: src/View/Widget/DateTimeWidget.php - - - - message: "#^Offset 'iconClass' on array\\{data\\-enable\\-seconds\\?\\: 'true', data\\-date\\-format\\: string, data\\-alt\\-format\\?\\: mixed, data\\-alt\\-input\\?\\: 'true', data\\-no\\-calendar\\?\\: 'true', data\\-enable\\-time\\?\\: 'true'\\} in isset\\(\\) does not exist\\.$#" + message: "#^Binary operation \"\\+\" between string and non\\-empty\\-array results in an error\\.$#" count: 1 path: src/View/Widget/DateTimeWidget.php diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 2ee45ab..2e98c4d 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -1,16 +1,22 @@ - - - - $this->AssetCompress - $this->AssetCompress - $this->AssetCompress - + + + + $event->getSubject()->element + + + + + $input['type'] + $data['name'] $data['templateVars'] + + $data['type'] + diff --git a/src/Listener/ViewListener.php b/src/Listener/ViewListener.php index 6bfb475..e2add62 100644 --- a/src/Listener/ViewListener.php +++ b/src/Listener/ViewListener.php @@ -37,6 +37,7 @@ class ViewListener extends BaseListener * * @param \Cake\Event\EventInterface $event Event. * @return void + * @psalm-param \Cake\Event\EventInterface<\Crud\Event\Subject> $event */ public function beforeFind(EventInterface $event): void { @@ -57,6 +58,7 @@ public function beforeFind(EventInterface $event): void * * @param \Cake\Event\EventInterface $event Event. * @return void + * @psalm-param \Cake\Event\EventInterface<\Crud\Event\Subject> $event */ public function beforePaginate(EventInterface $event): void { @@ -77,6 +79,7 @@ public function beforePaginate(EventInterface $event): void * * @param \Cake\Event\EventInterface $event Event. * @return void + * @psalm-param \Cake\Event\EventInterface<\Crud\Event\Subject> $event */ public function beforeRender(EventInterface $event): void { @@ -125,6 +128,7 @@ public function beforeRender(EventInterface $event): void * * @param \Cake\Event\EventInterface $event Event. * @return void + * @psalm-param \Cake\Event\EventInterface<\Crud\Event\Subject> $event */ public function setFlash(EventInterface $event): void { diff --git a/src/View/Helper/CrudViewHelper.php b/src/View/Helper/CrudViewHelper.php index e27d154..f6a9bd5 100644 --- a/src/View/Helper/CrudViewHelper.php +++ b/src/View/Helper/CrudViewHelper.php @@ -9,7 +9,6 @@ use Cake\Utility\Text; use Cake\View\Helper; use Cake\View\Helper\FormHelper; -use DateTimeInterface; /** * @property \BootstrapUI\View\Helper\FormHelper $Form @@ -206,15 +205,7 @@ public function formatDate(string $field, mixed $value, array $options): string return $this->Html->badge(__d('crud', 'N/A'), ['class' => 'info']); } - if ( - is_int($value) - || is_string($value) - || $value instanceof DateTimeInterface - ) { - return $this->Time->timeAgoInWords($value, $options); - } - - return $this->Html->badge(__d('crud', 'N/A'), ['class' => 'info']); + return $this->Time->timeAgoInWords($value, $options); } /** diff --git a/tests/TestCase/View/Helper/CrudViewHelperTest.php b/tests/TestCase/View/Helper/CrudViewHelperTest.php index 36fac1f..7e3b622 100644 --- a/tests/TestCase/View/Helper/CrudViewHelperTest.php +++ b/tests/TestCase/View/Helper/CrudViewHelperTest.php @@ -17,7 +17,7 @@ class CrudViewHelperTest extends TestCase protected CrudViewHelper $CrudView; /** - * @var \Cake\View\View&\PHPUnit_Framework_MockObject_MockObject + * @var \Cake\View\View&\PHPUnit\Framework\MockObject\MockObject */ protected $View;