diff --git a/composer.lock b/composer.lock index 008bd823..7acb48e1 100644 --- a/composer.lock +++ b/composer.lock @@ -658,16 +658,16 @@ }, { "name": "doctrine/dbal", - "version": "3.5.3", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "88fa7e5189fd5ec6682477044264dc0ed4e3aa1e" + "reference": "85b98cb23c8af471a67abfe14485da696bcabc2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/88fa7e5189fd5ec6682477044264dc0ed4e3aa1e", - "reference": "88fa7e5189fd5ec6682477044264dc0ed4e3aa1e", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/85b98cb23c8af471a67abfe14485da696bcabc2e", + "reference": "85b98cb23c8af471a67abfe14485da696bcabc2e", "shasum": "" }, "require": { @@ -680,11 +680,12 @@ "psr/log": "^1|^2|^3" }, "require-dev": { - "doctrine/coding-standard": "11.0.0", + "doctrine/coding-standard": "11.1.0", + "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2022.3", - "phpstan/phpstan": "1.9.4", + "phpstan/phpstan": "1.9.14", "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "9.5.27", + "phpunit/phpunit": "9.6.3", "psalm/plugin-phpunit": "0.18.4", "squizlabs/php_codesniffer": "3.7.1", "symfony/cache": "^5.4|^6.0", @@ -749,7 +750,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.5.3" + "source": "https://github.com/doctrine/dbal/tree/3.6.0" }, "funding": [ { @@ -765,7 +766,7 @@ "type": "tidelift" } ], - "time": "2023-01-12T10:21:44+00:00" + "time": "2023-02-07T22:52:03+00:00" }, { "name": "doctrine/deprecations", @@ -1342,16 +1343,16 @@ }, { "name": "doctrine/migrations", - "version": "3.5.5", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "4b1e2b6ba71d21d0c5be22ed03b6fc954d20b204" + "reference": "e542ad8bcd606d7a18d0875babb8a6d963c9c059" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/4b1e2b6ba71d21d0c5be22ed03b6fc954d20b204", - "reference": "4b1e2b6ba71d21d0c5be22ed03b6fc954d20b204", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/e542ad8bcd606d7a18d0875babb8a6d963c9c059", + "reference": "e542ad8bcd606d7a18d0875babb8a6d963c9c059", "shasum": "" }, "require": { @@ -1359,11 +1360,11 @@ "doctrine/dbal": "^3.5.1", "doctrine/deprecations": "^0.5.3 || ^1", "doctrine/event-manager": "^1.2 || ^2.0", - "friendsofphp/proxy-manager-lts": "^1.0", - "php": "^7.4 || ^8.0", + "php": "^8.1", "psr/log": "^1.1.3 || ^2 || ^3", "symfony/console": "^4.4.16 || ^5.4 || ^6.0", - "symfony/stopwatch": "^4.4 || ^5.4 || ^6.0" + "symfony/stopwatch": "^4.4 || ^5.4 || ^6.0", + "symfony/var-exporter": "^6.2" }, "conflict": { "doctrine/orm": "<2.12" @@ -1379,7 +1380,7 @@ "phpstan/phpstan-phpunit": "^1.1", "phpstan/phpstan-strict-rules": "^1.1", "phpstan/phpstan-symfony": "^1.1", - "phpunit/phpunit": "^9.5", + "phpunit/phpunit": "^9.5.24", "symfony/cache": "^4.4 || ^5.4 || ^6.0", "symfony/process": "^4.4 || ^5.4 || ^6.0", "symfony/yaml": "^4.4 || ^5.4 || ^6.0" @@ -1424,7 +1425,7 @@ ], "support": { "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.5.5" + "source": "https://github.com/doctrine/migrations/tree/3.6.0" }, "funding": [ { @@ -1440,7 +1441,7 @@ "type": "tidelift" } ], - "time": "2023-01-18T12:44:30+00:00" + "time": "2023-02-15T18:49:46+00:00" }, { "name": "doctrine/orm", @@ -1946,88 +1947,6 @@ }, "time": "2022-09-18T07:06:19+00:00" }, - { - "name": "friendsofphp/proxy-manager-lts", - "version": "v1.0.14", - "source": { - "type": "git", - "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git", - "reference": "a527c9d9d5348e012bd24482d83a5cd643bcbc9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/a527c9d9d5348e012bd24482d83a5cd643bcbc9e", - "reference": "a527c9d9d5348e012bd24482d83a5cd643bcbc9e", - "shasum": "" - }, - "require": { - "laminas/laminas-code": "~3.4.1|^4.0", - "php": ">=7.1", - "symfony/filesystem": "^4.4.17|^5.0|^6.0" - }, - "conflict": { - "laminas/laminas-stdlib": "<3.2.1", - "zendframework/zend-stdlib": "<3.2.1" - }, - "replace": { - "ocramius/proxy-manager": "^2.1" - }, - "require-dev": { - "ext-phar": "*", - "symfony/phpunit-bridge": "^5.4|^6.0" - }, - "type": "library", - "extra": { - "thanks": { - "name": "ocramius/proxy-manager", - "url": "https://github.com/Ocramius/ProxyManager" - } - }, - "autoload": { - "psr-4": { - "ProxyManager\\": "src/ProxyManager" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - } - ], - "description": "Adding support for a wider range of PHP versions to ocramius/proxy-manager", - "homepage": "https://github.com/FriendsOfPHP/proxy-manager-lts", - "keywords": [ - "aop", - "lazy loading", - "proxy", - "proxy pattern", - "service proxies" - ], - "support": { - "issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues", - "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.14" - }, - "funding": [ - { - "url": "https://github.com/Ocramius", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", - "type": "tidelift" - } - ], - "time": "2023-01-30T10:40:19+00:00" - }, { "name": "friendsofsymfony/rest-bundle", "version": "3.5.0", @@ -2297,16 +2216,16 @@ }, { "name": "jms/metadata", - "version": "2.7.0", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/schmittjoh/metadata.git", - "reference": "283c714831d272d78ddd6e52e08ac16d76be30fd" + "reference": "7ca240dcac0c655eb15933ee55736ccd2ea0d7a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/283c714831d272d78ddd6e52e08ac16d76be30fd", - "reference": "283c714831d272d78ddd6e52e08ac16d76be30fd", + "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/7ca240dcac0c655eb15933ee55736ccd2ea0d7a6", + "reference": "7ca240dcac0c655eb15933ee55736ccd2ea0d7a6", "shasum": "" }, "require": { @@ -2317,7 +2236,7 @@ "doctrine/coding-standard": "^8.0", "mikey179/vfsstream": "^1.6.7", "phpunit/phpunit": "^8.5|^9.0", - "psr/container": "^1.0", + "psr/container": "^1.0|^2.0", "symfony/cache": "^3.1|^4.0|^5.0", "symfony/dependency-injection": "^3.1|^4.0|^5.0" }, @@ -2355,9 +2274,9 @@ ], "support": { "issues": "https://github.com/schmittjoh/metadata/issues", - "source": "https://github.com/schmittjoh/metadata/tree/2.7.0" + "source": "https://github.com/schmittjoh/metadata/tree/2.8.0" }, - "time": "2022-09-13T19:18:27+00:00" + "time": "2023-02-15T13:44:18+00:00" }, { "name": "jms/serializer", @@ -2616,69 +2535,6 @@ ], "time": "2023-01-25T22:01:15+00:00" }, - { - "name": "laminas/laminas-code", - "version": "4.8.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-code.git", - "reference": "dd19fe8e07cc3f374308565667eecd4958c22106" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/dd19fe8e07cc3f374308565667eecd4958c22106", - "reference": "dd19fe8e07cc3f374308565667eecd4958c22106", - "shasum": "" - }, - "require": { - "php": "~8.1.0 || ~8.2.0" - }, - "require-dev": { - "doctrine/annotations": "^1.13.3", - "ext-phar": "*", - "laminas/laminas-coding-standard": "^2.3.0", - "laminas/laminas-stdlib": "^3.6.1", - "phpunit/phpunit": "^9.5.26", - "psalm/plugin-phpunit": "^0.18.0", - "vimeo/psalm": "^5.1.0" - }, - "suggest": { - "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", - "laminas/laminas-stdlib": "Laminas\\Stdlib component" - }, - "type": "library", - "autoload": { - "psr-4": { - "Laminas\\Code\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Extensions to the PHP Reflection API, static code scanning, and code generation", - "homepage": "https://laminas.dev", - "keywords": [ - "code", - "laminas", - "laminasframework" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-code/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-code/issues", - "rss": "https://github.com/laminas/laminas-code/releases.atom", - "source": "https://github.com/laminas/laminas-code" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2022-12-08T02:08:23+00:00" - }, { "name": "laminas/laminas-escaper", "version": "2.12.0", @@ -3477,29 +3333,30 @@ }, { "name": "nelmio/cors-bundle", - "version": "2.2.0", + "version": "2.3.1", "source": { "type": "git", "url": "https://github.com/nelmio/NelmioCorsBundle.git", - "reference": "0ee5ee30b0ee08ea122d431ae6e0ddeb87f035c0" + "reference": "185d2c0ae50a3f0b628790170164d5f1c5b7c281" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/0ee5ee30b0ee08ea122d431ae6e0ddeb87f035c0", - "reference": "0ee5ee30b0ee08ea122d431ae6e0ddeb87f035c0", + "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/185d2c0ae50a3f0b628790170164d5f1c5b7c281", + "reference": "185d2c0ae50a3f0b628790170164d5f1c5b7c281", "shasum": "" }, "require": { - "symfony/framework-bundle": "^4.3 || ^5.0 || ^6.0" + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/framework-bundle": "^4.4 || ^5.4 || ^6.0" }, "require-dev": { "mockery/mockery": "^1.2", - "symfony/phpunit-bridge": "^4.3 || ^5.0 || ^6.0" + "symfony/phpunit-bridge": "^4.4 || ^5.4 || ^6.0" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -3532,9 +3389,9 @@ ], "support": { "issues": "https://github.com/nelmio/NelmioCorsBundle/issues", - "source": "https://github.com/nelmio/NelmioCorsBundle/tree/2.2.0" + "source": "https://github.com/nelmio/NelmioCorsBundle/tree/2.3.1" }, - "time": "2021-12-01T09:34:27+00:00" + "time": "2023-02-16T08:49:29+00:00" }, { "name": "onelogin/php-saml", @@ -4034,16 +3891,16 @@ }, { "name": "phpoffice/phpspreadsheet", - "version": "1.27.0", + "version": "1.27.1", "source": { "type": "git", "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "eeb8582f9cabf5a7f4ef78015691163233a1834f" + "reference": "ef4e6ef74990239946d3983451a9bbed5ef1be5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/eeb8582f9cabf5a7f4ef78015691163233a1834f", - "reference": "eeb8582f9cabf5a7f4ef78015691163233a1834f", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/ef4e6ef74990239946d3983451a9bbed5ef1be5d", + "reference": "ef4e6ef74990239946d3983451a9bbed5ef1be5d", "shasum": "" }, "require": { @@ -4070,7 +3927,7 @@ "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "dealerdirect/phpcodesniffer-composer-installer": "dev-main", "dompdf/dompdf": "^1.0 || ^2.0", "friendsofphp/php-cs-fixer": "^3.2", "mitoteam/jpgraph": "^10.2.4", @@ -4133,9 +3990,9 @@ ], "support": { "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", - "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.27.0" + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.27.1" }, - "time": "2023-01-24T20:07:45+00:00" + "time": "2023-02-08T07:02:13+00:00" }, { "name": "phpoffice/phpword", @@ -4252,16 +4109,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.16.0", + "version": "1.16.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "57090cfccbfaa639e703c007486d605a6e80f56d" + "reference": "e27e92d939e2e3636f0a1f0afaba59692c0bf571" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/57090cfccbfaa639e703c007486d605a6e80f56d", - "reference": "57090cfccbfaa639e703c007486d605a6e80f56d", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/e27e92d939e2e3636f0a1f0afaba59692c0bf571", + "reference": "e27e92d939e2e3636f0a1f0afaba59692c0bf571", "shasum": "" }, "require": { @@ -4291,9 +4148,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.16.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.16.1" }, - "time": "2023-01-29T14:41:23+00:00" + "time": "2023-02-07T18:11:17+00:00" }, { "name": "psr/cache", @@ -4919,16 +4776,16 @@ }, { "name": "setasign/fpdi", - "version": "v2.3.6", + "version": "v2.3.7", "source": { "type": "git", "url": "https://github.com/Setasign/FPDI.git", - "reference": "6231e315f73e4f62d72b73f3d6d78ff0eed93c31" + "reference": "bccc892d5fa1f48c43f8ba7db5ed4ba6f30c8c05" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Setasign/FPDI/zipball/6231e315f73e4f62d72b73f3d6d78ff0eed93c31", - "reference": "6231e315f73e4f62d72b73f3d6d78ff0eed93c31", + "url": "https://api.github.com/repos/Setasign/FPDI/zipball/bccc892d5fa1f48c43f8ba7db5ed4ba6f30c8c05", + "reference": "bccc892d5fa1f48c43f8ba7db5ed4ba6f30c8c05", "shasum": "" }, "require": { @@ -4979,7 +4836,7 @@ ], "support": { "issues": "https://github.com/Setasign/FPDI/issues", - "source": "https://github.com/Setasign/FPDI/tree/v2.3.6" + "source": "https://github.com/Setasign/FPDI/tree/v2.3.7" }, "funding": [ { @@ -4987,7 +4844,7 @@ "type": "tidelift" } ], - "time": "2021-02-11T11:37:01+00:00" + "time": "2023-02-09T10:38:43+00:00" }, { "name": "spomky-labs/otphp", @@ -9909,16 +9766,16 @@ }, { "name": "twig/cssinliner-extra", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/twigphp/cssinliner-extra.git", - "reference": "2917fc4a5d4d2a95dcaf79f0c21c0c2a0a30eff4" + "reference": "381877765d17b0178322d68b818e0c67f9c93187" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/2917fc4a5d4d2a95dcaf79f0c21c0c2a0a30eff4", - "reference": "2917fc4a5d4d2a95dcaf79f0c21c0c2a0a30eff4", + "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/381877765d17b0178322d68b818e0c67f9c93187", + "reference": "381877765d17b0178322d68b818e0c67f9c93187", "shasum": "" }, "require": { @@ -9963,7 +9820,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.5.0" + "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.5.1" }, "funding": [ { @@ -9975,20 +9832,20 @@ "type": "tidelift" } ], - "time": "2022-12-27T12:23:36+00:00" + "time": "2023-02-08T07:44:55+00:00" }, { "name": "twig/extra-bundle", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/twigphp/twig-extra-bundle.git", - "reference": "edfcdbdc943b52101011d57ec546af393dc56537" + "reference": "a961e553a624eebdbd423ad5ab931497ca6d87cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/edfcdbdc943b52101011d57ec546af393dc56537", - "reference": "edfcdbdc943b52101011d57ec546af393dc56537", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/a961e553a624eebdbd423ad5ab931497ca6d87cd", + "reference": "a961e553a624eebdbd423ad5ab931497ca6d87cd", "shasum": "" }, "require": { @@ -10042,7 +9899,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.5.0" + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.5.1" }, "funding": [ { @@ -10054,20 +9911,20 @@ "type": "tidelift" } ], - "time": "2022-12-27T12:23:36+00:00" + "time": "2023-02-08T07:44:55+00:00" }, { "name": "twig/inky-extra", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/twigphp/inky-extra.git", - "reference": "2845c9c7ad25227c3b79285a2421ee9cebbf48e8" + "reference": "4efde499b99942a27e206898e55208a8692c16ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/inky-extra/zipball/2845c9c7ad25227c3b79285a2421ee9cebbf48e8", - "reference": "2845c9c7ad25227c3b79285a2421ee9cebbf48e8", + "url": "https://api.github.com/repos/twigphp/inky-extra/zipball/4efde499b99942a27e206898e55208a8692c16ca", + "reference": "4efde499b99942a27e206898e55208a8692c16ca", "shasum": "" }, "require": { @@ -10113,7 +9970,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/inky-extra/tree/v3.5.0" + "source": "https://github.com/twigphp/inky-extra/tree/v3.5.1" }, "funding": [ { @@ -10125,20 +9982,20 @@ "type": "tidelift" } ], - "time": "2022-12-27T12:23:36+00:00" + "time": "2023-02-08T07:44:55+00:00" }, { "name": "twig/intl-extra", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/twigphp/intl-extra.git", - "reference": "92f2c73471e077d0f72195a331c9a245da2010cd" + "reference": "c3ebfac1624228c0556de57a34af6b7d83a1a408" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/92f2c73471e077d0f72195a331c9a245da2010cd", - "reference": "92f2c73471e077d0f72195a331c9a245da2010cd", + "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/c3ebfac1624228c0556de57a34af6b7d83a1a408", + "reference": "c3ebfac1624228c0556de57a34af6b7d83a1a408", "shasum": "" }, "require": { @@ -10182,7 +10039,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/intl-extra/tree/v3.5.0" + "source": "https://github.com/twigphp/intl-extra/tree/v3.5.1" }, "funding": [ { @@ -10194,20 +10051,20 @@ "type": "tidelift" } ], - "time": "2022-12-27T12:23:36+00:00" + "time": "2023-02-08T07:44:55+00:00" }, { "name": "twig/string-extra", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/twigphp/string-extra.git", - "reference": "73c458625c685b3cb3986ec2f5f83ebd1247bcb3" + "reference": "e8403cf7140319917577604be406dfb371246437" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/string-extra/zipball/73c458625c685b3cb3986ec2f5f83ebd1247bcb3", - "reference": "73c458625c685b3cb3986ec2f5f83ebd1247bcb3", + "url": "https://api.github.com/repos/twigphp/string-extra/zipball/e8403cf7140319917577604be406dfb371246437", + "reference": "e8403cf7140319917577604be406dfb371246437", "shasum": "" }, "require": { @@ -10254,7 +10111,7 @@ "unicode" ], "support": { - "source": "https://github.com/twigphp/string-extra/tree/v3.5.0" + "source": "https://github.com/twigphp/string-extra/tree/v3.5.1" }, "funding": [ { @@ -10266,20 +10123,20 @@ "type": "tidelift" } ], - "time": "2022-12-27T12:23:36+00:00" + "time": "2023-02-08T07:44:55+00:00" }, { "name": "twig/twig", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "3ffcf4b7d890770466da3b2666f82ac054e7ec72" + "reference": "a6e0510cc793912b451fd40ab983a1d28f611c15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/3ffcf4b7d890770466da3b2666f82ac054e7ec72", - "reference": "3ffcf4b7d890770466da3b2666f82ac054e7ec72", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/a6e0510cc793912b451fd40ab983a1d28f611c15", + "reference": "a6e0510cc793912b451fd40ab983a1d28f611c15", "shasum": "" }, "require": { @@ -10330,7 +10187,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.5.0" + "source": "https://github.com/twigphp/Twig/tree/v3.5.1" }, "funding": [ { @@ -10342,7 +10199,7 @@ "type": "tidelift" } ], - "time": "2022-12-27T12:28:18+00:00" + "time": "2023-02-08T07:49:20+00:00" }, { "name": "webmozart/assert", @@ -10503,16 +10360,16 @@ }, { "name": "zircote/swagger-php", - "version": "4.6.1", + "version": "4.6.2", "source": { "type": "git", "url": "https://github.com/zircote/swagger-php.git", - "reference": "e449670473d7ecaff75dff744e8e9be68a79a44c" + "reference": "14d6c5e2bde957e03a3a5496a3b18419a0480199" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zircote/swagger-php/zipball/e449670473d7ecaff75dff744e8e9be68a79a44c", - "reference": "e449670473d7ecaff75dff744e8e9be68a79a44c", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/14d6c5e2bde957e03a3a5496a3b18419a0480199", + "reference": "14d6c5e2bde957e03a3a5496a3b18419a0480199", "shasum": "" }, "require": { @@ -10575,9 +10432,9 @@ ], "support": { "issues": "https://github.com/zircote/swagger-php/issues", - "source": "https://github.com/zircote/swagger-php/tree/4.6.1" + "source": "https://github.com/zircote/swagger-php/tree/4.6.2" }, - "time": "2023-02-03T01:25:00+00:00" + "time": "2023-02-14T22:54:06+00:00" } ], "packages-dev": [ @@ -11020,16 +10877,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.14.3", + "version": "v3.14.4", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "b418036b95b4936a33fe906245d3044395935e73" + "reference": "1b3d9dba63d93b8a202c31e824748218781eae6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b418036b95b4936a33fe906245d3044395935e73", - "reference": "b418036b95b4936a33fe906245d3044395935e73", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/1b3d9dba63d93b8a202c31e824748218781eae6b", + "reference": "1b3d9dba63d93b8a202c31e824748218781eae6b", "shasum": "" }, "require": { @@ -11040,7 +10897,7 @@ "ext-json": "*", "ext-tokenizer": "*", "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0", + "sebastian/diff": "^4.0 || ^5.0", "symfony/console": "^5.4 || ^6.0", "symfony/event-dispatcher": "^5.4 || ^6.0", "symfony/filesystem": "^5.4 || ^6.0", @@ -11098,7 +10955,7 @@ "description": "A tool to automatically fix PHP code style", "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.14.3" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.14.4" }, "funding": [ { @@ -11106,7 +10963,7 @@ "type": "github" } ], - "time": "2023-01-30T00:24:29+00:00" + "time": "2023-02-09T21:49:13+00:00" }, { "name": "masterminds/html5", @@ -11346,16 +11203,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.9.16", + "version": "1.9.18", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "922e2689bb180575d0f57de0443c431a5a698e8f" + "reference": "f2d5cf71be91172a57c649770b73c20ebcffb0bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/922e2689bb180575d0f57de0443c431a5a698e8f", - "reference": "922e2689bb180575d0f57de0443c431a5a698e8f", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f2d5cf71be91172a57c649770b73c20ebcffb0bf", + "reference": "f2d5cf71be91172a57c649770b73c20ebcffb0bf", "shasum": "" }, "require": { @@ -11385,7 +11242,7 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.9.16" + "source": "https://github.com/phpstan/phpstan/tree/1.9.18" }, "funding": [ { @@ -11401,7 +11258,7 @@ "type": "tidelift" } ], - "time": "2023-02-07T10:42:21+00:00" + "time": "2023-02-17T15:01:27+00:00" }, { "name": "phpstan/phpstan-doctrine", @@ -11475,16 +11332,16 @@ }, { "name": "phpstan/phpstan-phpunit", - "version": "1.3.3", + "version": "1.3.4", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-phpunit.git", - "reference": "54a24bd23e9e80ee918cdc24f909d376c2e273f7" + "reference": "d77af96c1aaec28f7c0293677132eaaad079e01b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/54a24bd23e9e80ee918cdc24f909d376c2e273f7", - "reference": "54a24bd23e9e80ee918cdc24f909d376c2e273f7", + "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/d77af96c1aaec28f7c0293677132eaaad079e01b", + "reference": "d77af96c1aaec28f7c0293677132eaaad079e01b", "shasum": "" }, "require": { @@ -11521,9 +11378,9 @@ "description": "PHPUnit extensions and rules for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-phpunit/issues", - "source": "https://github.com/phpstan/phpstan-phpunit/tree/1.3.3" + "source": "https://github.com/phpstan/phpstan-phpunit/tree/1.3.4" }, - "time": "2022-12-21T15:25:00+00:00" + "time": "2023-02-09T08:05:29+00:00" }, { "name": "phpstan/phpstan-strict-rules", diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml index 541a4750..53bc8ab4 100644 --- a/config/packages/framework.yaml +++ b/config/packages/framework.yaml @@ -21,6 +21,9 @@ framework: mailer: dsn: '%env(MAILER_URL)%' + validation: + email_validation_mode: html5 + when@dev: framework: mailer: diff --git a/phpstan.neon b/phpstan.neon index d6cc2f12..d5cedcc5 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -7135,11 +7135,6 @@ parameters: count: 1 path: src/Security/SessionHandler.php - - - message: "#^Cannot call method getTimestamp\\(\\) on DateTime\\|null\\.$#" - count: 1 - path: src/Timesheet/Calculator/DurationCalculator.php - - message: "#^Method App\\\\Timesheet\\\\DateTimeFactory\\:\\:createWeekDateTime\\(\\) has no return type specified\\.$#" count: 1 @@ -7280,11 +7275,6 @@ parameters: count: 1 path: src/Timesheet/Rounding/FloorRounding.php - - - message: "#^Cannot call method getTimestamp\\(\\) on DateTime\\|null\\.$#" - count: 1 - path: src/Timesheet/RoundingService.php - - message: "#^Method App\\\\Timesheet\\\\RoundingService\\:\\:__construct\\(\\) has parameter \\$rules with no value type specified in iterable type array\\.$#" count: 1 @@ -7965,11 +7955,6 @@ parameters: count: 2 path: src/Validator/Constraints/TimesheetLockdownValidator.php - - - message: "#^Cannot call method getTimestamp\\(\\) on DateTime\\|null\\.$#" - count: 2 - path: src/Validator/Constraints/TimesheetLongRunningValidator.php - - message: "#^Parameter \\#1 \\$timesheet \\(App\\\\Entity\\\\Timesheet\\) of method App\\\\Validator\\\\Constraints\\\\TimesheetLongRunningValidator\\:\\:validate\\(\\) should be contravariant with parameter \\$value \\(mixed\\) of method Symfony\\\\Component\\\\Validator\\\\ConstraintValidatorInterface\\:\\:validate\\(\\)$#" count: 2 diff --git a/src/Constants.php b/src/Constants.php index f513c661..4a7cce76 100644 --- a/src/Constants.php +++ b/src/Constants.php @@ -17,11 +17,11 @@ class Constants /** * The current release version */ - public const VERSION = '2.0.0'; + public const VERSION = '2.0.1'; /** * The current release: major * 10000 + minor * 100 + patch */ - public const VERSION_ID = 20000; + public const VERSION_ID = 20001; /** * The software name */ diff --git a/src/Doctrine/UTCDateTimeType.php b/src/Doctrine/UTCDateTimeType.php index e5546280..ebee7826 100644 --- a/src/Doctrine/UTCDateTimeType.php +++ b/src/Doctrine/UTCDateTimeType.php @@ -21,12 +21,13 @@ final class UTCDateTimeType extends DateTimeType private static ?\DateTimeZone $utc = null; /** - * @param mixed $value + * @param T $value * @param AbstractPlatform $platform - * @return mixed|string + * @return (T is null ? null : string) + * @template T<\DateTime> * @throws ConversionException */ - public function convertToDatabaseValue($value, AbstractPlatform $platform): mixed + public function convertToDatabaseValue($value, AbstractPlatform $platform): ?string { if ($value instanceof \DateTime) { $value = clone $value; diff --git a/src/Entity/Project.php b/src/Entity/Project.php index f6fbb179..7bc1b781 100644 --- a/src/Entity/Project.php +++ b/src/Entity/Project.php @@ -184,7 +184,7 @@ class Project implements EntityWithMetaFields, EntityWithBudget return $this->customer; } - public function setCustomer(Customer $customer): Project + public function setCustomer(?Customer $customer): Project { $this->customer = $customer; diff --git a/src/Entity/Timesheet.php b/src/Entity/Timesheet.php index 0ab12cba..d385c750 100644 --- a/src/Entity/Timesheet.php +++ b/src/Entity/Timesheet.php @@ -322,12 +322,21 @@ class Timesheet implements EntityWithMetaFields, ExportableItem { // only auto calculate if manually set duration is null - the result is important for eg. validations if ($calculate && $this->duration === null && $this->begin !== null && $this->end !== null) { - return $this->end->getTimestamp() - $this->begin->getTimestamp(); + return $this->getCalculatedDuration(); } return $this->duration; } + public function getCalculatedDuration(): ?int + { + if ($this->begin !== null && $this->end !== null) { + return $this->end->getTimestamp() - $this->begin->getTimestamp(); + } + + return null; + } + /** * @param User $user * @return Timesheet diff --git a/src/Repository/TimesheetRepository.php b/src/Repository/TimesheetRepository.php index 65524fc6..cd7051de 100644 --- a/src/Repository/TimesheetRepository.php +++ b/src/Repository/TimesheetRepository.php @@ -51,10 +51,10 @@ class TimesheetRepository extends EntityRepository /** * Fetches the raw data of a timesheet, to allow comparison e.g. of submitted and previously stored data. * - * @param Timesheet $id + * @param int $id * @return array */ - public function getRawData(Timesheet $id): array + public function getRawData(int $id): array { $qb = $this->createQueryBuilder('t'); $qb diff --git a/src/Timesheet/Calculator/DurationCalculator.php b/src/Timesheet/Calculator/DurationCalculator.php index dceb3fe0..bbd62356 100644 --- a/src/Timesheet/Calculator/DurationCalculator.php +++ b/src/Timesheet/Calculator/DurationCalculator.php @@ -28,7 +28,7 @@ final class DurationCalculator implements CalculatorInterface return; } - $duration = $record->getEnd()->getTimestamp() - $record->getBegin()->getTimestamp(); + $duration = $record->getCalculatedDuration(); $record->setDuration($duration); $this->roundings->applyRoundings($record); diff --git a/src/Timesheet/RoundingService.php b/src/Timesheet/RoundingService.php index c6126e21..ba6e3ce3 100644 --- a/src/Timesheet/RoundingService.php +++ b/src/Timesheet/RoundingService.php @@ -116,7 +116,7 @@ final class RoundingService $rounder->roundEnd($record, $rounding['end']); if ($record->getBegin() !== null) { - $duration = $record->getEnd()->getTimestamp() - $record->getBegin()->getTimestamp(); + $duration = $record->getCalculatedDuration(); $record->setDuration($duration); $rounder->roundDuration($record, $rounding['duration']); diff --git a/src/Timesheet/TimesheetService.php b/src/Timesheet/TimesheetService.php index cdcaf61b..d0ac23f0 100644 --- a/src/Timesheet/TimesheetService.php +++ b/src/Timesheet/TimesheetService.php @@ -127,14 +127,16 @@ final class TimesheetService $this->repository->save($timesheet); $this->dispatcher->dispatch(new TimesheetCreatePostEvent($timesheet)); - // TODO really stop always or only if $timesheet->getEnd() === null - try { - $this->stopActiveEntries($timesheet); - } catch (ValidationFailedException $vex) { - // could happen for timesheets that were started in the future (end before begin) - // or if you try to create a new timesheet while an old one is running for too long - throw new ValidationFailedException($vex->getViolations(), 'Cannot stop running timesheet'); + if ($timesheet->isRunning()) { + try { + $this->stopActiveEntries($timesheet); + } catch (ValidationFailedException $vex) { + // could happen for timesheets that were started in the future (end before begin) + // or if you try to create a new timesheet while an old one is running for too long + throw new ValidationFailedException($vex->getViolations(), 'Cannot stop running timesheet'); + } } + $this->repository->commit(); } catch (\Exception $ex) { $this->repository->rollback(); diff --git a/src/Validator/Constraints/TimesheetBudgetUsedValidator.php b/src/Validator/Constraints/TimesheetBudgetUsedValidator.php index 0ed50038..1ac731ab 100644 --- a/src/Validator/Constraints/TimesheetBudgetUsedValidator.php +++ b/src/Validator/Constraints/TimesheetBudgetUsedValidator.php @@ -73,10 +73,24 @@ final class TimesheetBudgetUsedValidator extends ConstraintValidator return; } + $id = $timesheet->getId(); + // when changing the date via the calendar and/or the API, the duration will not be reset by the // duration calculator (which runs after validation!) so we manually reset the duration before - $timesheet->setDuration(null); - $duration = $timesheet->getDuration(); + + // ------------------------------------------------------------------------ + // Old solution (buggy) - duration MAY NOT BE RESET! + // this will cause the timesheet to be deleted in the Weekly-QuickEntry-Flow + // ------------------------------------------------------------------------ + // $timesheet->setDuration(null); + // $duration = $timesheet->getDuration(); + + // another possible solution is cloning the timesheet + // $timesheet = clone $timesheet; + // $timesheet->setDuration(null); + // $duration = $timesheet->getDuration(); + + $duration = $timesheet->getCalculatedDuration(); $timeRate = $this->rateService->calculate($timesheet); $rate = $timeRate->getRate(); @@ -89,8 +103,8 @@ final class TimesheetBudgetUsedValidator extends ConstraintValidator $customerRate = $rate; $monthWasChanged = false; - if ($timesheet->getId() !== null) { - $rawData = $this->timesheetRepository->getRawData($timesheet); + if ($id !== null) { + $rawData = $this->timesheetRepository->getRawData($id); $activityId = (int) $rawData['activity']; $projectId = (int) $rawData['project']; diff --git a/src/Validator/Constraints/TimesheetLongRunningValidator.php b/src/Validator/Constraints/TimesheetLongRunningValidator.php index f79543ae..51ce6f99 100644 --- a/src/Validator/Constraints/TimesheetLongRunningValidator.php +++ b/src/Validator/Constraints/TimesheetLongRunningValidator.php @@ -39,9 +39,12 @@ final class TimesheetLongRunningValidator extends ConstraintValidator return; } + /** @var int $duration */ + $duration = $timesheet->getCalculatedDuration(); + // one year is currently the maximum that can be logged (which is already not logically) // the database column could hold more data, but let's limit it here - if ($timesheet->getDuration() > 31536000) { + if ($duration > 31536000) { $this->context->buildViolation($constraint->maximumMessage) ->setTranslationDomain('validators') ->atPath('duration') @@ -57,7 +60,6 @@ final class TimesheetLongRunningValidator extends ConstraintValidator return; } - $duration = $timesheet->getEnd()->getTimestamp() - $timesheet->getBegin()->getTimestamp(); // float on purpose, because one second more than the configured minutes is already too long $minutes = $duration / 60; diff --git a/src/Validator/Constraints/TimesheetZeroDurationValidator.php b/src/Validator/Constraints/TimesheetZeroDurationValidator.php index 8ca9439e..659d564e 100644 --- a/src/Validator/Constraints/TimesheetZeroDurationValidator.php +++ b/src/Validator/Constraints/TimesheetZeroDurationValidator.php @@ -45,7 +45,7 @@ final class TimesheetZeroDurationValidator extends ConstraintValidator $duration = 0; if ($timesheet->getEnd() !== null && $timesheet->getBegin() !== null) { - $duration = $timesheet->getEnd()->getTimestamp() - $timesheet->getBegin()->getTimestamp(); + $duration = $timesheet->getCalculatedDuration(); } if ($duration <= 0) { diff --git a/symfony.lock b/symfony.lock index 33194aac..60503368 100644 --- a/symfony.lock +++ b/symfony.lock @@ -129,9 +129,6 @@ "ref": "bb31a3bbec00a8fc8aa1c9fbf9b0ef9fc492f93d" } }, - "friendsofphp/proxy-manager-lts": { - "version": "v1.0.3" - }, "friendsofsymfony/rest-bundle": { "version": "2.2", "recipe": { @@ -165,9 +162,6 @@ "kevinpapst/tabler-bundle": { "version": "dev-initial" }, - "laminas/laminas-code": { - "version": "3.4.1" - }, "laminas/laminas-escaper": { "version": "2.7.0" }, diff --git a/templates/security/login.html.twig b/templates/security/login.html.twig index 18cd9d27..2f182c28 100644 --- a/templates/security/login.html.twig +++ b/templates/security/login.html.twig @@ -58,7 +58,11 @@ {% set provider = saml_config.getProvider() %} {% if provider is not null %} - + {% if 'fa-' in provider %} + + {% else %} + + {% endif %} {% endif %} {{ saml_config.getTitle()|trans }} diff --git a/tests/Entity/TimesheetTest.php b/tests/Entity/TimesheetTest.php index 7512685e..ba866309 100644 --- a/tests/Entity/TimesheetTest.php +++ b/tests/Entity/TimesheetTest.php @@ -25,7 +25,7 @@ use PHPUnit\Framework\TestCase; */ class TimesheetTest extends TestCase { - public function testDefaultValues() + public function testDefaultValues(): void { $sut = new Timesheet(); self::assertEquals('timesheet', $sut->getType()); @@ -36,6 +36,9 @@ class TimesheetTest extends TestCase self::assertTrue($sut->isBillable()); self::assertNull($sut->getModifiedAt()); self::assertSame(0, $sut->getDuration()); + self::assertSame(0, $sut->getDuration(true)); + self::assertSame(0, $sut->getDuration(false)); + self::assertNull($sut->getCalculatedDuration()); self::assertNull($sut->getUser()); self::assertNull($sut->getActivity()); self::assertNull($sut->getProject()); @@ -57,7 +60,7 @@ class TimesheetTest extends TestCase self::assertNull($sut->getMetaField('foo')); } - public function testValueCanBeNull() + public function testValueCanBeNull(): void { $sut = new Timesheet(); self::assertEquals(0, $sut->getDuration()); @@ -72,7 +75,7 @@ class TimesheetTest extends TestCase self::assertNull($sut->getInternalRate()); } - protected function getEntity() + protected function getEntity(): Timesheet { $customer = new Customer('Test Customer'); @@ -92,7 +95,7 @@ class TimesheetTest extends TestCase return $entity; } - public function testTags() + public function testTags(): void { $sut = new Timesheet(); $tag = new Tag(); @@ -115,7 +118,7 @@ class TimesheetTest extends TestCase $this->assertEmpty($sut->getTags()); } - public function testMetaFields() + public function testMetaFields(): void { $sut = new Timesheet(); $meta = new TimesheetMeta(); @@ -143,7 +146,7 @@ class TimesheetTest extends TestCase self::assertCount(2, $sut->getVisibleMetaFields()); } - public function testBillable() + public function testBillable(): void { $sut = new Timesheet(); self::assertTrue($sut->isBillable()); @@ -153,7 +156,7 @@ class TimesheetTest extends TestCase self::assertTrue($sut->isBillable()); } - public function testCategory() + public function testCategory(): void { $sut = new Timesheet(); self::assertInstanceOf(Timesheet::class, $sut->setCategory(Timesheet::HOLIDAY)); @@ -173,7 +176,7 @@ class TimesheetTest extends TestCase $sut->setCategory('foo'); } - public function testClone() + public function testClone(): void { $sut = new Timesheet(); $sut->setExported(true); @@ -207,4 +210,61 @@ class TimesheetTest extends TestCase self::assertEquals($clone->getEnd(), $sut->getEnd()); self::assertFalse($clone->isExported()); } + + public function testDuration(): void + { + $sut = new Timesheet(); + + self::assertSame(0, $sut->getDuration()); + self::assertSame(0, $sut->getDuration(true)); + self::assertSame(0, $sut->getDuration(false)); + self::assertNull($sut->getCalculatedDuration()); + + $sut->setDuration(null); + + self::assertNull($sut->getDuration()); + self::assertNull($sut->getDuration(true)); + self::assertNull($sut->getDuration(false)); + self::assertNull($sut->getCalculatedDuration()); + + $begin = new \DateTime('2023-02-17 18:00:00'); + $sut->setBegin($begin); + + self::assertNull($sut->getDuration()); + self::assertNull($sut->getDuration(true)); + self::assertNull($sut->getDuration(false)); + self::assertNull($sut->getCalculatedDuration()); + + $sut->setDuration(0); + + self::assertSame(0, $sut->getDuration()); + self::assertSame(0, $sut->getDuration(true)); + self::assertSame(0, $sut->getDuration(false)); + self::assertNull($sut->getCalculatedDuration()); + + $end = clone $begin; + $end->modify('+2 hours'); + $sut->setEnd($end); + + self::assertSame(0, $sut->getDuration()); + self::assertSame(0, $sut->getDuration(true)); + self::assertSame(0, $sut->getDuration(false)); + self::assertEquals(7200, $sut->getCalculatedDuration()); + + $sut->setDuration(7200); + + self::assertSame(7200, $sut->getDuration()); + self::assertSame(7200, $sut->getDuration(true)); + self::assertSame(7200, $sut->getDuration(false)); + self::assertEquals(7200, $sut->getCalculatedDuration()); + + $end = clone $begin; + $end->modify('+1 hours'); + $sut->setEnd($end); + + self::assertSame(7200, $sut->getDuration()); + self::assertSame(7200, $sut->getDuration(true)); + self::assertSame(7200, $sut->getDuration(false)); + self::assertEquals(3600, $sut->getCalculatedDuration()); + } } diff --git a/tests/Validator/Constraints/TimesheetBudgetUsedValidatorTest.php b/tests/Validator/Constraints/TimesheetBudgetUsedValidatorTest.php index 1f311af5..b113f39c 100644 --- a/tests/Validator/Constraints/TimesheetBudgetUsedValidatorTest.php +++ b/tests/Validator/Constraints/TimesheetBudgetUsedValidatorTest.php @@ -418,6 +418,7 @@ class TimesheetBudgetUsedValidatorTest extends ConstraintValidatorTestCase $timesheet->method('getRate')->willReturn($rawData['rate']); $timesheet->method('getBegin')->willReturn($begin); $timesheet->method('getEnd')->willReturn($end); + $timesheet->method('getCalculatedDuration')->willReturn($end->getTimestamp() - $begin->getTimestamp()); $timesheet->method('getDuration')->willReturn($end->getTimestamp() - $begin->getTimestamp()); $timesheet->method('getUser')->willReturn(new User()); $timesheet->method('getProject')->willReturn($project); diff --git a/tests/Validator/Constraints/TimesheetLongRunningValidatorTest.php b/tests/Validator/Constraints/TimesheetLongRunningValidatorTest.php index 33e138c4..cc1a502b 100644 --- a/tests/Validator/Constraints/TimesheetLongRunningValidatorTest.php +++ b/tests/Validator/Constraints/TimesheetLongRunningValidatorTest.php @@ -77,10 +77,13 @@ class TimesheetLongRunningValidatorTest extends ConstraintValidatorTestCase public function testLongRunningTriggersOverMaximum() { + $begin = new \DateTime(); + $end = clone $begin; + $end->modify('+31536060 seconds'); + $timesheet = new Timesheet(); - $timesheet->setBegin(new \DateTime()); - $timesheet->setEnd(new \DateTime()); - $timesheet->setDuration(31536060); + $timesheet->setBegin($begin); + $timesheet->setEnd($end); $this->validator->validate($timesheet, new TimesheetLongRunning()); diff --git a/tests/phpstan.neon b/tests/phpstan.neon index 900e6fd6..b38363ce 100644 --- a/tests/phpstan.neon +++ b/tests/phpstan.neon @@ -1042,11 +1042,6 @@ parameters: count: 1 path: API/ProjectControllerTest.php - - - message: "#^Parameter \\#1 \\$customer of method App\\\\Entity\\\\Project\\:\\:setCustomer\\(\\) expects App\\\\Entity\\\\Customer, App\\\\Entity\\\\Customer\\|null given\\.$#" - count: 3 - path: API/ProjectControllerTest.php - - message: "#^Parameter \\#1 \\$customer of method App\\\\Entity\\\\Team\\:\\:addCustomer\\(\\) expects App\\\\Entity\\\\Customer, App\\\\Entity\\\\Customer\\|null given\\.$#" count: 1 @@ -5187,46 +5182,6 @@ parameters: count: 1 path: Entity/TimesheetTest.php - - - message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetTest\\:\\:getEntity\\(\\) has no return type specified\\.$#" - count: 1 - path: Entity/TimesheetTest.php - - - - message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetTest\\:\\:testBillable\\(\\) has no return type specified\\.$#" - count: 1 - path: Entity/TimesheetTest.php - - - - message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetTest\\:\\:testCategory\\(\\) has no return type specified\\.$#" - count: 1 - path: Entity/TimesheetTest.php - - - - message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetTest\\:\\:testClone\\(\\) has no return type specified\\.$#" - count: 1 - path: Entity/TimesheetTest.php - - - - message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetTest\\:\\:testDefaultValues\\(\\) has no return type specified\\.$#" - count: 1 - path: Entity/TimesheetTest.php - - - - message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetTest\\:\\:testMetaFields\\(\\) has no return type specified\\.$#" - count: 1 - path: Entity/TimesheetTest.php - - - - message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetTest\\:\\:testTags\\(\\) has no return type specified\\.$#" - count: 1 - path: Entity/TimesheetTest.php - - - - message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetTest\\:\\:testValueCanBeNull\\(\\) has no return type specified\\.$#" - count: 1 - path: Entity/TimesheetTest.php - - message: "#^Parameter \\#1 \\$name of method App\\\\Entity\\\\Timesheet\\:\\:getMetaField\\(\\) expects string, string\\|null given\\.$#" count: 1