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()