diff --git a/.gitignore b/.gitignore index 42e80fe6..bb4565e9 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,7 @@ !bin/console /var/data/kimai.sqlite - +/var/coverage/ /var/cache/* !var/cache/.gitkeep diff --git a/README.md b/README.md index a2f667d6..de4d6e1c 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ npm run prod ### Installation (development / demo) -Lets boostrap your environment by executing this commands (which is only available in dev environment): +Lets boostrap your environment by executing this commands (which is only available in dev environment): ```bash bin/console kimai:reset-dev ``` @@ -95,13 +95,13 @@ Just use the built-in web server for your first tests: bin/console server:run ``` -This command will start a web server for Kimai. Now you can access the application in your browser at . +This command will start a web server for Kimai. Now you can access the application in your browser at . You can stop the built-in web server by pressing `Ctrl + C` while you're in the terminal. ### Installation (live) -The database to use is up to you, but we would not recommend using the default SQLite database for production usage. +The database to use is up to you, but we would not recommend using the default SQLite database for production usage. Please create your database and configure the connection string in your environment, e.g. with the `.env` file: ``` APP_ENV=prod @@ -115,10 +115,10 @@ bin/console doctrine:schema:create bin/console cache:warmup --env=prod ``` -Create your first user: +Create your first user with the following command. You will be asked to enter a password afterwards. ```bash -bin/console kimai:create-user username password admin@example.com ROLE_SUPER_ADMIN +bin/console kimai:create-user username admin@example.com ROLE_SUPER_ADMIN ``` For available roles, please refer to the [user documentation](var/docs/users.md). diff --git a/composer.json b/composer.json index d8338c6b..a420c55d 100644 --- a/composer.json +++ b/composer.json @@ -8,7 +8,6 @@ "ext-pdo_sqlite": "*", "avanzu/admin-theme-bundle": "dev-kevinpapst", "beberlei/DoctrineExtensions": "^1.0", - "dama/doctrine-test-bundle": "^4.0", "erusev/parsedown": "^1.6", "sensio/framework-extra-bundle": "^5.1", "symfony/asset": "^4.0", @@ -34,6 +33,7 @@ "white-october/pagerfanta-bundle": "^1.1" }, "require-dev": { + "dama/doctrine-test-bundle": "^5.0", "doctrine/doctrine-fixtures-bundle": "^3.0", "friendsofphp/php-cs-fixer": "^2.10", "phpunit/phpunit": "^6.5", diff --git a/composer.lock b/composer.lock index 1d250b45..3a9787d8 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "e61ba50d155aed4f2355ddcfa87b6448", + "content-hash": "c087646a948295bf4d813107007bed9b", "packages": [ { "name": "almasaeed2010/adminlte", @@ -115,16 +115,16 @@ }, { "name": "beberlei/DoctrineExtensions", - "version": "v1.0.20", + "version": "v1.0.21", "source": { "type": "git", "url": "https://github.com/beberlei/DoctrineExtensions.git", - "reference": "f592c495f1c43851f5e3418cf9c2514e61d67e64" + "reference": "b4dc688b5f7f9645920f4c81703e83a45cab09c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beberlei/DoctrineExtensions/zipball/f592c495f1c43851f5e3418cf9c2514e61d67e64", - "reference": "f592c495f1c43851f5e3418cf9c2514e61d67e64", + "url": "https://api.github.com/repos/beberlei/DoctrineExtensions/zipball/b4dc688b5f7f9645920f4c81703e83a45cab09c2", + "reference": "b4dc688b5f7f9645920f4c81703e83a45cab09c2", "shasum": "" }, "require": { @@ -173,64 +173,7 @@ "doctrine", "orm" ], - "time": "2017-12-01T10:02:05+00:00" - }, - { - "name": "dama/doctrine-test-bundle", - "version": "v4.0.2", - "source": { - "type": "git", - "url": "https://github.com/dmaicher/doctrine-test-bundle.git", - "reference": "438346b3380cc7675e37fbcdca912fdc33471d32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/438346b3380cc7675e37fbcdca912fdc33471d32", - "reference": "438346b3380cc7675e37fbcdca912fdc33471d32", - "shasum": "" - }, - "require": { - "doctrine/dbal": "~2.5", - "doctrine/doctrine-bundle": "~1.4", - "php": ">=5.5.0", - "symfony/framework-bundle": "~2.7|~3.0|~4.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.4.4|~6.0", - "symfony/yaml": "~2.7|~3.0" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "4.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "DAMA\\DoctrineTestBundle\\": "src/DAMA/DoctrineTestBundle" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "David Maicher", - "email": "mail@dmaicher.de" - } - ], - "description": "Symfony 2/3 bundle to isolate doctrine database tests and improve test performance", - "keywords": [ - "Symfony 3", - "doctrine", - "isolation", - "performance", - "symfony", - "symfony 2", - "tests" - ], - "time": "2018-01-13T13:14:27+00:00" + "time": "2018-01-27T07:05:10+00:00" }, { "name": "doctrine/annotations", @@ -1382,27 +1325,27 @@ }, { "name": "ocramius/package-versions", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/Ocramius/PackageVersions.git", - "reference": "ad8a245decad4897cc6b432743913dad0d69753c" + "reference": "4489d5002c49d55576fa0ba786f42dbb009be46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/ad8a245decad4897cc6b432743913dad0d69753c", - "reference": "ad8a245decad4897cc6b432743913dad0d69753c", + "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/4489d5002c49d55576fa0ba786f42dbb009be46f", + "reference": "4489d5002c49d55576fa0ba786f42dbb009be46f", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0", - "php": "~7.0" + "composer-plugin-api": "^1.0.0", + "php": "^7.1.0" }, "require-dev": { - "composer/composer": "^1.3", + "composer/composer": "^1.6.3", "ext-zip": "*", - "humbug/humbug": "dev-master", - "phpunit/phpunit": "^6.4" + "infection/infection": "^0.7.1", + "phpunit/phpunit": "^7.0.0" }, "type": "composer-plugin", "extra": { @@ -1427,7 +1370,7 @@ } ], "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", - "time": "2017-11-24T11:07:03+00:00" + "time": "2018-02-05T13:05:30+00:00" }, { "name": "ocramius/proxy-manager", @@ -1759,16 +1702,16 @@ }, { "name": "sensio/framework-extra-bundle", - "version": "v5.1.4", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "072c00c52b947e88a1e619e9ff426cee6c8c482b" + "reference": "93ae48d5f4b567105bcc058c3a8ba506176eca8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/072c00c52b947e88a1e619e9ff426cee6c8c482b", - "reference": "072c00c52b947e88a1e619e9ff426cee6c8c482b", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/93ae48d5f4b567105bcc058c3a8ba506176eca8a", + "reference": "93ae48d5f4b567105bcc058c3a8ba506176eca8a", "shasum": "" }, "require": { @@ -1824,7 +1767,7 @@ "annotations", "controllers" ], - "time": "2018-01-12T13:08:16+00:00" + "time": "2018-02-06T19:53:10+00:00" }, { "name": "swiftmailer/swiftmailer", @@ -1883,7 +1826,7 @@ }, { "name": "symfony/asset", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", @@ -1939,16 +1882,16 @@ }, { "name": "symfony/cache", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "1ebe207de664355b1699d35b12b0563c38a47b4e" + "reference": "e901ff335ef5e8ef57ee9b8e098bd54a1d39a857" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/1ebe207de664355b1699d35b12b0563c38a47b4e", - "reference": "1ebe207de664355b1699d35b12b0563c38a47b4e", + "url": "https://api.github.com/repos/symfony/cache/zipball/e901ff335ef5e8ef57ee9b8e098bd54a1d39a857", + "reference": "e901ff335ef5e8ef57ee9b8e098bd54a1d39a857", "shasum": "" }, "require": { @@ -2004,20 +1947,20 @@ "caching", "psr6" ], - "time": "2018-01-03T17:15:19+00:00" + "time": "2018-01-18T22:19:33+00:00" }, { "name": "symfony/config", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "0e86d267db0851cf55f339c97df00d693fe8592f" + "reference": "ecd917899167922086ddb3247aa43eb1c418fcb2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/0e86d267db0851cf55f339c97df00d693fe8592f", - "reference": "0e86d267db0851cf55f339c97df00d693fe8592f", + "url": "https://api.github.com/repos/symfony/config/zipball/ecd917899167922086ddb3247aa43eb1c418fcb2", + "reference": "ecd917899167922086ddb3247aa43eb1c418fcb2", "shasum": "" }, "require": { @@ -2064,20 +2007,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2018-01-03T07:38:00+00:00" + "time": "2018-01-21T19:06:11+00:00" }, { "name": "symfony/console", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "fe0e69d7162cba0885791cf7eea5f0d7bc0f897e" + "reference": "36d5b41e7d4e1ccf0370f6babe966c08ef0a1488" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/fe0e69d7162cba0885791cf7eea5f0d7bc0f897e", - "reference": "fe0e69d7162cba0885791cf7eea5f0d7bc0f897e", + "url": "https://api.github.com/repos/symfony/console/zipball/36d5b41e7d4e1ccf0370f6babe966c08ef0a1488", + "reference": "36d5b41e7d4e1ccf0370f6babe966c08ef0a1488", "shasum": "" }, "require": { @@ -2132,20 +2075,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-01-03T07:38:00+00:00" + "time": "2018-01-29T09:06:29+00:00" }, { "name": "symfony/debug", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "9ae4223a661b56a9abdce144de4886cca37f198f" + "reference": "c77bb31d0f6310a2ac11e657475d396a92e5dc54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/9ae4223a661b56a9abdce144de4886cca37f198f", - "reference": "9ae4223a661b56a9abdce144de4886cca37f198f", + "url": "https://api.github.com/repos/symfony/debug/zipball/c77bb31d0f6310a2ac11e657475d396a92e5dc54", + "reference": "c77bb31d0f6310a2ac11e657475d396a92e5dc54", "shasum": "" }, "require": { @@ -2188,20 +2131,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2018-01-03T17:15:19+00:00" + "time": "2018-01-18T22:19:33+00:00" }, { "name": "symfony/dependency-injection", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "67bf5e4f4da85624f30a5e43b7f43225c8b71959" + "reference": "f78ca49c6360c710ca8e316511e71a23b10e3bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/67bf5e4f4da85624f30a5e43b7f43225c8b71959", - "reference": "67bf5e4f4da85624f30a5e43b7f43225c8b71959", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/f78ca49c6360c710ca8e316511e71a23b10e3bf2", + "reference": "f78ca49c6360c710ca8e316511e71a23b10e3bf2", "shasum": "" }, "require": { @@ -2259,11 +2202,11 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2018-01-04T15:52:56+00:00" + "time": "2018-01-29T09:29:16+00:00" }, { "name": "symfony/doctrine-bridge", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", @@ -2342,7 +2285,7 @@ }, { "name": "symfony/event-dispatcher", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", @@ -2405,7 +2348,7 @@ }, { "name": "symfony/expression-language", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", @@ -2455,7 +2398,7 @@ }, { "name": "symfony/filesystem", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", @@ -2504,7 +2447,7 @@ }, { "name": "symfony/finder", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", @@ -2553,16 +2496,16 @@ }, { "name": "symfony/flex", - "version": "v1.0.66", + "version": "v1.0.68", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "b366e902710c8dc8d8be97ed8d64ef574d9bffcb" + "reference": "0241b2acbb58df29e633b03fb56eb349a207613f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/b366e902710c8dc8d8be97ed8d64ef574d9bffcb", - "reference": "b366e902710c8dc8d8be97ed8d64ef574d9bffcb", + "url": "https://api.github.com/repos/symfony/flex/zipball/0241b2acbb58df29e633b03fb56eb349a207613f", + "reference": "0241b2acbb58df29e633b03fb56eb349a207613f", "shasum": "" }, "require": { @@ -2595,20 +2538,20 @@ "email": "fabien.potencier@gmail.com" } ], - "time": "2018-01-21T09:15:48+00:00" + "time": "2018-01-31T19:34:57+00:00" }, { "name": "symfony/form", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "3ece1a890feba59740bb4a7b990628efb7408b0f" + "reference": "46ff2f07ea787a500a9a7000389744c1445fb40e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/3ece1a890feba59740bb4a7b990628efb7408b0f", - "reference": "3ece1a890feba59740bb4a7b990628efb7408b0f", + "url": "https://api.github.com/repos/symfony/form/zipball/46ff2f07ea787a500a9a7000389744c1445fb40e", + "reference": "46ff2f07ea787a500a9a7000389744c1445fb40e", "shasum": "" }, "require": { @@ -2675,20 +2618,20 @@ ], "description": "Symfony Form Component", "homepage": "https://symfony.com", - "time": "2018-01-03T07:38:00+00:00" + "time": "2018-01-29T09:06:29+00:00" }, { "name": "symfony/framework-bundle", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "7d80f8dcebce598b03dfe75a8669d8a1942687cd" + "reference": "3766b9b88e9918f68560b58a404340b41112b861" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/7d80f8dcebce598b03dfe75a8669d8a1942687cd", - "reference": "7d80f8dcebce598b03dfe75a8669d8a1942687cd", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/3766b9b88e9918f68560b58a404340b41112b861", + "reference": "3766b9b88e9918f68560b58a404340b41112b861", "shasum": "" }, "require": { @@ -2789,20 +2732,20 @@ ], "description": "Symfony FrameworkBundle", "homepage": "https://symfony.com", - "time": "2018-01-04T15:52:56+00:00" + "time": "2018-01-29T09:06:29+00:00" }, { "name": "symfony/http-foundation", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "03fe5171e35966f43453e2e5c15d7fe65f7fb23b" + "reference": "82a3ee2c6662d08ca1adf99e1ef2e31ab48196d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/03fe5171e35966f43453e2e5c15d7fe65f7fb23b", - "reference": "03fe5171e35966f43453e2e5c15d7fe65f7fb23b", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/82a3ee2c6662d08ca1adf99e1ef2e31ab48196d4", + "reference": "82a3ee2c6662d08ca1adf99e1ef2e31ab48196d4", "shasum": "" }, "require": { @@ -2842,20 +2785,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2018-01-03T17:15:19+00:00" + "time": "2018-01-29T09:06:29+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "f707ed09d3b5799a26c985de480d48b48540d41a" + "reference": "194bd224ec27952eac6d4fea6264b22990834eca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f707ed09d3b5799a26c985de480d48b48540d41a", - "reference": "f707ed09d3b5799a26c985de480d48b48540d41a", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/194bd224ec27952eac6d4fea6264b22990834eca", + "reference": "194bd224ec27952eac6d4fea6264b22990834eca", "shasum": "" }, "require": { @@ -2863,7 +2806,7 @@ "psr/log": "~1.0", "symfony/debug": "~3.4|~4.0", "symfony/event-dispatcher": "~3.4|~4.0", - "symfony/http-foundation": "~3.4|~4.0" + "symfony/http-foundation": "~3.4.4|~4.0.4" }, "conflict": { "symfony/config": "<3.4", @@ -2928,11 +2871,11 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2018-01-05T08:54:25+00:00" + "time": "2018-01-29T13:27:08+00:00" }, { "name": "symfony/inflector", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/inflector.git", @@ -2989,7 +2932,7 @@ }, { "name": "symfony/intl", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", @@ -3156,7 +3099,7 @@ }, { "name": "symfony/monolog-bridge", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", @@ -3285,16 +3228,16 @@ }, { "name": "symfony/options-resolver", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "30d9240b30696a69e893534c9fc4a5c72ab6689b" + "reference": "371532a2cfe932f7a3766dd4c45364566def1dd0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/30d9240b30696a69e893534c9fc4a5c72ab6689b", - "reference": "30d9240b30696a69e893534c9fc4a5c72ab6689b", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/371532a2cfe932f7a3766dd4c45364566def1dd0", + "reference": "371532a2cfe932f7a3766dd4c45364566def1dd0", "shasum": "" }, "require": { @@ -3335,7 +3278,7 @@ "configuration", "options" ], - "time": "2018-01-03T07:38:00+00:00" + "time": "2018-01-18T22:19:33+00:00" }, { "name": "symfony/orm-pack", @@ -3367,16 +3310,16 @@ }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.6.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "d2bb2ef00dd8605d6fbd4db53ed4af1395953497" + "reference": "254919c03761d46c29291616576ed003f10e91c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/d2bb2ef00dd8605d6fbd4db53ed4af1395953497", - "reference": "d2bb2ef00dd8605d6fbd4db53ed4af1395953497", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/254919c03761d46c29291616576ed003f10e91c1", + "reference": "254919c03761d46c29291616576ed003f10e91c1", "shasum": "" }, "require": { @@ -3389,7 +3332,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -3421,20 +3364,20 @@ "portable", "shim" ], - "time": "2017-10-11T12:05:26+00:00" + "time": "2018-01-30T19:27:44+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.6.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", - "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b", "shasum": "" }, "require": { @@ -3446,7 +3389,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -3480,20 +3423,20 @@ "portable", "shim" ], - "time": "2017-10-11T12:05:26+00:00" + "time": "2018-01-30T19:27:44+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.6.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "6de4f4884b97abbbed9f0a84a95ff2ff77254254" + "reference": "8eca20c8a369e069d4f4c2ac9895144112867422" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/6de4f4884b97abbbed9f0a84a95ff2ff77254254", - "reference": "6de4f4884b97abbbed9f0a84a95ff2ff77254254", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/8eca20c8a369e069d4f4c2ac9895144112867422", + "reference": "8eca20c8a369e069d4f4c2ac9895144112867422", "shasum": "" }, "require": { @@ -3502,7 +3445,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -3535,20 +3478,20 @@ "portable", "shim" ], - "time": "2017-10-11T12:05:26+00:00" + "time": "2018-01-31T17:43:24+00:00" }, { "name": "symfony/process", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "2145b3e8137e463b1051b79440a59b38220944f0" + "reference": "e1712002d81de6f39f854bc5bbd9e9f4bb6345b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/2145b3e8137e463b1051b79440a59b38220944f0", - "reference": "2145b3e8137e463b1051b79440a59b38220944f0", + "url": "https://api.github.com/repos/symfony/process/zipball/e1712002d81de6f39f854bc5bbd9e9f4bb6345b4", + "reference": "e1712002d81de6f39f854bc5bbd9e9f4bb6345b4", "shasum": "" }, "require": { @@ -3584,7 +3527,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2018-01-03T07:38:00+00:00" + "time": "2018-01-29T09:06:29+00:00" }, { "name": "symfony/profiler-pack", @@ -3616,7 +3559,7 @@ }, { "name": "symfony/property-access", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", @@ -3683,16 +3626,16 @@ }, { "name": "symfony/routing", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "a34b58ed26cc090f99b2ef833d609a6884581b3c" + "reference": "a69bd948700b672e036147762f46749bcae33796" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/a34b58ed26cc090f99b2ef833d609a6884581b3c", - "reference": "a34b58ed26cc090f99b2ef833d609a6884581b3c", + "url": "https://api.github.com/repos/symfony/routing/zipball/a69bd948700b672e036147762f46749bcae33796", + "reference": "a69bd948700b672e036147762f46749bcae33796", "shasum": "" }, "require": { @@ -3757,28 +3700,30 @@ "uri", "url" ], - "time": "2018-01-04T15:52:56+00:00" + "time": "2018-01-16T18:04:12+00:00" }, { "name": "symfony/security", - "version": "v4.0.3", + "version": "v3.4.4", "source": { "type": "git", "url": "https://github.com/symfony/security.git", - "reference": "dfc0ef20a75b723ab2f20449a7b5dd768800c9e2" + "reference": "73e91b887cf11caec53fced50e9d97b306e48d07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security/zipball/dfc0ef20a75b723ab2f20449a7b5dd768800c9e2", - "reference": "dfc0ef20a75b723ab2f20449a7b5dd768800c9e2", + "url": "https://api.github.com/repos/symfony/security/zipball/73e91b887cf11caec53fced50e9d97b306e48d07", + "reference": "73e91b887cf11caec53fced50e9d97b306e48d07", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/event-dispatcher": "~3.4|~4.0", - "symfony/http-foundation": "~3.4|~4.0", - "symfony/http-kernel": "~3.4|~4.0", - "symfony/property-access": "~3.4|~4.0" + "php": "^5.5.9|>=7.0.8", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "^2.8.31|~3.3.13|~3.4|~4.0", + "symfony/http-kernel": "~3.3|~4.0", + "symfony/polyfill-php56": "~1.0", + "symfony/polyfill-php70": "~1.0", + "symfony/property-access": "~2.8|~3.0|~4.0" }, "replace": { "symfony/security-core": "self.version", @@ -3789,12 +3734,12 @@ "require-dev": { "psr/container": "^1.0", "psr/log": "~1.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/finder": "~3.4|~4.0", - "symfony/ldap": "~3.4|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/ldap": "~3.1|~4.0", "symfony/polyfill-intl-icu": "~1.0", - "symfony/routing": "~3.4|~4.0", - "symfony/validator": "~3.4|~4.0" + "symfony/routing": "~2.8|~3.0|~4.0", + "symfony/validator": "^3.2.5|~4.0" }, "suggest": { "psr/container": "To instantiate the Security class", @@ -3807,7 +3752,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3834,20 +3779,20 @@ ], "description": "Symfony Security Component", "homepage": "https://symfony.com", - "time": "2018-01-03T17:15:19+00:00" + "time": "2018-01-29T09:03:43+00:00" }, { "name": "symfony/security-bundle", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "0440854c202dd49a64310cdd40a1c7008449b578" + "reference": "2d65eb4f72e89cf9ee710a64be14922e81229d7b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/0440854c202dd49a64310cdd40a1c7008449b578", - "reference": "0440854c202dd49a64310cdd40a1c7008449b578", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/2d65eb4f72e89cf9ee710a64be14922e81229d7b", + "reference": "2d65eb4f72e89cf9ee710a64be14922e81229d7b", "shasum": "" }, "require": { @@ -3914,11 +3859,70 @@ ], "description": "Symfony SecurityBundle", "homepage": "https://symfony.com", - "time": "2018-01-04T15:52:56+00:00" + "time": "2018-01-29T09:06:29+00:00" + }, + { + "name": "symfony/security-csrf", + "version": "v4.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-csrf.git", + "reference": "f7f565f799a9a48b047e386f8b279a74bc6c323e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/f7f565f799a9a48b047e386f8b279a74bc6c323e", + "reference": "f7f565f799a9a48b047e386f8b279a74bc6c323e", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/security-core": "~3.4|~4.0" + }, + "conflict": { + "symfony/http-foundation": "<3.4" + }, + "require-dev": { + "symfony/http-foundation": "~3.4|~4.0" + }, + "suggest": { + "symfony/http-foundation": "For using the class SessionTokenStorage." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Csrf\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - CSRF Library", + "homepage": "https://symfony.com", + "time": "2018-01-03T07:38:00+00:00" }, { "name": "symfony/stopwatch", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", @@ -4029,16 +4033,16 @@ }, { "name": "symfony/thanks", - "version": "v1.0.3", + "version": "v1.0.5", "source": { "type": "git", "url": "https://github.com/symfony/thanks.git", - "reference": "8c12bbe4baabcb8e640efaaaab40e3a4497c9fb4" + "reference": "c757ee0c9dcfcc0e9e30fbbbdcadeb9dcc9aaaf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/thanks/zipball/8c12bbe4baabcb8e640efaaaab40e3a4497c9fb4", - "reference": "8c12bbe4baabcb8e640efaaaab40e3a4497c9fb4", + "url": "https://api.github.com/repos/symfony/thanks/zipball/c757ee0c9dcfcc0e9e30fbbbdcadeb9dcc9aaaf4", + "reference": "c757ee0c9dcfcc0e9e30fbbbdcadeb9dcc9aaaf4", "shasum": "" }, "require": { @@ -4068,20 +4072,20 @@ } ], "description": "Give thanks (in the form of a GitHub ⭐) to your fellow PHP package maintainers (not limited to Symfony components)!", - "time": "2018-01-19T16:12:41+00:00" + "time": "2018-01-26T10:44:34+00:00" }, { "name": "symfony/translation", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "2bb1b9dac38d32c5afb00edc9371b5db4cf6d000" + "reference": "a9c4e4cc56f7eff0960c4f6c157da8f6b13211fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/2bb1b9dac38d32c5afb00edc9371b5db4cf6d000", - "reference": "2bb1b9dac38d32c5afb00edc9371b5db4cf6d000", + "url": "https://api.github.com/repos/symfony/translation/zipball/a9c4e4cc56f7eff0960c4f6c157da8f6b13211fc", + "reference": "a9c4e4cc56f7eff0960c4f6c157da8f6b13211fc", "shasum": "" }, "require": { @@ -4136,20 +4140,20 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2018-01-03T07:38:00+00:00" + "time": "2018-01-18T22:19:33+00:00" }, { "name": "symfony/twig-bridge", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "92b7c3f30fc8d23ac4be8da4e575a3bb7ea903c1" + "reference": "81260f5539bdd7a4b5c39c55e197dae6daecc33f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/92b7c3f30fc8d23ac4be8da4e575a3bb7ea903c1", - "reference": "92b7c3f30fc8d23ac4be8da4e575a3bb7ea903c1", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/81260f5539bdd7a4b5c39c55e197dae6daecc33f", + "reference": "81260f5539bdd7a4b5c39c55e197dae6daecc33f", "shasum": "" }, "require": { @@ -4226,20 +4230,20 @@ ], "description": "Symfony Twig Bridge", "homepage": "https://symfony.com", - "time": "2018-01-03T17:15:19+00:00" + "time": "2018-01-18T22:19:33+00:00" }, { "name": "symfony/twig-bundle", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "7c1ee541f7d8836d901d989c449746c953be930b" + "reference": "854b3ae1e761cf9443241119675c64e263ff21a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/7c1ee541f7d8836d901d989c449746c953be930b", - "reference": "7c1ee541f7d8836d901d989c449746c953be930b", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/854b3ae1e761cf9443241119675c64e263ff21a7", + "reference": "854b3ae1e761cf9443241119675c64e263ff21a7", "shasum": "" }, "require": { @@ -4299,20 +4303,20 @@ ], "description": "Symfony TwigBundle", "homepage": "https://symfony.com", - "time": "2018-01-04T15:52:56+00:00" + "time": "2018-01-29T09:06:29+00:00" }, { "name": "symfony/validator", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "dac55edb2d1a59026d2e51a04def7f9a1f19f365" + "reference": "f1a020d3ea3ec23cfb666ee3169700b3fae14505" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/dac55edb2d1a59026d2e51a04def7f9a1f19f365", - "reference": "dac55edb2d1a59026d2e51a04def7f9a1f19f365", + "url": "https://api.github.com/repos/symfony/validator/zipball/f1a020d3ea3ec23cfb666ee3169700b3fae14505", + "reference": "f1a020d3ea3ec23cfb666ee3169700b3fae14505", "shasum": "" }, "require": { @@ -4383,20 +4387,20 @@ ], "description": "Symfony Validator Component", "homepage": "https://symfony.com", - "time": "2018-01-03T17:15:19+00:00" + "time": "2018-01-21T19:06:11+00:00" }, { "name": "symfony/var-dumper", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "883f6109a2069773e088c08626b87a3d3d61c566" + "reference": "6d63cc74f3e2d4961411ccb77389a00332653104" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/883f6109a2069773e088c08626b87a3d3d61c566", - "reference": "883f6109a2069773e088c08626b87a3d3d61c566", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6d63cc74f3e2d4961411ccb77389a00332653104", + "reference": "6d63cc74f3e2d4961411ccb77389a00332653104", "shasum": "" }, "require": { @@ -4452,20 +4456,20 @@ "debug", "dump" ], - "time": "2018-01-03T17:15:19+00:00" + "time": "2018-01-29T09:06:29+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "20a04d0672d7f538d1c06ded7bf5990f23c089aa" + "reference": "2074348dba4b49ea86d7ee7eaf1b4fcacc887120" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/20a04d0672d7f538d1c06ded7bf5990f23c089aa", - "reference": "20a04d0672d7f538d1c06ded7bf5990f23c089aa", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/2074348dba4b49ea86d7ee7eaf1b4fcacc887120", + "reference": "2074348dba4b49ea86d7ee7eaf1b4fcacc887120", "shasum": "" }, "require": { @@ -4518,7 +4522,7 @@ ], "description": "Symfony WebProfilerBundle", "homepage": "https://symfony.com", - "time": "2018-01-04T15:52:56+00:00" + "time": "2018-01-10T11:36:17+00:00" }, { "name": "symfony/webpack-encore-pack", @@ -4550,16 +4554,16 @@ }, { "name": "symfony/yaml", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "b84f646b9490d2101e2c25ddeec77ceefbda2eee" + "reference": "ffc60bda1d4a00ec0b32eeabf39dc017bf480028" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/b84f646b9490d2101e2c25ddeec77ceefbda2eee", - "reference": "b84f646b9490d2101e2c25ddeec77ceefbda2eee", + "url": "https://api.github.com/repos/symfony/yaml/zipball/ffc60bda1d4a00ec0b32eeabf39dc017bf480028", + "reference": "ffc60bda1d4a00ec0b32eeabf39dc017bf480028", "shasum": "" }, "require": { @@ -4604,7 +4608,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-01-03T07:38:00+00:00" + "time": "2018-01-21T19:06:11+00:00" }, { "name": "twig/extensions", @@ -4951,6 +4955,63 @@ ], "time": "2016-08-30T16:08:34+00:00" }, + { + "name": "dama/doctrine-test-bundle", + "version": "v5.0.0", + "source": { + "type": "git", + "url": "https://github.com/dmaicher/doctrine-test-bundle.git", + "reference": "ccdea2ce9fec5048385d1b9b5bc7c4c3f32ab48f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/ccdea2ce9fec5048385d1b9b5bc7c4c3f32ab48f", + "reference": "ccdea2ce9fec5048385d1b9b5bc7c4c3f32ab48f", + "shasum": "" + }, + "require": { + "doctrine/dbal": "~2.5", + "doctrine/doctrine-bundle": "~1.4", + "php": "^7.1", + "symfony/framework-bundle": "~2.7|~3.0|~4.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0|~7.0", + "symfony/yaml": "~2.7|~3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "5.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "DAMA\\DoctrineTestBundle\\": "src/DAMA/DoctrineTestBundle" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "David Maicher", + "email": "mail@dmaicher.de" + } + ], + "description": "Symfony 2/3 bundle to isolate doctrine database tests and improve test performance", + "keywords": [ + "Symfony 3", + "doctrine", + "isolation", + "performance", + "symfony", + "symfony 2", + "tests" + ], + "time": "2018-02-05T12:10:27+00:00" + }, { "name": "doctrine/data-fixtures", "version": "v1.3.0", @@ -5121,16 +5182,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v2.10.0", + "version": "v2.10.2", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "513a3765b56dd029175f9f32995566657ee89dda" + "reference": "74e4682a4073bc8bc2d4ff2b30a4873ac76cc1f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/513a3765b56dd029175f9f32995566657ee89dda", - "reference": "513a3765b56dd029175f9f32995566657ee89dda", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/74e4682a4073bc8bc2d4ff2b30a4873ac76cc1f1", + "reference": "74e4682a4073bc8bc2d4ff2b30a4873ac76cc1f1", "shasum": "" }, "require": { @@ -5173,21 +5234,19 @@ "php-cs-fixer" ], "type": "application", - "extra": { - "branch-alias": { - "dev-master": "2.10-dev" - } - }, "autoload": { "psr-4": { "PhpCsFixer\\": "src/" }, "classmap": [ "tests/Test/AbstractFixerTestCase.php", + "tests/Test/AbstractIntegrationCaseFactory.php", "tests/Test/AbstractIntegrationTestCase.php", "tests/Test/Assert/AssertTokensTrait.php", "tests/Test/IntegrationCase.php", "tests/Test/IntegrationCaseFactory.php", + "tests/Test/IntegrationCaseFactoryInterface.php", + "tests/Test/InternalIntegrationCaseFactory.php", "tests/TestCase.php" ] }, @@ -5206,32 +5265,35 @@ } ], "description": "A tool to automatically fix PHP code style", - "time": "2018-01-10T17:16:15+00:00" + "time": "2018-02-03T08:30:06+00:00" }, { "name": "gecko-packages/gecko-php-unit", - "version": "v3.0", + "version": "v3.1", "source": { "type": "git", "url": "https://github.com/GeckoPackages/GeckoPHPUnit.git", - "reference": "6a866551dffc2154c1b091bae3a7877d39c25ca3" + "reference": "dbb18b292cfa14444d2e6d15202b9dcf5ab8365e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GeckoPackages/GeckoPHPUnit/zipball/6a866551dffc2154c1b091bae3a7877d39c25ca3", - "reference": "6a866551dffc2154c1b091bae3a7877d39c25ca3", + "url": "https://api.github.com/repos/GeckoPackages/GeckoPHPUnit/zipball/dbb18b292cfa14444d2e6d15202b9dcf5ab8365e", + "reference": "dbb18b292cfa14444d2e6d15202b9dcf5ab8365e", "shasum": "" }, "require": { "php": "^7.0" }, + "conflict": { + "phpunit/phpunit": "<6.0" + }, "require-dev": { "phpunit/phpunit": "^6.0" }, "suggest": { "ext-dom": "When testing with xml.", "ext-libxml": "When testing with xml.", - "phpunit/phpunit": "This is an extension for it so make sure you have it some way." + "phpunit/phpunit": "This is an extension for PHPUnit so make sure you have that in some way." }, "type": "library", "extra": { @@ -5255,7 +5317,7 @@ "filesystem", "phpunit" ], - "time": "2017-08-23T07:46:41+00:00" + "time": "2018-01-24T18:03:59+00:00" }, { "name": "myclabs/deep-copy", @@ -5406,16 +5468,16 @@ }, { "name": "php-cs-fixer/diff", - "version": "v1.2.0", + "version": "v1.2.1", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/diff.git", - "reference": "f0ef6133d674137e902fdf8a6f2e8e97e14a087b" + "reference": "b95b8c02c58670b15612cfc60873f3f7f5290484" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/f0ef6133d674137e902fdf8a6f2e8e97e14a087b", - "reference": "f0ef6133d674137e902fdf8a6f2e8e97e14a087b", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/b95b8c02c58670b15612cfc60873f3f7f5290484", + "reference": "b95b8c02c58670b15612cfc60873f3f7f5290484", "shasum": "" }, "require": { @@ -5432,6 +5494,9 @@ ] }, "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], "authors": [ { "name": "Kore Nordmann", @@ -5450,7 +5515,7 @@ "keywords": [ "diff" ], - "time": "2017-10-19T09:58:18+00:00" + "time": "2017-10-21T10:28:17+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -5508,16 +5573,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.2.0", + "version": "4.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "66465776cfc249844bde6d117abff1d22e06c2da" + "reference": "94fd0001232e47129dd3504189fa1c7225010d08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66465776cfc249844bde6d117abff1d22e06c2da", - "reference": "66465776cfc249844bde6d117abff1d22e06c2da", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08", "shasum": "" }, "require": { @@ -5555,7 +5620,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-27T17:38:31+00:00" + "time": "2017-11-30T07:14:17+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -5918,16 +5983,16 @@ }, { "name": "phpunit/phpunit", - "version": "6.5.5", + "version": "6.5.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "83d27937a310f2984fd575686138597147bdc7df" + "reference": "3330ef26ade05359d006041316ed0fa9e8e3cefe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/83d27937a310f2984fd575686138597147bdc7df", - "reference": "83d27937a310f2984fd575686138597147bdc7df", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3330ef26ade05359d006041316ed0fa9e8e3cefe", + "reference": "3330ef26ade05359d006041316ed0fa9e8e3cefe", "shasum": "" }, "require": { @@ -5998,7 +6063,7 @@ "testing", "xunit" ], - "time": "2017-12-17T06:31:19+00:00" + "time": "2018-02-01T05:57:37+00:00" }, { "name": "phpunit/phpunit-mock-objects", @@ -6106,21 +6171,21 @@ }, { "name": "sebastian/comparator", - "version": "2.1.2", + "version": "2.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "11c07feade1d65453e06df3b3b90171d6d982087" + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/11c07feade1d65453e06df3b3b90171d6d982087", - "reference": "11c07feade1d65453e06df3b3b90171d6d982087", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", "shasum": "" }, "require": { "php": "^7.0", - "sebastian/diff": "^2.0", + "sebastian/diff": "^2.0 || ^3.0", "sebastian/exporter": "^3.1" }, "require-dev": { @@ -6166,7 +6231,7 @@ "compare", "equality" ], - "time": "2018-01-12T06:34:42+00:00" + "time": "2018-02-01T13:46:46+00:00" }, { "name": "sebastian/diff", @@ -6671,7 +6736,7 @@ }, { "name": "symfony/browser-kit", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", @@ -6781,7 +6846,7 @@ }, { "name": "symfony/debug-bundle", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/debug-bundle.git", @@ -6877,7 +6942,7 @@ }, { "name": "symfony/dom-crawler", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", @@ -6933,7 +6998,7 @@ }, { "name": "symfony/dotenv", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", @@ -7047,16 +7112,16 @@ }, { "name": "symfony/phpunit-bridge", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "b989c646eb422f3ad583f0be3b482a774668e86f" + "reference": "c12fc01946942723ee824b5f09d241f5de15c037" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/b989c646eb422f3ad583f0be3b482a774668e86f", - "reference": "b989c646eb422f3ad583f0be3b482a774668e86f", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/c12fc01946942723ee824b5f09d241f5de15c037", + "reference": "c12fc01946942723ee824b5f09d241f5de15c037", "shasum": "" }, "require": { @@ -7109,11 +7174,11 @@ ], "description": "Symfony PHPUnit Bridge", "homepage": "https://symfony.com", - "time": "2018-01-04T17:20:09+00:00" + "time": "2018-01-21T19:06:11+00:00" }, { "name": "symfony/web-server-bundle", - "version": "v4.0.3", + "version": "v4.0.4", "source": { "type": "git", "url": "https://github.com/symfony/web-server-bundle.git", @@ -7211,16 +7276,16 @@ }, { "name": "webmozart/assert", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + "reference": "0df1908962e7a3071564e857d86874dad1ef204a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", + "reference": "0df1908962e7a3071564e857d86874dad1ef204a", "shasum": "" }, "require": { @@ -7257,7 +7322,7 @@ "check", "validate" ], - "time": "2016-11-23T20:04:58+00:00" + "time": "2018-01-29T19:49:41+00:00" } ], "aliases": [], diff --git a/config/bundles.php b/config/bundles.php index ab0f7c0c..11fe7268 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -17,4 +17,5 @@ return [ WhiteOctober\PagerfantaBundle\WhiteOctoberPagerfantaBundle::class => ['all' => true], Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true], + DAMA\DoctrineTestBundle\DAMADoctrineTestBundle::class => ['test' => true], ]; diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 29ec2914..5728a545 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -13,6 +13,7 @@ + @@ -25,14 +26,26 @@ - + tests/ + + + src/ + templates/ + + vendor/ + tests/ + + + + - + + \ No newline at end of file diff --git a/src/Command/CreateUserCommand.php b/src/Command/CreateUserCommand.php index 075c05b7..bfc03f54 100644 --- a/src/Command/CreateUserCommand.php +++ b/src/Command/CreateUserCommand.php @@ -13,9 +13,11 @@ use App\Entity\User; use Doctrine\Bundle\DoctrineBundle\Registry; use Symfony\Bridge\Doctrine\RegistryInterface; use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Helper\QuestionHelper; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Question\Question; use Symfony\Component\Console\Style\SymfonyStyle; use Symfony\Component\Security\Core\Encoder\UserPasswordEncoder; use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface; @@ -65,10 +67,10 @@ class CreateUserCommand extends Command ->setName('kimai:create-user') ->setDescription('Create a new user') ->setHelp('This command allows you to create a new user.') - ->addArgument('username', InputArgument::REQUIRED, 'New username (must be unique)') - ->addArgument('password', InputArgument::REQUIRED, 'Users password') - ->addArgument('email', InputArgument::REQUIRED, 'Users email address (must be unique)') - ->addArgument('role', InputArgument::OPTIONAL, 'Users role (comma separated list)', User::DEFAULT_ROLE) + ->addArgument('username', InputArgument::REQUIRED, 'The username of the user to be created (must be unique)') + ->addArgument('email', InputArgument::REQUIRED, 'Email address of the user to be created (must be unique)') + ->addArgument('role', InputArgument::OPTIONAL, 'A comma separated list of roles to assign. Examples: "ROLE_USER,ROLE_SUPER_ADMIN"', User::DEFAULT_ROLE) + ->addArgument('password', InputArgument::OPTIONAL, 'Password for the user to be created') ; } @@ -81,9 +83,14 @@ class CreateUserCommand extends Command $username = $input->getArgument('username'); $email = $input->getArgument('email'); - $password = $input->getArgument('password'); $role = $input->getArgument('role'); + if ($input->getArgument('password') !== null) { + $password = $input->getArgument('password'); + } else { + $password = $this->askForPassword($input, $output); + } + $role = $role ?: User::DEFAULT_ROLE; $user = new User(); @@ -103,7 +110,7 @@ class CreateUserCommand extends Command $value = $error->getInvalidValue(); $io->error( $error->getPropertyPath() - . " (" . (is_array($value) ? implode(',', $value) : $value) .")" + . ' (' . (is_array($value) ? implode(',', $value) : $value) . ')' . "\n " . $error->getMessage() ); @@ -121,4 +128,31 @@ class CreateUserCommand extends Command $io->error('Reason: ' . $ex->getMessage()); } } + + /** + * @param InputInterface $input + * @param OutputInterface $output + * + * @return string + */ + protected function askForPassword(InputInterface $input, OutputInterface $output): string + { + /* @var QuestionHelper $helper */ + $helper = $this->getHelper('question'); + + $passwordQuestion = new Question('Please enter the password'); + $passwordQuestion->setHidden(true); + $passwordQuestion->setHiddenFallback(false); + $passwordQuestion->setValidator(function (?string $value) { + $password = trim($value); + if (empty($password) || strlen($password) < 6) { + throw new \Exception('The password is too short, must be at least 6 character'); + } + + return $value; + }); + $passwordQuestion->setMaxAttempts(3); + + return $helper->ask($input, $output, $passwordQuestion); + } } diff --git a/symfony.lock b/symfony.lock index b379c717..68556635 100644 --- a/symfony.lock +++ b/symfony.lock @@ -416,6 +416,9 @@ "ref": "85834af1496735f28d831489d12ab1921a875e0d" } }, + "symfony/security-csrf": { + "version": "v4.0.4" + }, "symfony/stopwatch": { "version": "v4.0.3" }, diff --git a/tests/Command/CreateUserCommandTest.php b/tests/Command/CreateUserCommandTest.php new file mode 100644 index 00000000..9504cdc8 --- /dev/null +++ b/tests/Command/CreateUserCommandTest.php @@ -0,0 +1,86 @@ +application = new Application($kernel); + $container = self::$kernel->getContainer(); + + $passwordEncoder = $container->get('security.password_encoder'); + + $validationResult = $this->getMockBuilder(ConstraintViolationListInterface::class)->getMock(); + $validationResult->method('count')->willReturn(0); + $validator = $this->getMockBuilder(ValidatorInterface::class)->getMock(); + $validator->method('validate')->willReturn($validationResult); + + $this->application->add(new CreateUserCommand( + $passwordEncoder, + $container->get('doctrine'), + $validator + )); + } + + public function testCreateUser() + { + $commandTester = $this->createUser('MyTestUser', 'user@example.com', 'ROLE_USER', 'foobar'); + + $output = $commandTester->getDisplay(); + $this->assertContains('[OK] Success! Created user: MyTestUser', $output); + + $container = self::$kernel->getContainer(); + $user = $container->get('doctrine')->getRepository(User::class)->loadUserByUsername('MyTestUser'); + $this->assertNotNull($user); + } + + protected function createUser($username, $email, $role, $password) + { + $command = $this->application->find('kimai:create-user'); + $commandTester = new CommandTester($command); + $commandTester->execute([ + 'command' => $command->getName(), + 'username' => $username, + 'email' => $email, + 'role' => $role, + 'password' => $password + ]); + + return $commandTester; + } + + public function testUserAlreadyExisting() + { + $commandTester = $this->createUser('MyTestUser', 'user@example.com', 'ROLE_USER', 'foobar'); + $commandTester = $this->createUser('MyTestUser', 'user@example.com', 'ROLE_USER', 'foobar'); + + $output = $commandTester->getDisplay(); + $this->assertContains('[ERROR] Failed to create user: MyTestUser', $output); + } +} diff --git a/tests/Controller/HelpControllerTest.php b/tests/Controller/HelpControllerTest.php index 7fab049f..45360cac 100644 --- a/tests/Controller/HelpControllerTest.php +++ b/tests/Controller/HelpControllerTest.php @@ -10,6 +10,7 @@ namespace App\Tests\Controller; /** + * @coversDefaultClass \App\Controller\HelpController * @group integration */ class HelpControllerTest extends ControllerBaseTest @@ -26,7 +27,7 @@ class HelpControllerTest extends ControllerBaseTest $this->request($client, '/help/'); $this->assertTrue($client->getResponse()->isSuccessful()); $this->assertContains('

Kimai documentation

', $client->getResponse()->getContent()); - $this->assertNotContains('', $client->getResponse()->getContent()); + $this->assertNotContains('', $client->getResponse()->getContent()); } public function testUsersPage() @@ -34,7 +35,7 @@ class HelpControllerTest extends ControllerBaseTest $client = $this->getClientForAuthenticatedUser(); $this->request($client, '/help/users'); $this->assertTrue($client->getResponse()->isSuccessful()); - $this->assertContains('', $client->getResponse()->getContent()); + $this->assertContains('', $client->getResponse()->getContent()); } public function testValidateRouteDoesNotAllowSpecialChars()