diff --git a/README.md b/README.md
index aeae18fc1d558ab905dc5a8606642415885ae759..026bda579527ae0486d5fee24ab57581ba4eb29f 100644
--- a/README.md
+++ b/README.md
@@ -41,9 +41,16 @@
## Инструкция
+## Создание БД для тестов
+
+1. Войти в консоль - `make shell`
+2. Запустить - `bin/console --env=test doctrine:database:create`
+3. Запустить - `bin/console --env=test doctrine:schema:create`
+
## Воркер отправки Email квестов
-Запустить команду - `bin/console messenger:consume -v scheduler_quests`
+1. Войти в консоль - `make shell`
+2. Запустить команду - `bin/console messenger:consume -v scheduler_quests`
## Kafka
@@ -60,6 +67,11 @@
+## Тестирование
+
+1. Войти в консоль - `make shell`
+2. Запустить команду - `bin/phpunit`
+
## Postman
Импортировать в Postman `{URL}/api/doc.json`
diff --git a/app/.env.test b/app/.env.test
new file mode 100644
index 0000000000000000000000000000000000000000..9e7162f0b01d8778e236e79f4121e0926f68c194
--- /dev/null
+++ b/app/.env.test
@@ -0,0 +1,6 @@
+# define your env variables for the test env here
+KERNEL_CLASS='App\Kernel'
+APP_SECRET='$ecretf0rt3st'
+SYMFONY_DEPRECATIONS_HELPER=999999
+PANTHER_APP_ENV=panther
+PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots
diff --git a/app/.gitignore b/app/.gitignore
index 01b5c7a79ff59108a05c056b5d9464641ada6e5e..16fabea99aa9fdc7c732d36018fd14369da6bc74 100644
--- a/app/.gitignore
+++ b/app/.gitignore
@@ -11,3 +11,13 @@
###> lexik/jwt-authentication-bundle ###
/config/jwt/*.pem
###< lexik/jwt-authentication-bundle ###
+
+###> symfony/phpunit-bridge ###
+.phpunit.result.cache
+/phpunit.xml
+###< symfony/phpunit-bridge ###
+
+###> phpunit/phpunit ###
+/phpunit.xml
+.phpunit.result.cache
+###< phpunit/phpunit ###
diff --git a/app/bin/phpunit b/app/bin/phpunit
new file mode 100755
index 0000000000000000000000000000000000000000..692baccb64749a49d4170d568bf6ef681ac014d5
--- /dev/null
+++ b/app/bin/phpunit
@@ -0,0 +1,23 @@
+#!/usr/bin/env php
+= 80000) {
+ require dirname(__DIR__).'/vendor/phpunit/phpunit/phpunit';
+ } else {
+ define('PHPUNIT_COMPOSER_INSTALL', dirname(__DIR__).'/vendor/autoload.php');
+ require PHPUNIT_COMPOSER_INSTALL;
+ PHPUnit\TextUI\Command::main();
+ }
+} else {
+ if (!is_file(dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit.php')) {
+ echo "Unable to find the `simple-phpunit.php` script in `vendor/symfony/phpunit-bridge/bin/`.\n";
+ exit(1);
+ }
+
+ require dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit.php';
+}
diff --git a/app/composer.json b/app/composer.json
index 7020df0f0724267b600d0f8707996b6bc825d63a..6b4bc79b4cac8452cb60b948b471c785424ed214 100644
--- a/app/composer.json
+++ b/app/composer.json
@@ -8,6 +8,7 @@
"ext-ctype": "*",
"ext-iconv": "*",
"ext-rdkafka": "*",
+ "api-platform/core": "^3.3",
"doctrine/dbal": "^3",
"doctrine/doctrine-bundle": "^2.12",
"doctrine/doctrine-migrations-bundle": "^3.3",
@@ -15,17 +16,22 @@
"lexik/jwt-authentication-bundle": "^3.0",
"nelmio/api-doc-bundle": "^4.27",
"nelmio/cors-bundle": "^2.5",
+ "phpdocumentor/reflection-docblock": "^5.4",
+ "phpstan/phpdoc-parser": "^1.29",
"predis/predis": "^2.2",
"symfony/asset": "7.0.*",
"symfony/cache": "7.0.*",
"symfony/console": "7.0.*",
"symfony/dotenv": "7.0.*",
+ "symfony/expression-language": "7.0.*",
"symfony/filesystem": "7.0.*",
"symfony/flex": "^2",
"symfony/framework-bundle": "7.0.*",
"symfony/mailer": "7.0.*",
"symfony/messenger": "7.0.*",
"symfony/mime": "7.0.*",
+ "symfony/property-access": "7.0.*",
+ "symfony/property-info": "7.0.*",
"symfony/runtime": "7.0.*",
"symfony/scheduler": "7.0.*",
"symfony/security-bundle": "7.0.*",
@@ -37,8 +43,17 @@
"twig/twig": "^2.12|^3.0"
},
"require-dev": {
+ "dama/doctrine-test-bundle": "^8.2",
+ "doctrine/doctrine-fixtures-bundle": "^3.6",
+ "liip/test-fixtures-bundle": "^3.0",
+ "phpunit/phpunit": "^9.5",
"roave/security-advisories": "dev-latest",
- "symfony/maker-bundle": "^1.59"
+ "symfony/browser-kit": "7.0.*",
+ "symfony/css-selector": "7.0.*",
+ "symfony/http-client": "7.0.*",
+ "symfony/maker-bundle": "^1.59",
+ "symfony/phpunit-bridge": "^7.1",
+ "zenstruck/messenger-test": "^1.9"
},
"config": {
"allow-plugins": {
diff --git a/app/composer.lock b/app/composer.lock
index e212146e5c8118a70b540ce4c75637b9f37bbc8a..91792987b8463abfe8e5032cb3dea934a844260d 100644
--- a/app/composer.lock
+++ b/app/composer.lock
@@ -4,8 +4,196 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "54d204742929222e6a66061365bec4eb",
+ "content-hash": "8b6f0b619e1fcafec2ca3e3ae288f1c0",
"packages": [
+ {
+ "name": "api-platform/core",
+ "version": "v3.3.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/api-platform/core.git",
+ "reference": "6daec826cf2a26fa6455a0a137c027c71b126f15"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/api-platform/core/zipball/6daec826cf2a26fa6455a0a137c027c71b126f15",
+ "reference": "6daec826cf2a26fa6455a0a137c027c71b126f15",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/inflector": "^1.0 || ^2.0",
+ "php": ">=8.1",
+ "psr/cache": "^1.0 || ^2.0 || ^3.0",
+ "psr/container": "^1.0 || ^2.0",
+ "symfony/deprecation-contracts": "^3.1",
+ "symfony/http-foundation": "^6.4 || ^7.0",
+ "symfony/http-kernel": "^6.4 || ^7.0",
+ "symfony/property-access": "^6.4 || ^7.0",
+ "symfony/property-info": "^6.4 || ^7.0",
+ "symfony/serializer": "^6.4 || ^7.0",
+ "symfony/translation-contracts": "^3.3",
+ "symfony/web-link": "^6.4 || ^7.0",
+ "willdurand/negotiation": "^3.0"
+ },
+ "conflict": {
+ "doctrine/common": "<3.2.2",
+ "doctrine/dbal": "<2.10",
+ "doctrine/mongodb-odm": "<2.4",
+ "doctrine/orm": "<2.14.0",
+ "doctrine/persistence": "<1.3",
+ "elasticsearch/elasticsearch": ">=8.0,<8.4",
+ "phpspec/prophecy": "<1.15",
+ "phpunit/phpunit": "<9.5",
+ "symfony/framework-bundle": "6.4.6 || 7.0.6",
+ "symfony/var-exporter": "<6.1.1"
+ },
+ "require-dev": {
+ "behat/behat": "^3.11",
+ "behat/mink": "^1.9",
+ "doctrine/cache": "^1.11 || ^2.1",
+ "doctrine/common": "^3.2.2",
+ "doctrine/dbal": "^3.4.0",
+ "doctrine/doctrine-bundle": "^1.12 || ^2.0",
+ "doctrine/mongodb-odm": "^2.2",
+ "doctrine/mongodb-odm-bundle": "^4.0 || ^5.0",
+ "doctrine/orm": "^2.14 || ^3.0",
+ "elasticsearch/elasticsearch": "^7.11 || ^8.4",
+ "friends-of-behat/mink-browserkit-driver": "^1.3.1",
+ "friends-of-behat/mink-extension": "^2.2",
+ "friends-of-behat/symfony-extension": "^2.1",
+ "guzzlehttp/guzzle": "^6.0 || ^7.0",
+ "jangregor/phpstan-prophecy": "^1.0",
+ "justinrainbow/json-schema": "^5.2.1",
+ "phpspec/prophecy-phpunit": "^2.0",
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpdoc-parser": "^1.13",
+ "phpstan/phpstan": "^1.10",
+ "phpstan/phpstan-doctrine": "^1.0",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "phpstan/phpstan-symfony": "^1.0",
+ "phpunit/phpunit": "^9.6",
+ "psr/log": "^1.0 || ^2.0 || ^3.0",
+ "ramsey/uuid": "^3.9.7 || ^4.0",
+ "ramsey/uuid-doctrine": "^1.4 || ^2.0",
+ "sebastian/comparator": "<5.0",
+ "soyuka/contexts": "v3.3.9",
+ "soyuka/pmu": "^0.0.2",
+ "soyuka/stubs-mongodb": "^1.0",
+ "symfony/asset": "^6.4 || ^7.0",
+ "symfony/browser-kit": "^6.4 || ^7.0",
+ "symfony/cache": "^6.4 || ^7.0",
+ "symfony/config": "^6.4 || ^7.0",
+ "symfony/console": "^6.4 || ^7.0",
+ "symfony/css-selector": "^6.4 || ^7.0",
+ "symfony/dependency-injection": "^6.4 || ^7.0.12",
+ "symfony/doctrine-bridge": "^6.4 || ^7.0",
+ "symfony/dom-crawler": "^6.4 || ^7.0",
+ "symfony/error-handler": "^6.4 || ^7.0",
+ "symfony/event-dispatcher": "^6.4 || ^7.0",
+ "symfony/expression-language": "^6.4 || ^7.0",
+ "symfony/finder": "^6.4 || ^7.0",
+ "symfony/form": "^6.4 || ^7.0",
+ "symfony/framework-bundle": "^6.4 || ^7.0",
+ "symfony/http-client": "^6.4 || ^7.0",
+ "symfony/intl": "^6.4 || ^7.0",
+ "symfony/maker-bundle": "^1.24",
+ "symfony/mercure-bundle": "*",
+ "symfony/messenger": "^6.4 || ^7.0",
+ "symfony/phpunit-bridge": "^6.4.1 || ^7.0",
+ "symfony/routing": "^6.4 || ^7.0",
+ "symfony/security-bundle": "^6.4 || ^7.0",
+ "symfony/security-core": "^6.4 || ^7.0",
+ "symfony/stopwatch": "^6.4 || ^7.0",
+ "symfony/twig-bundle": "^6.4 || ^7.0",
+ "symfony/uid": "^6.4 || ^7.0",
+ "symfony/validator": "^6.4 || ^7.0",
+ "symfony/web-profiler-bundle": "^6.4 || ^7.0",
+ "symfony/yaml": "^6.4 || ^7.0",
+ "twig/twig": "^1.42.3 || ^2.12 || ^3.0",
+ "webonyx/graphql-php": "^14.0 || ^15.0"
+ },
+ "suggest": {
+ "doctrine/mongodb-odm-bundle": "To support MongoDB. Only versions 4.0 and later are supported.",
+ "elasticsearch/elasticsearch": "To support Elasticsearch.",
+ "ocramius/package-versions": "To display the API Platform's version in the debug bar.",
+ "phpstan/phpdoc-parser": "To support extracting metadata from PHPDoc.",
+ "psr/cache-implementation": "To use metadata caching.",
+ "ramsey/uuid": "To support Ramsey's UUID identifiers.",
+ "symfony/cache": "To have metadata caching when using Symfony integration.",
+ "symfony/config": "To load XML configuration files.",
+ "symfony/expression-language": "To use authorization features.",
+ "symfony/http-client": "To use the HTTP cache invalidation system.",
+ "symfony/messenger": "To support messenger integration.",
+ "symfony/security": "To use authorization features.",
+ "symfony/twig-bundle": "To use the Swagger UI integration.",
+ "symfony/uid": "To support Symfony UUID/ULID identifiers.",
+ "symfony/web-profiler-bundle": "To use the data collector.",
+ "webonyx/graphql-php": "To support GraphQL."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.3.x-dev"
+ },
+ "symfony": {
+ "require": "^6.4 || ^7.0"
+ },
+ "projects": [
+ "api-platform/doctrine-common",
+ "api-platform/doctrine-orm",
+ "api-platform/doctrine-odm",
+ "api-platform/metadata",
+ "api-platform/json-schema",
+ "api-platform/elasticsearch",
+ "api-platform/jsonld",
+ "api-platform/hydra",
+ "api-platform/openapi",
+ "api-platform/graphql",
+ "api-platform/http-cache",
+ "api-platform/documentation",
+ "api-platform/parameter-validator",
+ "api-platform/ramsey-uuid",
+ "api-platform/serializer",
+ "api-platform/state",
+ "api-platform/symfony",
+ "api-platform/validator"
+ ]
+ },
+ "autoload": {
+ "psr-4": {
+ "ApiPlatform\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kévin Dunglas",
+ "email": "kevin@dunglas.fr",
+ "homepage": "https://dunglas.fr"
+ }
+ ],
+ "description": "Build a fully-featured hypermedia or GraphQL API in minutes!",
+ "homepage": "https://api-platform.com",
+ "keywords": [
+ "Hydra",
+ "JSON-LD",
+ "api",
+ "graphql",
+ "hal",
+ "jsonapi",
+ "openapi",
+ "rest",
+ "swagger"
+ ],
+ "support": {
+ "issues": "https://github.com/api-platform/core/issues",
+ "source": "https://github.com/api-platform/core/tree/v3.3.7"
+ },
+ "time": "2024-06-28T09:35:57+00:00"
+ },
{
"name": "doctrine/cache",
"version": "2.2.0",
@@ -2209,6 +2397,62 @@
},
"time": "2019-01-08T18:20:26+00:00"
},
+ {
+ "name": "psr/link",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/link.git",
+ "reference": "84b159194ecfd7eaa472280213976e96415433f7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/link/zipball/84b159194ecfd7eaa472280213976e96415433f7",
+ "reference": "84b159194ecfd7eaa472280213976e96415433f7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.0"
+ },
+ "suggest": {
+ "fig/link-util": "Provides some useful PSR-13 utilities"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Link\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for HTTP links",
+ "homepage": "https://github.com/php-fig/link",
+ "keywords": [
+ "http",
+ "http-link",
+ "link",
+ "psr",
+ "psr-13",
+ "rest"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/link/tree/2.0.1"
+ },
+ "time": "2021-03-11T23:00:27+00:00"
+ },
{
"name": "psr/log",
"version": "3.0.0",
@@ -3300,6 +3544,69 @@
],
"time": "2024-04-18T09:32:20+00:00"
},
+ {
+ "name": "symfony/expression-language",
+ "version": "v7.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/expression-language.git",
+ "reference": "8e64bd4eb4c4dd180fc7de9c72011c49ebbdc822"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/expression-language/zipball/8e64bd4eb4c4dd180fc7de9c72011c49ebbdc822",
+ "reference": "8e64bd4eb4c4dd180fc7de9c72011c49ebbdc822",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/cache": "^6.4|^7.0",
+ "symfony/service-contracts": "^2.5|^3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\ExpressionLanguage\\": ""
+ },
+ "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": "Provides an engine that can compile and evaluate expressions",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/expression-language/tree/v7.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-05-31T14:55:39+00:00"
+ },
{
"name": "symfony/filesystem",
"version": "v7.0.8",
@@ -6219,6 +6526,89 @@
],
"time": "2024-04-18T09:29:19+00:00"
},
+ {
+ "name": "symfony/web-link",
+ "version": "v7.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/web-link.git",
+ "reference": "270f39e3d1c7cc62b5a931fd6e9f2ea4e99ee9cf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/web-link/zipball/270f39e3d1c7cc62b5a931fd6e9f2ea4e99ee9cf",
+ "reference": "270f39e3d1c7cc62b5a931fd6e9f2ea4e99ee9cf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "psr/link": "^1.1|^2.0"
+ },
+ "conflict": {
+ "symfony/http-kernel": "<6.4"
+ },
+ "provide": {
+ "psr/link-implementation": "1.0|2.0"
+ },
+ "require-dev": {
+ "symfony/http-kernel": "^6.4|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\WebLink\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kévin Dunglas",
+ "email": "dunglas@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Manages links between resources",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "dns-prefetch",
+ "http",
+ "http2",
+ "link",
+ "performance",
+ "prefetch",
+ "preload",
+ "prerender",
+ "psr13",
+ "push"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/web-link/tree/v7.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-05-31T14:55:39+00:00"
+ },
{
"name": "symfony/yaml",
"version": "v7.0.7",
@@ -6501,6 +6891,62 @@
},
"time": "2022-06-03T18:03:27+00:00"
},
+ {
+ "name": "willdurand/negotiation",
+ "version": "3.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/willdurand/Negotiation.git",
+ "reference": "68e9ea0553ef6e2ee8db5c1d98829f111e623ec2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/willdurand/Negotiation/zipball/68e9ea0553ef6e2ee8db5c1d98829f111e623ec2",
+ "reference": "68e9ea0553ef6e2ee8db5c1d98829f111e623ec2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.0"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "^5.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Negotiation\\": "src/Negotiation"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "William Durand",
+ "email": "will+git@drnd.me"
+ }
+ ],
+ "description": "Content Negotiation tools for PHP provided as a standalone library.",
+ "homepage": "http://williamdurand.fr/Negotiation/",
+ "keywords": [
+ "accept",
+ "content",
+ "format",
+ "header",
+ "negotiation"
+ ],
+ "support": {
+ "issues": "https://github.com/willdurand/Negotiation/issues",
+ "source": "https://github.com/willdurand/Negotiation/tree/3.1.0"
+ },
+ "time": "2022-01-30T20:08:53+00:00"
+ },
{
"name": "zircote/swagger-php",
"version": "4.10.0",
@@ -6585,240 +7031,1324 @@
],
"packages-dev": [
{
- "name": "nikic/php-parser",
- "version": "v5.0.2",
+ "name": "dama/doctrine-test-bundle",
+ "version": "v8.2.0",
"source": {
"type": "git",
- "url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13"
+ "url": "https://github.com/dmaicher/doctrine-test-bundle.git",
+ "reference": "1f81a280ea63f049d24e9c8ce00e557b18e0ff2f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13",
- "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13",
+ "url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/1f81a280ea63f049d24e9c8ce00e557b18e0ff2f",
+ "reference": "1f81a280ea63f049d24e9c8ce00e557b18e0ff2f",
"shasum": ""
},
"require": {
- "ext-ctype": "*",
- "ext-json": "*",
- "ext-tokenizer": "*",
- "php": ">=7.4"
+ "doctrine/dbal": "^3.3 || ^4.0",
+ "doctrine/doctrine-bundle": "^2.11.0",
+ "php": "^7.4 || ^8.0",
+ "psr/cache": "^1.0 || ^2.0 || ^3.0",
+ "symfony/cache": "^5.4 || ^6.3 || ^7.0",
+ "symfony/framework-bundle": "^5.4 || ^6.3 || ^7.0"
},
"require-dev": {
- "ircmaxell/php-yacc": "^0.0.7",
- "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+ "behat/behat": "^3.0",
+ "friendsofphp/php-cs-fixer": "^3.27",
+ "phpstan/phpstan": "^1.2",
+ "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0 || ^11.0",
+ "symfony/phpunit-bridge": "^6.3",
+ "symfony/process": "^5.4 || ^6.3 || ^7.0",
+ "symfony/yaml": "^5.4 || ^6.3 || ^7.0"
},
- "bin": [
- "bin/php-parse"
- ],
- "type": "library",
+ "type": "symfony-bundle",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "8.x-dev"
}
},
"autoload": {
"psr-4": {
- "PhpParser\\": "lib/PhpParser"
+ "DAMA\\DoctrineTestBundle\\": "src/DAMA/DoctrineTestBundle"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Nikita Popov"
+ "name": "David Maicher",
+ "email": "mail@dmaicher.de"
}
],
- "description": "A PHP parser written in PHP",
+ "description": "Symfony bundle to isolate doctrine database tests and improve test performance",
"keywords": [
- "parser",
+ "doctrine",
+ "isolation",
+ "performance",
+ "symfony",
+ "testing",
+ "tests"
+ ],
+ "support": {
+ "issues": "https://github.com/dmaicher/doctrine-test-bundle/issues",
+ "source": "https://github.com/dmaicher/doctrine-test-bundle/tree/v8.2.0"
+ },
+ "time": "2024-05-28T15:41:06+00:00"
+ },
+ {
+ "name": "doctrine/common",
+ "version": "3.4.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/common.git",
+ "reference": "0aad4b7ab7ce8c6602dfbb1e1a24581275fb9d1a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/common/zipball/0aad4b7ab7ce8c6602dfbb1e1a24581275fb9d1a",
+ "reference": "0aad4b7ab7ce8c6602dfbb1e1a24581275fb9d1a",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/persistence": "^2.0 || ^3.0",
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9.0 || ^10.0",
+ "doctrine/collections": "^1",
+ "phpstan/phpstan": "^1.4.1",
+ "phpstan/phpstan-phpunit": "^1",
+ "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0",
+ "squizlabs/php_codesniffer": "^3.0",
+ "symfony/phpunit-bridge": "^6.1",
+ "vimeo/psalm": "^4.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ },
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.",
+ "homepage": "https://www.doctrine-project.org/projects/common.html",
+ "keywords": [
+ "common",
+ "doctrine",
"php"
],
"support": {
- "issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2"
+ "issues": "https://github.com/doctrine/common/issues",
+ "source": "https://github.com/doctrine/common/tree/3.4.4"
},
- "time": "2024-03-05T20:51:40+00:00"
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcommon",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-04-16T13:35:33+00:00"
},
{
- "name": "roave/security-advisories",
- "version": "dev-latest",
+ "name": "doctrine/data-fixtures",
+ "version": "1.7.0",
"source": {
"type": "git",
- "url": "https://github.com/Roave/SecurityAdvisories.git",
- "reference": "386924e51b2e98d13dcc88bb530807046edbda90"
+ "url": "https://github.com/doctrine/data-fixtures.git",
+ "reference": "bbcb74f2ac6dbe81a14b3c3687d7623490a0448f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/386924e51b2e98d13dcc88bb530807046edbda90",
- "reference": "386924e51b2e98d13dcc88bb530807046edbda90",
+ "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/bbcb74f2ac6dbe81a14b3c3687d7623490a0448f",
+ "reference": "bbcb74f2ac6dbe81a14b3c3687d7623490a0448f",
"shasum": ""
},
+ "require": {
+ "doctrine/deprecations": "^0.5.3 || ^1.0",
+ "doctrine/persistence": "^2.0|^3.0",
+ "php": "^7.4 || ^8.0"
+ },
"conflict": {
- "3f/pygmentize": "<1.2",
- "admidio/admidio": "<4.2.13",
- "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3",
- "aheinze/cockpit": "<2.2",
- "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5",
- "airesvsg/acf-to-rest-api": "<=3.1",
- "akaunting/akaunting": "<2.1.13",
- "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53",
- "alextselegidis/easyappointments": "<1.5",
- "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1",
- "amazing/media2click": ">=1,<1.3.3",
- "amphp/artax": "<1.0.6|>=2,<2.0.6",
- "amphp/http": "<=1.7.2|>=2,<=2.1",
- "amphp/http-client": ">=4,<4.4",
- "anchorcms/anchor-cms": "<=0.12.7",
- "andreapollastri/cipi": "<=3.1.15",
- "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<1.0.2|>=2,<2.2.5",
- "apache-solr-for-typo3/solr": "<2.8.3",
- "apereo/phpcas": "<1.6",
- "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6|>=2.6,<2.7.10|>=3,<3.0.12|>=3.1,<3.1.3",
- "appwrite/server-ce": "<=1.2.1",
- "arc/web": "<3",
- "area17/twill": "<1.2.5|>=2,<2.5.3",
- "artesaos/seotools": "<0.17.2",
- "asymmetricrypt/asymmetricrypt": "<9.9.99",
- "athlon1600/php-proxy": "<=5.1",
- "athlon1600/php-proxy-app": "<=3",
- "austintoddj/canvas": "<=3.4.2",
- "automad/automad": "<=1.10.9",
- "automattic/jetpack": "<9.8",
- "awesome-support/awesome-support": "<=6.0.7",
- "aws/aws-sdk-php": "<3.288.1",
- "azuracast/azuracast": "<0.18.3",
- "backdrop/backdrop": "<1.24.2",
- "backpack/crud": "<3.4.9",
- "bacula-web/bacula-web": "<8.0.0.0-RC2-dev",
- "badaso/core": "<2.7",
- "bagisto/bagisto": "<2.1",
- "barrelstrength/sprout-base-email": "<1.2.7",
- "barrelstrength/sprout-forms": "<3.9",
- "barryvdh/laravel-translation-manager": "<0.6.2",
- "barzahlen/barzahlen-php": "<2.0.1",
- "baserproject/basercms": "<5.0.9",
- "bassjobsen/bootstrap-3-typeahead": ">4.0.2",
- "bbpress/bbpress": "<2.6.5",
- "bcosca/fatfree": "<3.7.2",
- "bedita/bedita": "<4",
- "bigfork/silverstripe-form-capture": ">=3,<3.1.1",
- "billz/raspap-webgui": "<2.9.5",
- "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3",
- "blueimp/jquery-file-upload": "==6.4.4",
- "bmarshall511/wordpress_zero_spam": "<5.2.13",
- "bolt/bolt": "<3.7.2",
- "bolt/core": "<=4.2",
- "bottelet/flarepoint": "<2.2.1",
- "bref/bref": "<2.1.17",
- "brightlocal/phpwhois": "<=4.2.5",
- "brotkrueml/codehighlight": "<2.7",
- "brotkrueml/schema": "<1.13.1|>=2,<2.5.1",
- "brotkrueml/typo3-matomo-integration": "<1.3.2",
- "buddypress/buddypress": "<7.2.1",
- "bugsnag/bugsnag-laravel": ">=2,<2.0.2",
- "bytefury/crater": "<6.0.2",
- "cachethq/cachet": "<2.5.1",
- "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10",
- "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10",
- "cardgate/magento2": "<2.0.33",
- "cardgate/woocommerce": "<=3.1.15",
- "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4",
- "cartalyst/sentry": "<=2.1.6",
- "catfan/medoo": "<1.7.5",
- "causal/oidc": "<2.1",
- "cecil/cecil": "<7.47.1",
- "centreon/centreon": "<22.10.15",
- "cesnet/simplesamlphp-module-proxystatistics": "<3.1",
- "chriskacerguis/codeigniter-restserver": "<=2.7.1",
- "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3",
- "ckeditor/ckeditor": "<4.24",
- "cockpit-hq/cockpit": "<=2.6.3|==2.7",
- "codeception/codeception": "<3.1.3|>=4,<4.1.22",
- "codeigniter/framework": "<3.1.9",
- "codeigniter4/framework": "<4.4.7",
- "codeigniter4/shield": "<1.0.0.0-beta8",
- "codiad/codiad": "<=2.8.4",
- "composer/composer": "<1.10.27|>=2,<2.2.23|>=2.3,<2.7",
- "concrete5/concrete5": "<9.2.8",
- "concrete5/core": "<8.5.8|>=9,<9.1",
- "contao-components/mediaelement": ">=2.14.2,<2.21.1",
- "contao/comments-bundle": ">=2,<4.13.40|>=5.0.0.0-RC1-dev,<5.3.4",
- "contao/contao": ">=3,<3.5.37|>=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4",
- "contao/core": "<3.5.39",
- "contao/core-bundle": "<4.13.40|>=5,<5.3.4",
- "contao/listing-bundle": ">=3,<=3.5.30|>=4,<4.4.8",
- "contao/managed-edition": "<=1.5",
- "corveda/phpsandbox": "<1.3.5",
- "cosenary/instagram": "<=2.3",
- "craftcms/cms": "<4.6.2",
- "croogo/croogo": "<4",
- "cuyz/valinor": "<0.12",
- "czproject/git-php": "<4.0.3",
- "dapphp/securimage": "<3.6.6",
- "darylldoyle/safe-svg": "<1.9.10",
- "datadog/dd-trace": ">=0.30,<0.30.2",
- "datatables/datatables": "<1.10.10",
- "david-garcia/phpwhois": "<=4.3.1",
- "dbrisinajumi/d2files": "<1",
- "dcat/laravel-admin": "<=2.1.3.0-beta",
- "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3",
- "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4",
- "desperado/xml-bundle": "<=0.1.7",
- "devgroup/dotplant": "<2020.09.14-dev",
- "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2",
- "doctrine/annotations": "<1.2.7",
- "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2",
- "doctrine/common": "<2.4.3|>=2.5,<2.5.1",
- "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2|>=3,<3.1.4",
- "doctrine/doctrine-bundle": "<1.5.2",
- "doctrine/doctrine-module": "<=0.7.1",
- "doctrine/mongodb-odm": "<1.0.2",
- "doctrine/mongodb-odm-bundle": "<3.0.1",
- "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4",
- "dolibarr/dolibarr": "<=19",
- "dompdf/dompdf": "<2.0.4",
- "doublethreedigital/guest-entries": "<3.1.2",
- "drupal/core": ">=6,<6.38|>=7,<7.96|>=8,<10.1.8|>=10.2,<10.2.2",
- "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4",
- "duncanmcclean/guest-entries": "<3.1.2",
- "dweeves/magmi": "<=0.7.24",
- "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.1.2",
- "ecodev/newsletter": "<=4",
- "ectouch/ectouch": "<=2.7.2",
- "egroupware/egroupware": "<16.1.20170922",
- "elefant/cms": "<2.0.7",
- "elgg/elgg": "<3.3.24|>=4,<4.0.5",
- "elijaa/phpmemcacheadmin": "<=1.3",
- "encore/laravel-admin": "<=1.8.19",
- "endroid/qr-code-bundle": "<3.4.2",
- "enhavo/enhavo-app": "<=0.13.1",
- "enshrined/svg-sanitize": "<0.15",
- "erusev/parsedown": "<1.7.2",
- "ether/logs": "<3.0.4",
- "evolutioncms/evolution": "<=3.2.3",
- "exceedone/exment": "<4.4.3|>=5,<5.0.3",
- "exceedone/laravel-admin": "<2.2.3|==3",
- "ezsystems/demobundle": ">=5.4,<5.4.6.1-dev",
- "ezsystems/ez-support-tools": ">=2.2,<2.2.3",
- "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1-dev",
- "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1-dev|>=5.4,<5.4.11.1-dev|>=2017.12,<2017.12.0.1-dev",
- "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24",
- "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26",
- "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1",
- "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12",
- "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.35",
- "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8",
- "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev",
- "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15",
- "ezsystems/ezplatform-user": ">=1,<1.0.1",
- "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31",
- "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.06,<=2019.03.5.1",
- "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3",
- "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15",
- "ezyang/htmlpurifier": "<4.1.1",
+ "doctrine/dbal": "<3.5 || >=5",
+ "doctrine/orm": "<2.14 || >=4",
+ "doctrine/phpcr-odm": "<1.3.0"
+ },
+ "require-dev": {
+ "doctrine/annotations": "^1.12 || ^2",
+ "doctrine/coding-standard": "^12",
+ "doctrine/dbal": "^3.5 || ^4",
+ "doctrine/mongodb-odm": "^1.3.0 || ^2.0.0",
+ "doctrine/orm": "^2.14 || ^3",
+ "ext-sqlite3": "*",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^9.6.13 || ^10.4.2",
+ "symfony/cache": "^5.4 || ^6.3 || ^7",
+ "symfony/var-exporter": "^5.4 || ^6.3 || ^7",
+ "vimeo/psalm": "^5.9"
+ },
+ "suggest": {
+ "alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)",
+ "doctrine/mongodb-odm": "For loading MongoDB ODM fixtures",
+ "doctrine/orm": "For loading ORM fixtures",
+ "doctrine/phpcr-odm": "For loading PHPCR ODM fixtures"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\DataFixtures\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ }
+ ],
+ "description": "Data Fixtures for all Doctrine Object Managers",
+ "homepage": "https://www.doctrine-project.org",
+ "keywords": [
+ "database"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/data-fixtures/issues",
+ "source": "https://github.com/doctrine/data-fixtures/tree/1.7.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdata-fixtures",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-11-24T11:18:31+00:00"
+ },
+ {
+ "name": "doctrine/doctrine-fixtures-bundle",
+ "version": "3.6.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/DoctrineFixturesBundle.git",
+ "reference": "d13a08ebf244f74c8adb8ff15aa55d01c404e534"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/d13a08ebf244f74c8adb8ff15aa55d01c404e534",
+ "reference": "d13a08ebf244f74c8adb8ff15aa55d01c404e534",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/data-fixtures": "^1.3",
+ "doctrine/doctrine-bundle": "^2.2",
+ "doctrine/orm": "^2.14.0 || ^3.0",
+ "doctrine/persistence": "^2.4|^3.0",
+ "php": "^7.4 || ^8.0",
+ "symfony/config": "^5.4|^6.0|^7.0",
+ "symfony/console": "^5.4|^6.0|^7.0",
+ "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/doctrine-bridge": "^5.4|^6.0|^7.0",
+ "symfony/http-kernel": "^5.4|^6.0|^7.0"
+ },
+ "conflict": {
+ "doctrine/dbal": "< 3"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^12",
+ "phpstan/phpstan": "^1.10.39",
+ "phpunit/phpunit": "^9.6.13",
+ "symfony/phpunit-bridge": "^6.3.6",
+ "vimeo/psalm": "^5.15"
+ },
+ "type": "symfony-bundle",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Bundle\\FixturesBundle\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Doctrine Project",
+ "homepage": "https://www.doctrine-project.org"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony DoctrineFixturesBundle",
+ "homepage": "https://www.doctrine-project.org",
+ "keywords": [
+ "Fixture",
+ "persistence"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues",
+ "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.6.1"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-fixtures-bundle",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-05-07T07:16:35+00:00"
+ },
+ {
+ "name": "liip/test-fixtures-bundle",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/liip/LiipTestFixturesBundle.git",
+ "reference": "203df6491eb0d2981317030cca06ecd598b48eda"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/liip/LiipTestFixturesBundle/zipball/203df6491eb0d2981317030cca06ecd598b48eda",
+ "reference": "203df6491eb0d2981317030cca06ecd598b48eda",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/common": "^2.13 || ^3.0",
+ "doctrine/persistence": "^1.3.3 || ^2.0 || ^3.0",
+ "php": "^8.1",
+ "symfony/deprecation-contracts": "^2.1 || ^3.0",
+ "symfony/event-dispatcher": "^5.4 || ^6.3 || ^7.0",
+ "symfony/event-dispatcher-contracts": "^1 || ^2 || ^3",
+ "symfony/framework-bundle": "^5.4 || ^6.3 || ^7.0",
+ "symfony/yaml": "^5.4 || ^6.3 || ^7.0"
+ },
+ "conflict": {
+ "doctrine/annotations": "<1.13.1 || >=3.0",
+ "doctrine/dbal": "<2.13.1 || ~3.0.0 || >=5.0",
+ "doctrine/mongodb-odm": "<2.2 || >=3.0",
+ "doctrine/orm": "<2.14 || >=4.0"
+ },
+ "require-dev": {
+ "doctrine/data-fixtures": "^1.7",
+ "doctrine/doctrine-bundle": "^2.11",
+ "doctrine/doctrine-fixtures-bundle": "^3.5.1 || ^4.0",
+ "doctrine/mongodb-odm": "^2.5",
+ "doctrine/mongodb-odm-bundle": "^4.4 || ^5.0",
+ "doctrine/orm": "^2.14 || ^3.0",
+ "monolog/monolog": "^1.25.1 || ^2.0 || ^3.0",
+ "phpunit/phpunit": "^10.5.11 || ^11.0.4",
+ "symfony/doctrine-bridge": "^5.4 || ^6.3 || ^7.0",
+ "symfony/monolog-bridge": "^5.4 || ^6.3 || ^7.0",
+ "symfony/monolog-bundle": "^3.2",
+ "theofidry/alice-data-fixtures": "^1.5.2"
+ },
+ "suggest": {
+ "doctrine/dbal": "Required when using the fixture loading functionality with an ORM and SQLite",
+ "doctrine/doctrine-fixtures-bundle": "Required when using the fixture loading functionality",
+ "doctrine/orm": "Required when using the fixture loading functionality with an ORM and SQLite",
+ "hautelook/alice-bundle": "Required when using loadFixtureFiles functionality with custom providers",
+ "theofidry/alice-data-fixtures": "Required when using loadFixtureFiles functionality"
+ },
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Liip\\TestFixturesBundle\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Liip AG",
+ "homepage": "http://www.liip.ch/"
+ },
+ {
+ "name": "Community contributions",
+ "homepage": "https://github.com/liip/LiipTestFixturesBundle/contributors"
+ }
+ ],
+ "description": "This bundles enables efficient loading of Doctrine fixtures in functional test-cases for Symfony applications",
+ "keywords": [
+ "fixtures",
+ "symfony",
+ "testing"
+ ],
+ "support": {
+ "issues": "https://github.com/liip/LiipTestFixturesBundle/issues",
+ "source": "https://github.com/liip/LiipTestFixturesBundle/tree/3.0.1"
+ },
+ "time": "2024-06-10T11:12:28+00:00"
+ },
+ {
+ "name": "masterminds/html5",
+ "version": "2.9.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Masterminds/html5-php.git",
+ "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6",
+ "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Masterminds\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Matt Butcher",
+ "email": "technosophos@gmail.com"
+ },
+ {
+ "name": "Matt Farina",
+ "email": "matt@mattfarina.com"
+ },
+ {
+ "name": "Asmir Mustafic",
+ "email": "goetas@gmail.com"
+ }
+ ],
+ "description": "An HTML5 parser and serializer.",
+ "homepage": "http://masterminds.github.io/html5-php",
+ "keywords": [
+ "HTML5",
+ "dom",
+ "html",
+ "parser",
+ "querypath",
+ "serializer",
+ "xml"
+ ],
+ "support": {
+ "issues": "https://github.com/Masterminds/html5-php/issues",
+ "source": "https://github.com/Masterminds/html5-php/tree/2.9.0"
+ },
+ "time": "2024-03-31T07:05:07+00:00"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.12.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
+ "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3 <3.2.2"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpspec/prophecy": "^1.10",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-06-12T14:39:25+00:00"
+ },
+ {
+ "name": "nikic/php-parser",
+ "version": "v5.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13",
+ "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+ },
+ "bin": [
+ "bin/php-parse"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2"
+ },
+ "time": "2024-03-05T20:51:40+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-phar": "*",
+ "ext-xmlwriter": "*",
+ "phar-io/version": "^3.0.1",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:33:53+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/3.2.1"
+ },
+ "time": "2022-02-21T01:04:05+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "9.2.31",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965",
+ "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-xmlwriter": "*",
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=7.3",
+ "phpunit/php-file-iterator": "^3.0.3",
+ "phpunit/php-text-template": "^2.0.2",
+ "sebastian/code-unit-reverse-lookup": "^2.0.2",
+ "sebastian/complexity": "^2.0",
+ "sebastian/environment": "^5.1.2",
+ "sebastian/lines-of-code": "^1.0.3",
+ "sebastian/version": "^3.0.1",
+ "theseer/tokenizer": "^1.2.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-pcov": "PHP extension that provides line coverage",
+ "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T06:37:42+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "3.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-12-02T12:48:52+00:00"
+ },
+ {
+ "name": "phpunit/php-invoker",
+ "version": "3.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-pcntl": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:58:55+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T05:33:50+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "5.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:16:10+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "9.6.19",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1a54a473501ef4cdeaae4e06891674114d79db8",
+ "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.3.1 || ^2",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "ext-xmlwriter": "*",
+ "myclabs/deep-copy": "^1.10.1",
+ "phar-io/manifest": "^2.0.3",
+ "phar-io/version": "^3.0.2",
+ "php": ">=7.3",
+ "phpunit/php-code-coverage": "^9.2.28",
+ "phpunit/php-file-iterator": "^3.0.5",
+ "phpunit/php-invoker": "^3.1.1",
+ "phpunit/php-text-template": "^2.0.3",
+ "phpunit/php-timer": "^5.0.2",
+ "sebastian/cli-parser": "^1.0.1",
+ "sebastian/code-unit": "^1.0.6",
+ "sebastian/comparator": "^4.0.8",
+ "sebastian/diff": "^4.0.3",
+ "sebastian/environment": "^5.1.3",
+ "sebastian/exporter": "^4.0.5",
+ "sebastian/global-state": "^5.0.1",
+ "sebastian/object-enumerator": "^4.0.3",
+ "sebastian/resource-operations": "^3.0.3",
+ "sebastian/type": "^3.2",
+ "sebastian/version": "^3.0.2"
+ },
+ "suggest": {
+ "ext-soap": "To be able to generate mocks based on WSDL files",
+ "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.6-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.19"
+ },
+ "funding": [
+ {
+ "url": "https://phpunit.de/sponsors.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-04-05T04:35:58+00:00"
+ },
+ {
+ "name": "roave/security-advisories",
+ "version": "dev-latest",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Roave/SecurityAdvisories.git",
+ "reference": "386924e51b2e98d13dcc88bb530807046edbda90"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/386924e51b2e98d13dcc88bb530807046edbda90",
+ "reference": "386924e51b2e98d13dcc88bb530807046edbda90",
+ "shasum": ""
+ },
+ "conflict": {
+ "3f/pygmentize": "<1.2",
+ "admidio/admidio": "<4.2.13",
+ "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3",
+ "aheinze/cockpit": "<2.2",
+ "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5",
+ "airesvsg/acf-to-rest-api": "<=3.1",
+ "akaunting/akaunting": "<2.1.13",
+ "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53",
+ "alextselegidis/easyappointments": "<1.5",
+ "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1",
+ "amazing/media2click": ">=1,<1.3.3",
+ "amphp/artax": "<1.0.6|>=2,<2.0.6",
+ "amphp/http": "<=1.7.2|>=2,<=2.1",
+ "amphp/http-client": ">=4,<4.4",
+ "anchorcms/anchor-cms": "<=0.12.7",
+ "andreapollastri/cipi": "<=3.1.15",
+ "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<1.0.2|>=2,<2.2.5",
+ "apache-solr-for-typo3/solr": "<2.8.3",
+ "apereo/phpcas": "<1.6",
+ "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6|>=2.6,<2.7.10|>=3,<3.0.12|>=3.1,<3.1.3",
+ "appwrite/server-ce": "<=1.2.1",
+ "arc/web": "<3",
+ "area17/twill": "<1.2.5|>=2,<2.5.3",
+ "artesaos/seotools": "<0.17.2",
+ "asymmetricrypt/asymmetricrypt": "<9.9.99",
+ "athlon1600/php-proxy": "<=5.1",
+ "athlon1600/php-proxy-app": "<=3",
+ "austintoddj/canvas": "<=3.4.2",
+ "automad/automad": "<=1.10.9",
+ "automattic/jetpack": "<9.8",
+ "awesome-support/awesome-support": "<=6.0.7",
+ "aws/aws-sdk-php": "<3.288.1",
+ "azuracast/azuracast": "<0.18.3",
+ "backdrop/backdrop": "<1.24.2",
+ "backpack/crud": "<3.4.9",
+ "bacula-web/bacula-web": "<8.0.0.0-RC2-dev",
+ "badaso/core": "<2.7",
+ "bagisto/bagisto": "<2.1",
+ "barrelstrength/sprout-base-email": "<1.2.7",
+ "barrelstrength/sprout-forms": "<3.9",
+ "barryvdh/laravel-translation-manager": "<0.6.2",
+ "barzahlen/barzahlen-php": "<2.0.1",
+ "baserproject/basercms": "<5.0.9",
+ "bassjobsen/bootstrap-3-typeahead": ">4.0.2",
+ "bbpress/bbpress": "<2.6.5",
+ "bcosca/fatfree": "<3.7.2",
+ "bedita/bedita": "<4",
+ "bigfork/silverstripe-form-capture": ">=3,<3.1.1",
+ "billz/raspap-webgui": "<2.9.5",
+ "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3",
+ "blueimp/jquery-file-upload": "==6.4.4",
+ "bmarshall511/wordpress_zero_spam": "<5.2.13",
+ "bolt/bolt": "<3.7.2",
+ "bolt/core": "<=4.2",
+ "bottelet/flarepoint": "<2.2.1",
+ "bref/bref": "<2.1.17",
+ "brightlocal/phpwhois": "<=4.2.5",
+ "brotkrueml/codehighlight": "<2.7",
+ "brotkrueml/schema": "<1.13.1|>=2,<2.5.1",
+ "brotkrueml/typo3-matomo-integration": "<1.3.2",
+ "buddypress/buddypress": "<7.2.1",
+ "bugsnag/bugsnag-laravel": ">=2,<2.0.2",
+ "bytefury/crater": "<6.0.2",
+ "cachethq/cachet": "<2.5.1",
+ "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10",
+ "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10",
+ "cardgate/magento2": "<2.0.33",
+ "cardgate/woocommerce": "<=3.1.15",
+ "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4",
+ "cartalyst/sentry": "<=2.1.6",
+ "catfan/medoo": "<1.7.5",
+ "causal/oidc": "<2.1",
+ "cecil/cecil": "<7.47.1",
+ "centreon/centreon": "<22.10.15",
+ "cesnet/simplesamlphp-module-proxystatistics": "<3.1",
+ "chriskacerguis/codeigniter-restserver": "<=2.7.1",
+ "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3",
+ "ckeditor/ckeditor": "<4.24",
+ "cockpit-hq/cockpit": "<=2.6.3|==2.7",
+ "codeception/codeception": "<3.1.3|>=4,<4.1.22",
+ "codeigniter/framework": "<3.1.9",
+ "codeigniter4/framework": "<4.4.7",
+ "codeigniter4/shield": "<1.0.0.0-beta8",
+ "codiad/codiad": "<=2.8.4",
+ "composer/composer": "<1.10.27|>=2,<2.2.23|>=2.3,<2.7",
+ "concrete5/concrete5": "<9.2.8",
+ "concrete5/core": "<8.5.8|>=9,<9.1",
+ "contao-components/mediaelement": ">=2.14.2,<2.21.1",
+ "contao/comments-bundle": ">=2,<4.13.40|>=5.0.0.0-RC1-dev,<5.3.4",
+ "contao/contao": ">=3,<3.5.37|>=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4",
+ "contao/core": "<3.5.39",
+ "contao/core-bundle": "<4.13.40|>=5,<5.3.4",
+ "contao/listing-bundle": ">=3,<=3.5.30|>=4,<4.4.8",
+ "contao/managed-edition": "<=1.5",
+ "corveda/phpsandbox": "<1.3.5",
+ "cosenary/instagram": "<=2.3",
+ "craftcms/cms": "<4.6.2",
+ "croogo/croogo": "<4",
+ "cuyz/valinor": "<0.12",
+ "czproject/git-php": "<4.0.3",
+ "dapphp/securimage": "<3.6.6",
+ "darylldoyle/safe-svg": "<1.9.10",
+ "datadog/dd-trace": ">=0.30,<0.30.2",
+ "datatables/datatables": "<1.10.10",
+ "david-garcia/phpwhois": "<=4.3.1",
+ "dbrisinajumi/d2files": "<1",
+ "dcat/laravel-admin": "<=2.1.3.0-beta",
+ "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3",
+ "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4",
+ "desperado/xml-bundle": "<=0.1.7",
+ "devgroup/dotplant": "<2020.09.14-dev",
+ "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2",
+ "doctrine/annotations": "<1.2.7",
+ "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2",
+ "doctrine/common": "<2.4.3|>=2.5,<2.5.1",
+ "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2|>=3,<3.1.4",
+ "doctrine/doctrine-bundle": "<1.5.2",
+ "doctrine/doctrine-module": "<=0.7.1",
+ "doctrine/mongodb-odm": "<1.0.2",
+ "doctrine/mongodb-odm-bundle": "<3.0.1",
+ "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4",
+ "dolibarr/dolibarr": "<=19",
+ "dompdf/dompdf": "<2.0.4",
+ "doublethreedigital/guest-entries": "<3.1.2",
+ "drupal/core": ">=6,<6.38|>=7,<7.96|>=8,<10.1.8|>=10.2,<10.2.2",
+ "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4",
+ "duncanmcclean/guest-entries": "<3.1.2",
+ "dweeves/magmi": "<=0.7.24",
+ "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.1.2",
+ "ecodev/newsletter": "<=4",
+ "ectouch/ectouch": "<=2.7.2",
+ "egroupware/egroupware": "<16.1.20170922",
+ "elefant/cms": "<2.0.7",
+ "elgg/elgg": "<3.3.24|>=4,<4.0.5",
+ "elijaa/phpmemcacheadmin": "<=1.3",
+ "encore/laravel-admin": "<=1.8.19",
+ "endroid/qr-code-bundle": "<3.4.2",
+ "enhavo/enhavo-app": "<=0.13.1",
+ "enshrined/svg-sanitize": "<0.15",
+ "erusev/parsedown": "<1.7.2",
+ "ether/logs": "<3.0.4",
+ "evolutioncms/evolution": "<=3.2.3",
+ "exceedone/exment": "<4.4.3|>=5,<5.0.3",
+ "exceedone/laravel-admin": "<2.2.3|==3",
+ "ezsystems/demobundle": ">=5.4,<5.4.6.1-dev",
+ "ezsystems/ez-support-tools": ">=2.2,<2.2.3",
+ "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1-dev",
+ "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1-dev|>=5.4,<5.4.11.1-dev|>=2017.12,<2017.12.0.1-dev",
+ "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24",
+ "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26",
+ "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1",
+ "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12",
+ "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.35",
+ "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8",
+ "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev",
+ "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15",
+ "ezsystems/ezplatform-user": ">=1,<1.0.1",
+ "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31",
+ "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.06,<=2019.03.5.1",
+ "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3",
+ "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15",
+ "ezyang/htmlpurifier": "<4.1.1",
"facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2",
"facturascripts/facturascripts": "<=2022.08",
"fastly/magento2": "<1.2.26",
@@ -7396,43 +8926,1376 @@
"zfr/zfr-oauth2-server-module": "<0.1.2",
"zoujingli/thinkadmin": "<=6.1.53"
},
- "default-branch": true,
- "type": "metapackage",
+ "default-branch": true,
+ "type": "metapackage",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "role": "maintainer"
+ },
+ {
+ "name": "Ilya Tribusean",
+ "email": "slash3b@gmail.com",
+ "role": "maintainer"
+ }
+ ],
+ "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it",
+ "keywords": [
+ "dev"
+ ],
+ "support": {
+ "issues": "https://github.com/Roave/SecurityAdvisories/issues",
+ "source": "https://github.com/Roave/SecurityAdvisories/tree/latest"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/Ocramius",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/roave/security-advisories",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-05-06T15:04:21+00:00"
+ },
+ {
+ "name": "sebastian/cli-parser",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
+ "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
+ "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for parsing CLI options",
+ "homepage": "https://github.com/sebastianbergmann/cli-parser",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T06:27:43+00:00"
+ },
+ {
+ "name": "sebastian/code-unit",
+ "version": "1.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit.git",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/code-unit",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:08:54+00:00"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:30:19+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "4.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "fa0f136dd2334583309d32b62544682ee972b51a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a",
+ "reference": "fa0f136dd2334583309d32b62544682ee972b51a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/diff": "^4.0",
+ "sebastian/exporter": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-09-14T12:41:17+00:00"
+ },
+ {
+ "name": "sebastian/complexity",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a",
+ "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for calculating the complexity of PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/complexity",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/complexity/issues",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-12-22T06:19:30+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "4.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc",
+ "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "symfony/process": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T06:30:58+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "5.1.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
+ "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-posix": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:03:51+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "4.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72",
+ "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T06:33:00+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "5.0.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
+ "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T06:35:11+00:00"
+ },
+ {
+ "name": "sebastian/lines-of-code",
+ "version": "1.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5",
+ "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for counting the lines of code in PHP source code",
+ "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-12-22T06:20:34+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:12:34+00:00"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:14:26+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "4.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
+ "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "https://github.com/sebastianbergmann/recursion-context",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:07:39+00:00"
+ },
+ {
+ "name": "sebastian/resource-operations",
+ "version": "3.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
+ "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides a list of PHP built-in functions that operate on resources",
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "support": {
+ "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-14T16:00:52+00:00"
+ },
+ {
+ "name": "sebastian/type",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
+ "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the types of the PHP type system",
+ "homepage": "https://github.com/sebastianbergmann/type",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/type/issues",
+ "source": "https://github.com/sebastianbergmann/type/tree/3.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:13:03+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T06:39:44+00:00"
+ },
+ {
+ "name": "symfony/browser-kit",
+ "version": "v7.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/browser-kit.git",
+ "reference": "0030d568e9147b853e168117edf72b74f9643e85"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/browser-kit/zipball/0030d568e9147b853e168117edf72b74f9643e85",
+ "reference": "0030d568e9147b853e168117edf72b74f9643e85",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "symfony/dom-crawler": "^6.4|^7.0"
+ },
+ "require-dev": {
+ "symfony/css-selector": "^6.4|^7.0",
+ "symfony/http-client": "^6.4|^7.0",
+ "symfony/mime": "^6.4|^7.0",
+ "symfony/process": "^6.4|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\BrowserKit\\": ""
+ },
+ "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": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/browser-kit/tree/v7.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-05-31T14:55:39+00:00"
+ },
+ {
+ "name": "symfony/css-selector",
+ "version": "v7.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/css-selector.git",
+ "reference": "63b9f8c9b3c28c43ad06764c67fe092af2576d17"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/63b9f8c9b3c28c43ad06764c67fe092af2576d17",
+ "reference": "63b9f8c9b3c28c43ad06764c67fe092af2576d17",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\CssSelector\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Jean-François Simon",
+ "email": "jeanfrancois.simon@sensiolabs.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Converts CSS selectors to XPath expressions",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/css-selector/tree/v7.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-05-31T14:55:39+00:00"
+ },
+ {
+ "name": "symfony/dom-crawler",
+ "version": "v7.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/dom-crawler.git",
+ "reference": "46cdbb48603db7b9ea55172d3edb6b3e9de58028"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/46cdbb48603db7b9ea55172d3edb6b3e9de58028",
+ "reference": "46cdbb48603db7b9ea55172d3edb6b3e9de58028",
+ "shasum": ""
+ },
+ "require": {
+ "masterminds/html5": "^2.6",
+ "php": ">=8.2",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-mbstring": "~1.0"
+ },
+ "require-dev": {
+ "symfony/css-selector": "^6.4|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\DomCrawler\\": ""
+ },
+ "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": "Eases DOM navigation for HTML and XML documents",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/dom-crawler/tree/v7.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-05-31T14:55:39+00:00"
+ },
+ {
+ "name": "symfony/http-client",
+ "version": "v7.0.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-client.git",
+ "reference": "10be5723e079acf878f7c4350021539e2071fac2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-client/zipball/10be5723e079acf878f7c4350021539e2071fac2",
+ "reference": "10be5723e079acf878f7c4350021539e2071fac2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "psr/log": "^1|^2|^3",
+ "symfony/http-client-contracts": "^3.4.1",
+ "symfony/service-contracts": "^2.5|^3"
+ },
+ "conflict": {
+ "php-http/discovery": "<1.15",
+ "symfony/http-foundation": "<6.4"
+ },
+ "provide": {
+ "php-http/async-client-implementation": "*",
+ "php-http/client-implementation": "*",
+ "psr/http-client-implementation": "1.0",
+ "symfony/http-client-implementation": "3.0"
+ },
+ "require-dev": {
+ "amphp/amp": "^2.5",
+ "amphp/http-client": "^4.2.1",
+ "amphp/http-tunnel": "^1.0",
+ "amphp/socket": "^1.1",
+ "guzzlehttp/promises": "^1.4|^2.0",
+ "nyholm/psr7": "^1.0",
+ "php-http/httplug": "^1.0|^2.0",
+ "psr/http-client": "^1.0",
+ "symfony/dependency-injection": "^6.4|^7.0",
+ "symfony/http-kernel": "^6.4|^7.0",
+ "symfony/messenger": "^6.4|^7.0",
+ "symfony/process": "^6.4|^7.0",
+ "symfony/stopwatch": "^6.4|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpClient\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "http"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/http-client/tree/v7.0.9"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-06-28T07:59:17+00:00"
+ },
+ {
+ "name": "symfony/http-client-contracts",
+ "version": "v3.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-client-contracts.git",
+ "reference": "20414d96f391677bf80078aa55baece78b82647d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/20414d96f391677bf80078aa55baece78b82647d",
+ "reference": "20414d96f391677bf80078aa55baece78b82647d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.5-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\HttpClient\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Test/"
+ ]
+ },
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com",
- "role": "maintainer"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
},
{
- "name": "Ilya Tribusean",
- "email": "slash3b@gmail.com",
- "role": "maintainer"
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
],
- "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it",
+ "description": "Generic abstractions related to HTTP clients",
+ "homepage": "https://symfony.com",
"keywords": [
- "dev"
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
],
"support": {
- "issues": "https://github.com/Roave/SecurityAdvisories/issues",
- "source": "https://github.com/Roave/SecurityAdvisories/tree/latest"
+ "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.0"
},
"funding": [
{
- "url": "https://github.com/Ocramius",
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
"type": "github"
},
{
- "url": "https://tidelift.com/funding/github/packagist/roave/security-advisories",
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-05-06T15:04:21+00:00"
+ "time": "2024-04-18T09:32:20+00:00"
},
{
"name": "symfony/maker-bundle",
@@ -7526,6 +10389,88 @@
],
"time": "2024-05-06T03:59:59+00:00"
},
+ {
+ "name": "symfony/phpunit-bridge",
+ "version": "v7.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/phpunit-bridge.git",
+ "reference": "8eb63f1c0e2001f97b3cd9ed550b18765cdeb1c8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/8eb63f1c0e2001f97b3cd9ed550b18765cdeb1c8",
+ "reference": "8eb63f1c0e2001f97b3cd9ed550b18765cdeb1c8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<7.5|9.1.2"
+ },
+ "require-dev": {
+ "symfony/deprecation-contracts": "^2.5|^3.0",
+ "symfony/error-handler": "^5.4|^6.4|^7.0",
+ "symfony/polyfill-php81": "^1.27"
+ },
+ "bin": [
+ "bin/simple-phpunit"
+ ],
+ "type": "symfony-bridge",
+ "extra": {
+ "thanks": {
+ "name": "phpunit/phpunit",
+ "url": "https://github.com/sebastianbergmann/phpunit"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Bridge\\PhpUnit\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/",
+ "/bin/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides utilities for PHPUnit, especially user deprecation notices management",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/phpunit-bridge/tree/v7.1.2"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-06-25T19:55:06+00:00"
+ },
{
"name": "symfony/process",
"version": "v7.0.7",
@@ -7586,6 +10531,187 @@
}
],
"time": "2024-04-18T09:29:19+00:00"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "support": {
+ "issues": "https://github.com/theseer/tokenizer/issues",
+ "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:36:25+00:00"
+ },
+ {
+ "name": "zenstruck/assert",
+ "version": "v1.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/zenstruck/assert.git",
+ "reference": "60956bb6584a51c6c2ab9fa8707b7c013d770163"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/zenstruck/assert/zipball/60956bb6584a51c6c2ab9fa8707b7c013d770163",
+ "reference": "60956bb6584a51c6c2ab9fa8707b7c013d770163",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0",
+ "symfony/polyfill-php81": "^1.23",
+ "symfony/var-exporter": "^5.4|^6.0|^7.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.4",
+ "phpunit/phpunit": "^9.5",
+ "symfony/phpunit-bridge": "^6.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Zenstruck\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kevin Bond",
+ "email": "kevinbond@gmail.com"
+ }
+ ],
+ "description": "Standalone, lightweight, framework agnostic, test assertion library.",
+ "homepage": "https://github.com/zenstruck/assert",
+ "keywords": [
+ "assertion",
+ "phpunit",
+ "test"
+ ],
+ "support": {
+ "issues": "https://github.com/zenstruck/assert/issues",
+ "source": "https://github.com/zenstruck/assert/tree/v1.5.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/kbond",
+ "type": "github"
+ }
+ ],
+ "time": "2023-12-02T09:08:04+00:00"
+ },
+ {
+ "name": "zenstruck/messenger-test",
+ "version": "v1.9.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/zenstruck/messenger-test.git",
+ "reference": "60bc93d5bb138eebabb64454065f38e53eb03eb6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/zenstruck/messenger-test/zipball/60bc93d5bb138eebabb64454065f38e53eb03eb6",
+ "reference": "60bc93d5bb138eebabb64454065f38e53eb03eb6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.2|^3.0",
+ "symfony/framework-bundle": "^5.4|^6.0|^7.0",
+ "symfony/messenger": "^5.4|^6.0|^7.0",
+ "zenstruck/assert": "^1.0"
+ },
+ "conflict": {
+ "symfony/framework-bundle": "5.4.5|6.0.5"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.4",
+ "phpunit/phpunit": "^9.6.0",
+ "symfony/browser-kit": "^5.4|^6.0|^7.0",
+ "symfony/clock": "^6.3|^7.0",
+ "symfony/phpunit-bridge": "^5.4|^6.0|^7.0",
+ "symfony/yaml": "^5.4|^6.0|^7.0"
+ },
+ "suggest": {
+ "symfony/clock": "A PSR-20 clock implementation in order to support DelayStamp."
+ },
+ "type": "symfony-bundle",
+ "autoload": {
+ "psr-4": {
+ "Zenstruck\\Messenger\\Test\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kevin Bond",
+ "email": "kevinbond@gmail.com"
+ }
+ ],
+ "description": "Assertions and helpers for testing your symfony/messenger queues.",
+ "homepage": "https://github.com/zenstruck/messenger-test",
+ "keywords": [
+ "Messenger",
+ "dev",
+ "queue",
+ "symfony",
+ "test"
+ ],
+ "support": {
+ "issues": "https://github.com/zenstruck/messenger-test/issues",
+ "source": "https://github.com/zenstruck/messenger-test/tree/v1.9.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/kbond",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-21T15:59:49+00:00"
}
],
"aliases": [],
diff --git a/app/config/bundles.php b/app/config/bundles.php
index facf965f4101e598e0514bd9d9c077d78f6c72a2..e5e468c5b16a67b458b0eda87cc65fb41120d164 100644
--- a/app/config/bundles.php
+++ b/app/config/bundles.php
@@ -11,4 +11,9 @@ return [
Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true],
+ ApiPlatform\Symfony\Bundle\ApiPlatformBundle::class => ['all' => true],
+ Zenstruck\Messenger\Test\ZenstruckMessengerTestBundle::class => ['test' => true],
+ DAMA\DoctrineTestBundle\DAMADoctrineTestBundle::class => ['test' => true],
+ Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true],
+ Liip\TestFixturesBundle\LiipTestFixturesBundle::class => ['dev' => true, 'test' => true],
];
diff --git a/app/config/packages/api_platform.yaml b/app/config/packages/api_platform.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d417dae31cc5d5c68bf04751f96ca8834847e4c3
--- /dev/null
+++ b/app/config/packages/api_platform.yaml
@@ -0,0 +1,23 @@
+api_platform:
+ title: Hello API Platform
+ version: 1.0.0
+ formats:
+ jsonld: ['application/ld+json']
+ docs_formats:
+ jsonld: ['application/ld+json']
+ jsonopenapi: ['application/vnd.openapi+json']
+ html: ['text/html']
+ defaults:
+ stateless: true
+ cache_headers:
+ vary: ['Content-Type', 'Authorization', 'Origin']
+ extra_properties:
+ standard_put: true
+ rfc_7807_compliant_errors: true
+ keep_legacy_inflector: false
+ use_symfony_listeners: true
+# enable_swagger: false
+ enable_entrypoint: false
+ enable_docs: false
+ enable_swagger_ui: false
+ enable_re_doc: false
diff --git a/app/config/packages/dama_doctrine_test_bundle.yaml b/app/config/packages/dama_doctrine_test_bundle.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..3482cbae1cfdc54115f59e840b88092c2844265a
--- /dev/null
+++ b/app/config/packages/dama_doctrine_test_bundle.yaml
@@ -0,0 +1,5 @@
+when@test:
+ dama_doctrine_test:
+ enable_static_connection: true
+ enable_static_meta_data_cache: true
+ enable_static_query_cache: true
diff --git a/app/config/packages/messenger.yaml b/app/config/packages/messenger.yaml
index bf8155995e5d4207c7a728ce63f471eda6bbb02d..1ebb3d1f70856a68a7d60fb3fef4f4bfd27c6afe 100644
--- a/app/config/packages/messenger.yaml
+++ b/app/config/packages/messenger.yaml
@@ -4,8 +4,6 @@ framework:
# failure_transport: failed
transports:
- sync: 'sync://'
-
send_transport:
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
options:
@@ -35,10 +33,13 @@ framework:
serializer:
default_serializer: messenger.transport.symfony_serializer
-# when@test:
-# framework:
-# messenger:
-# transports:
-# # replace with your transport name here (e.g., my_transport: 'in-memory://')
-# # For more Messenger testing tools, see https://github.com/zenstruck/messenger-test
-# async: 'in-memory://'
+when@test:
+ framework:
+ messenger:
+ transports:
+ # replace with your transport name here (e.g., my_transport: 'in-memory://')
+ # For more Messenger testing tools, see https://github.com/zenstruck/messenger-test
+ send_transport: 'test://'
+ routing:
+ 'App\Messenger\Message\SendMessage': send_transport
+ 'App\Messenger\Message\QuestMessage': send_transport
diff --git a/app/config/routes/api_platform.yaml b/app/config/routes/api_platform.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..38f11cba851fd17ed81398d13694267eacb21a59
--- /dev/null
+++ b/app/config/routes/api_platform.yaml
@@ -0,0 +1,4 @@
+api_platform:
+ resource: .
+ type: api_platform
+ prefix: /api
diff --git a/app/phpunit.xml.dist b/app/phpunit.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..01988de2b63f39fccfbbb6510eefb94314d43b17
--- /dev/null
+++ b/app/phpunit.xml.dist
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tests
+
+
+
+
+
+ src
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/ApiResource/.gitignore b/app/src/ApiResource/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/app/src/Controller/AuthController.php b/app/src/Controller/AuthController.php
index 7805307c8934ff982ce20ccfd44d5381d3e5c17d..4ea6047e57fb9bb32cbe029c8d78258bdb3a287e 100644
--- a/app/src/Controller/AuthController.php
+++ b/app/src/Controller/AuthController.php
@@ -23,23 +23,6 @@ use OpenApi\Attributes as OA;
#[OA\Tag(name: 'Авторизация')]
class AuthController extends AbstractController
{
- #[Route('/login', name: 'get_token', methods: ['POST'])]
- #[OA\RequestBody(
- content: new OA\JsonContent(ref: new Model(type: LoginDto::class))
- )]
- #[OA\Response(
- response: 200,
- description: 'Ответ',
- content: new OA\JsonContent(
- ref: new Model(type: TokenResponse::class, groups: ["message", "data"])
- )
- )]
- #[Security(name: null)]
- public function getToken()
- {
- // Заглушка для Swagger
- }
-
#[Route('/register', name: 'register', methods: ['POST'])]
#[OA\RequestBody(
content: new OA\JsonContent(ref: new Model(type: RegisterDto::class))
diff --git a/app/src/DataFixtures/AppFixtures.php b/app/src/DataFixtures/AppFixtures.php
new file mode 100644
index 0000000000000000000000000000000000000000..987f6fe955c778c958d11e0929d0f2526f821bb1
--- /dev/null
+++ b/app/src/DataFixtures/AppFixtures.php
@@ -0,0 +1,17 @@
+persist($product);
+
+ $manager->flush();
+ }
+}
diff --git a/app/src/DataFixtures/GenreFixture.php b/app/src/DataFixtures/GenreFixture.php
new file mode 100644
index 0000000000000000000000000000000000000000..b6dcf993888a667560a0b4289ff2994ae17e69bd
--- /dev/null
+++ b/app/src/DataFixtures/GenreFixture.php
@@ -0,0 +1,37 @@
+setName($value);
+ $genre->setDate(new \DateTime());
+ $manager->persist($genre);
+ }
+
+ $manager->flush();
+ }
+
+ public static function getGroups(): array
+ {
+ return ['main', 'test'];
+ }
+}
diff --git a/app/src/DataFixtures/QuestFixture.php b/app/src/DataFixtures/QuestFixture.php
new file mode 100644
index 0000000000000000000000000000000000000000..79ed7218cc95607d9baee74ffd7aae2697710c41
--- /dev/null
+++ b/app/src/DataFixtures/QuestFixture.php
@@ -0,0 +1,54 @@
+setName('Тестовый квест');
+ $quest->setShortDescription('Краткое описание тестового квеста');
+ $quest->setFullDescription('Полное описание тестового квеста');
+ $quest->setMaxAppointments(6);
+ $quest->setDate((new \DateTime())->add(new DateInterval('P10D')));
+ $quest->setFinalDate((new \DateTime())->add(new DateInterval('P5D')));
+
+ $genreManager = $manager->getRepository(Genre::class);
+ $genres = $genreManager->findAll();
+ if (!empty($genres)) {
+ $quest->setGenre(reset($genres));
+ }
+
+ $themeManager = $manager->getRepository(Theme::class);
+ $themes = $themeManager->findAll();
+ if (!empty($themes)) {
+ $quest->setTheme(reset($themes));
+ }
+
+ $tagManager = $manager->getRepository(Tag::class);
+ $tags = $tagManager->findAll();
+ if (!empty($tags)) {
+ foreach ($tags as $tag) {
+ $quest->addTag($tag);
+ }
+ }
+
+ $manager->persist($quest);
+ $manager->flush();
+ }
+
+ public static function getGroups(): array
+ {
+ return ['test'];
+ }
+}
\ No newline at end of file
diff --git a/app/src/DataFixtures/TagsFixture.php b/app/src/DataFixtures/TagsFixture.php
new file mode 100644
index 0000000000000000000000000000000000000000..42f36498e4caec36869c446d879e5bdfae968e92
--- /dev/null
+++ b/app/src/DataFixtures/TagsFixture.php
@@ -0,0 +1,35 @@
+setName($value);
+ $tag->setDate(new \DateTime());
+ $manager->persist($tag);
+ }
+
+ $manager->flush();
+ }
+
+ public static function getGroups(): array
+ {
+ return ['main', 'test'];
+ }
+}
diff --git a/app/src/DataFixtures/ThemesFixture.php b/app/src/DataFixtures/ThemesFixture.php
new file mode 100644
index 0000000000000000000000000000000000000000..a0c0b0fca4f0ebfa86145ffc5a696e0e5f39d62f
--- /dev/null
+++ b/app/src/DataFixtures/ThemesFixture.php
@@ -0,0 +1,40 @@
+setName($value);
+ $theme->setDate(new \DateTime());
+ $manager->persist($theme);
+ }
+
+
+ $manager->flush();
+ }
+
+ public static function getGroups(): array
+ {
+ return ['main', 'test'];
+ }
+}
diff --git a/app/src/DataFixtures/UserFixture.php b/app/src/DataFixtures/UserFixture.php
new file mode 100644
index 0000000000000000000000000000000000000000..d6dec7efbc69d01ec0a981c8d08bdecc1805f57a
--- /dev/null
+++ b/app/src/DataFixtures/UserFixture.php
@@ -0,0 +1,41 @@
+setName('Тест');
+ $user->setSurname('Тестов');
+ $user->setEmail(self::EMAIL);
+ $passwordHash = $this->passwordHasher->hashPassword($user, self::PASSWORD);
+ $user->setPassword($passwordHash);
+ $user->setConfirm(true);
+ $user->setDeleted(false);
+ $manager->persist($user);
+
+ $manager->flush();
+ }
+
+ public static function getGroups(): array
+ {
+ return ['test'];
+ }
+}
diff --git a/app/src/Entity/Appointment.php b/app/src/Entity/Appointment.php
index 77eaeefb3b7279ab0462c92314af52f577257df8..1f6787c2472e9ef5b15da41794592e8c07137860 100644
--- a/app/src/Entity/Appointment.php
+++ b/app/src/Entity/Appointment.php
@@ -11,7 +11,7 @@ use Symfony\Component\Serializer\Annotation\Groups;
class Appointment
{
#[ORM\Id]
- #[ORM\GeneratedValue]
+ #[ORM\GeneratedValue(strategy: 'SEQUENCE')]
#[ORM\Column]
private ?int $id = null;
diff --git a/app/src/Entity/Favorite.php b/app/src/Entity/Favorite.php
index 16d9e4de58ed268375f125d0e1d41ccf46c4691a..e5bf1b4afcee5486a2063a60d84849c3515dadd9 100644
--- a/app/src/Entity/Favorite.php
+++ b/app/src/Entity/Favorite.php
@@ -11,7 +11,7 @@ use Symfony\Component\Serializer\Annotation\Groups;
class Favorite
{
#[ORM\Id]
- #[ORM\GeneratedValue]
+ #[ORM\GeneratedValue(strategy: 'SEQUENCE')]
#[ORM\Column]
private ?int $id = null;
diff --git a/app/src/Entity/Genre.php b/app/src/Entity/Genre.php
index efc906337330fd5a2b2b470944f4e5e8e615b33f..50ccaaecc1849a879061251bc3f74b6cf028104c 100644
--- a/app/src/Entity/Genre.php
+++ b/app/src/Entity/Genre.php
@@ -11,7 +11,7 @@ use Symfony\Component\Serializer\Annotation\Groups;
class Genre
{
#[ORM\Id]
- #[ORM\GeneratedValue]
+ #[ORM\GeneratedValue(strategy: 'SEQUENCE')]
#[ORM\Column]
private ?int $id = null;
diff --git a/app/src/Entity/Like.php b/app/src/Entity/Like.php
index ec6a2be82b71925b2e246f77c41f9ce3a517564b..b882bd6948a4cc99fee628505d72a7092914ffa1 100644
--- a/app/src/Entity/Like.php
+++ b/app/src/Entity/Like.php
@@ -12,7 +12,7 @@ use Symfony\Component\Serializer\Annotation\Groups;
class Like
{
#[ORM\Id]
- #[ORM\GeneratedValue]
+ #[ORM\GeneratedValue(strategy: 'SEQUENCE')]
#[ORM\Column]
private ?int $id = null;
diff --git a/app/src/Entity/Quest.php b/app/src/Entity/Quest.php
index cbe969605c980fc88756f6c0c42b0e65c497158c..e05c974bc7e1ceb504642bebd2450bdd5c39f562 100644
--- a/app/src/Entity/Quest.php
+++ b/app/src/Entity/Quest.php
@@ -13,7 +13,7 @@ use Symfony\Component\Serializer\Annotation\Groups;
class Quest
{
#[ORM\Id]
- #[ORM\GeneratedValue]
+ #[ORM\GeneratedValue(strategy: 'SEQUENCE')]
#[ORM\Column]
private ?int $id = null;
diff --git a/app/src/Entity/QuestImage.php b/app/src/Entity/QuestImage.php
index 4e7513cb07ca676758240f4f0f356d4ce2d2aea4..bfc5351115cba10c43503c835cc88298abe677e0 100644
--- a/app/src/Entity/QuestImage.php
+++ b/app/src/Entity/QuestImage.php
@@ -10,7 +10,7 @@ use Symfony\Component\Serializer\Annotation\Groups;
class QuestImage
{
#[ORM\Id]
- #[ORM\GeneratedValue]
+ #[ORM\GeneratedValue(strategy: 'SEQUENCE')]
#[ORM\Column]
private ?int $id = null;
diff --git a/app/src/Entity/Review.php b/app/src/Entity/Review.php
index 3d384446a0a75b9443d641e78f62679e5917ef10..5f7fbd3269035060dbea53de42c29a14877e76c0 100644
--- a/app/src/Entity/Review.php
+++ b/app/src/Entity/Review.php
@@ -13,7 +13,7 @@ use Symfony\Component\Serializer\Annotation\Groups;
class Review
{
#[ORM\Id]
- #[ORM\GeneratedValue]
+ #[ORM\GeneratedValue(strategy: 'SEQUENCE')]
#[ORM\Column]
private ?int $id = null;
diff --git a/app/src/Entity/Tag.php b/app/src/Entity/Tag.php
index 0bbbd7e1bac2c544797708501df3872c8105bbe4..325a24595e335300b7c1733a96a6508bd3c8a1c1 100644
--- a/app/src/Entity/Tag.php
+++ b/app/src/Entity/Tag.php
@@ -13,7 +13,7 @@ use Symfony\Component\Serializer\Annotation\Groups;
class Tag
{
#[ORM\Id]
- #[ORM\GeneratedValue]
+ #[ORM\GeneratedValue(strategy: 'SEQUENCE')]
#[ORM\Column]
private ?int $id = null;
diff --git a/app/src/Entity/Theme.php b/app/src/Entity/Theme.php
index 9c898aca619ad086c54e0a58d3e39da66927e8f7..0b2810d4ca839b75e8a85324ca26f2fb79e4b382 100644
--- a/app/src/Entity/Theme.php
+++ b/app/src/Entity/Theme.php
@@ -11,7 +11,7 @@ use Symfony\Component\Serializer\Annotation\Groups;
class Theme
{
#[ORM\Id]
- #[ORM\GeneratedValue]
+ #[ORM\GeneratedValue(strategy: 'SEQUENCE')]
#[ORM\Column]
private ?int $id = null;
diff --git a/app/src/Entity/User.php b/app/src/Entity/User.php
index 811175c9f797512298267eeb4b20e55172b7be8b..58ff031bb9587c97c357fb873359ed2b04f38b48 100644
--- a/app/src/Entity/User.php
+++ b/app/src/Entity/User.php
@@ -27,7 +27,7 @@ use Symfony\Component\Validator\Constraints as Assert;
class User implements UserInterface, PasswordAuthenticatedUserInterface
{
#[ORM\Id]
- #[ORM\GeneratedValue]
+ #[ORM\GeneratedValue(strategy: 'SEQUENCE')]
#[ORM\Column]
private ?int $id = null;
diff --git a/app/src/Entity/UserCode.php b/app/src/Entity/UserCode.php
index a338b610e23250121bdbe4fa4feba2b6199ae893..c949638b4d9185f7db60b9205258a8a7ce42922a 100644
--- a/app/src/Entity/UserCode.php
+++ b/app/src/Entity/UserCode.php
@@ -10,7 +10,7 @@ use Doctrine\ORM\Mapping as ORM;
class UserCode
{
#[ORM\Id]
- #[ORM\GeneratedValue]
+ #[ORM\GeneratedValue(strategy: 'SEQUENCE')]
#[ORM\Column]
private ?int $id = null;
diff --git a/app/src/Entity/UserHistory.php b/app/src/Entity/UserHistory.php
index 3cf93def581c33585fe33a42911b65e3b4db13c4..102d3921c803208c42d2b5b0d414b76b8158683c 100644
--- a/app/src/Entity/UserHistory.php
+++ b/app/src/Entity/UserHistory.php
@@ -17,7 +17,7 @@ class UserHistory
public const TYPE_RECOVERY = 'recovery';
#[ORM\Id]
- #[ORM\GeneratedValue]
+ #[ORM\GeneratedValue(strategy: 'SEQUENCE')]
#[ORM\Column]
private ?int $id = null;
diff --git a/app/src/Entity/UserImage.php b/app/src/Entity/UserImage.php
index 0716a4985059d5b9b43017d42db3138a144bd2a7..72bdc2450ecc637928ffa776495e480d8be89a9d 100644
--- a/app/src/Entity/UserImage.php
+++ b/app/src/Entity/UserImage.php
@@ -10,7 +10,7 @@ use Symfony\Component\Serializer\Annotation\Groups;
class UserImage
{
#[ORM\Id]
- #[ORM\GeneratedValue]
+ #[ORM\GeneratedValue(strategy: 'SEQUENCE')]
#[ORM\Column]
private ?int $id = null;
diff --git a/app/src/Repository/QuestRepository.php b/app/src/Repository/QuestRepository.php
index e44dfde606e8afb8a08a632cc9025e1faffe3d55..d4c382effadb3d3f7b2e7a462d91b042154b269e 100644
--- a/app/src/Repository/QuestRepository.php
+++ b/app/src/Repository/QuestRepository.php
@@ -51,14 +51,16 @@ class QuestRepository extends ServiceEntityRepository
return $queryBuilder->getQuery()->getResult();
}
- public function findOneById(int $id, int $userId): ?Quest
+ public function findOneById(int $id, int $userId, bool $cache = true): ?Quest
{
$queryBuilder = $this->getBaseQuery($userId);
$queryBuilder->setParameter('detail_id', $id)
->andWhere('q.id = :detail_id');
- return $queryBuilder->getQuery()
- ->enableResultCache(3600, $id)
- ->getOneOrNullResult();
+ $query = $queryBuilder->getQuery();
+ if ($cache) {
+ $query->enableResultCache(3600, $id);
+ }
+ return $query->getOneOrNullResult();
}
private function getBaseQuery(int $userId): QueryBuilder
diff --git a/app/src/Service/Action/Classes/SubscribeQuest.php b/app/src/Service/Action/Classes/SubscribeQuest.php
index f7a460bc09fc5fc92af8b104a97418ee2593649a..f2b6fd77788c77b6fb2a1eecaa6e4810f3d737d2 100644
--- a/app/src/Service/Action/Classes/SubscribeQuest.php
+++ b/app/src/Service/Action/Classes/SubscribeQuest.php
@@ -28,7 +28,7 @@ class SubscribeQuest extends UserBaseActionService
$dto = $this->getDto();
if ($dto->id && $this->user->getId()) {
/** @var Quest|null $quest */
- $quest = $this->doctrine->getRepository(Quest::class)->findOneById($dto->id, $this->user->getId());
+ $quest = $this->doctrine->getRepository(Quest::class)->findOneById($dto->id, $this->user->getId(), false);
if ($quest) {
if ($quest->getAppointmentCount() >= $quest->getMaxAppointments()) {
$this->responseService->addError('Максимальное количество участников');
diff --git a/app/src/Service/Action/Classes/UnsubscribeQuest.php b/app/src/Service/Action/Classes/UnsubscribeQuest.php
index 34b7ac70a71b18a5c2863633571160a13dd2c9c1..bc51aaf64a6230e6c434c5f339fac1e0a7055390 100644
--- a/app/src/Service/Action/Classes/UnsubscribeQuest.php
+++ b/app/src/Service/Action/Classes/UnsubscribeQuest.php
@@ -26,7 +26,7 @@ class UnsubscribeQuest extends UserBaseActionService
/** @var IdDto $dto */
$dto = $this->getDto();
if ($dto->id && $this->user->getId()) {
- $quest = $this->doctrine->getRepository(Quest::class)->findOneById($dto->id, $this->user->getId());
+ $quest = $this->doctrine->getRepository(Quest::class)->findOneById($dto->id, $this->user->getId(), false);
if ($quest) {
if (new \DateTime() > $quest->getFinalDate()) {
$this->responseService->addError('Время записи на квест окончено, отписаться нельзя');
diff --git a/app/src/Service/Send/Classes/Code/PasswordCodeSendService.php b/app/src/Service/Send/Classes/Code/PasswordCodeSendService.php
index 041b3357811183b09d780d5eb6060e1a7d8a6249..ca58428887e6425f7726d753f800d70c2fd8dc83 100644
--- a/app/src/Service/Send/Classes/Code/PasswordCodeSendService.php
+++ b/app/src/Service/Send/Classes/Code/PasswordCodeSendService.php
@@ -17,7 +17,7 @@ class PasswordCodeSendService extends CodeSendService
{
return <<Уважаемый {surname} {name} {patronymic}
-
Ваш код для восстановления пароля: {code}
+ Ваш код для восстановления пароля: {code}
Время действия кода: {time}
HTML;
}
diff --git a/app/src/Service/Send/Classes/Code/RecoveryCodeSendService.php b/app/src/Service/Send/Classes/Code/RecoveryCodeSendService.php
index 306e169b1b30edadd00fa8edb5009e33cb1b2f0a..c7d3ef5cfe096ce8420e9a4e46e3d3bef23c346d 100644
--- a/app/src/Service/Send/Classes/Code/RecoveryCodeSendService.php
+++ b/app/src/Service/Send/Classes/Code/RecoveryCodeSendService.php
@@ -17,7 +17,7 @@ class RecoveryCodeSendService extends CodeSendService
{
return <<Уважаемый {surname} {name} {patronymic}
- Ваш код для восстановления: {code}
+ Ваш код для восстановления: {code}
Время действия кода: {time}
HTML;
}
diff --git a/app/src/Service/Send/Classes/Code/RegisterCodeSendService.php b/app/src/Service/Send/Classes/Code/RegisterCodeSendService.php
index 4a3dbb9d77fd3218182e15dc5dfeba7605f90fe0..6620ce8c3cda21778e5d896bc79621342ee04ee7 100644
--- a/app/src/Service/Send/Classes/Code/RegisterCodeSendService.php
+++ b/app/src/Service/Send/Classes/Code/RegisterCodeSendService.php
@@ -17,7 +17,7 @@ class RegisterCodeSendService extends CodeSendService
{
return <<Уважаемый {surname} {name} {patronymic}
- Ваш код для подтверждения: {code}
+ Ваш код для подтверждения: {code}
Время действия кода: {time}
HTML;
}
diff --git a/app/src/Service/Send/Classes/CodeSendService.php b/app/src/Service/Send/Classes/CodeSendService.php
index 1aafc513aa49feb8ae43ae60e6f5e7110991eec8..e079f31b7022b8750e0c8b204aef01e7abbb89f2 100644
--- a/app/src/Service/Send/Classes/CodeSendService.php
+++ b/app/src/Service/Send/Classes/CodeSendService.php
@@ -43,7 +43,7 @@ class CodeSendService implements SendServiceInterface
public function getBody(): string
{
- return '{code}';
+ return '{code}';
}
public function send(): void
diff --git a/app/symfony.lock b/app/symfony.lock
index ceb121029f701bf0d1f19deee43a26acdbd03db3..a76ca5fdbea3cd3f97b3d84d2eb0a5ef20db12dd 100644
--- a/app/symfony.lock
+++ b/app/symfony.lock
@@ -1,4 +1,30 @@
{
+ "api-platform/core": {
+ "version": "3.3",
+ "recipe": {
+ "repo": "github.com/symfony/recipes",
+ "branch": "main",
+ "version": "3.3",
+ "ref": "74b45ac570c57eb1fbe56c984091a9ff87e18bab"
+ },
+ "files": [
+ "config/packages/api_platform.yaml",
+ "config/routes/api_platform.yaml",
+ "src/ApiResource/.gitignore"
+ ]
+ },
+ "dama/doctrine-test-bundle": {
+ "version": "8.2",
+ "recipe": {
+ "repo": "github.com/symfony/recipes-contrib",
+ "branch": "main",
+ "version": "7.2",
+ "ref": "896306d79d4ee143af9eadf9b09fd34a8c391b70"
+ },
+ "files": [
+ "config/packages/dama_doctrine_test_bundle.yaml"
+ ]
+ },
"doctrine/doctrine-bundle": {
"version": "2.12",
"recipe": {
@@ -13,6 +39,18 @@
"src/Repository/.gitignore"
]
},
+ "doctrine/doctrine-fixtures-bundle": {
+ "version": "3.6",
+ "recipe": {
+ "repo": "github.com/symfony/recipes",
+ "branch": "main",
+ "version": "3.0",
+ "ref": "1f5514cfa15b947298df4d771e694e578d4c204d"
+ },
+ "files": [
+ "src/DataFixtures/AppFixtures.php"
+ ]
+ },
"doctrine/doctrine-migrations-bundle": {
"version": "3.3",
"recipe": {
@@ -38,6 +76,9 @@
"config/packages/lexik_jwt_authentication.yaml"
]
},
+ "liip/test-fixtures-bundle": {
+ "version": "3.0.1"
+ },
"nelmio/api-doc-bundle": {
"version": "4.27",
"recipe": {
@@ -63,6 +104,20 @@
"config/packages/nelmio_cors.yaml"
]
},
+ "phpunit/phpunit": {
+ "version": "9.6",
+ "recipe": {
+ "repo": "github.com/symfony/recipes",
+ "branch": "main",
+ "version": "9.6",
+ "ref": "7364a21d87e658eb363c5020c072ecfdc12e2326"
+ },
+ "files": [
+ ".env.test",
+ "phpunit.xml.dist",
+ "tests/bootstrap.php"
+ ]
+ },
"symfony/console": {
"version": "7.0",
"recipe": {
@@ -139,6 +194,21 @@
"config/packages/messenger.yaml"
]
},
+ "symfony/phpunit-bridge": {
+ "version": "7.1",
+ "recipe": {
+ "repo": "github.com/symfony/recipes",
+ "branch": "main",
+ "version": "6.3",
+ "ref": "a411a0480041243d97382cac7984f7dce7813c08"
+ },
+ "files": [
+ ".env.test",
+ "bin/phpunit",
+ "phpunit.xml.dist",
+ "tests/bootstrap.php"
+ ]
+ },
"symfony/routing": {
"version": "7.0",
"recipe": {
@@ -192,5 +262,14 @@
},
"twig/extra-bundle": {
"version": "v3.10.0"
+ },
+ "zenstruck/messenger-test": {
+ "version": "1.9",
+ "recipe": {
+ "repo": "github.com/symfony/recipes",
+ "branch": "main",
+ "version": "1.7",
+ "ref": "e0d2a904cd584d15bcbb4c4a011549840bc01daf"
+ }
}
}
diff --git a/app/tests/QuestsTest.php b/app/tests/QuestsTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b97d381a3e43f4ceb1667944a89ed3344d534c01
--- /dev/null
+++ b/app/tests/QuestsTest.php
@@ -0,0 +1,315 @@
+loadFixtures();
+
+ $this->login();
+ }
+
+ /**
+ * Тестирование избранного
+ *
+ * @return void
+ *
+ * @throws TransportExceptionInterface
+ */
+ public function testFavorite(): void
+ {
+ $this->testFavoriteAdd();
+ $this->testFavoriteRemove();
+ }
+
+ /**
+ * Добавление квеста в избранное
+ *
+ * @return void
+ *
+ * @throws TransportExceptionInterface
+ */
+ private function testFavoriteAdd(): void
+ {
+ $request = [
+ 'id' => self::$questId,
+ ];
+
+ $this->request('/api/quest/favorite/add', $request);
+
+ /** @var FavoriteRepository $favoriteRepository */
+ $favoriteRepository = static::getContainer()->get(FavoriteRepository::class);
+ if ($favorite = $favoriteRepository->find(1)) {
+ $quest = $favorite->getQuest();
+ $user = $favorite->getRelatedUser();
+ if ($quest && $user) {
+ if ($quest->getId() !== self::$questId || $user->getId() !== 1) {
+ self::fail('Не добавлено в избранное');
+ }
+ } else {
+ self::fail('Не добавлено в избранное');
+ }
+ } else {
+ self::fail('Не добавлено в избранное');
+ }
+ }
+
+ /**
+ * Удаление квеста из избранного
+ *
+ * @return void
+ *
+ * @throws TransportExceptionInterface
+ */
+ private function testFavoriteRemove(): void
+ {
+ $request = [
+ 'id' => self::$questId,
+ ];
+
+ $this->request('/api/quest/favorite/remove', $request);
+
+ /** @var FavoriteRepository $favoriteRepository */
+ $favoriteRepository = static::getContainer()->get(FavoriteRepository::class);
+ if ($favoriteRepository->find(1)) {
+ self::fail('Не удалено из избранного');
+ }
+ }
+
+ /**
+ * Тестирование записи на квест
+ *
+ * @return void
+ *
+ * @throws TransportExceptionInterface
+ */
+ public function testSubscribe(): void
+ {
+ $this->testQuestSubscribe();
+ $this->testQuestUnsubscribe();
+ }
+
+ /**
+ * Запись на квест
+ *
+ * @return void
+ *
+ * @throws TransportExceptionInterface
+ */
+ private function testQuestSubscribe(): void
+ {
+ $request = [
+ 'id' => self::$questId,
+ ];
+
+ $this->request('/api/quest/subscribe', $request);
+
+ /** @var AppointmentRepository $appointmentRepository */
+ $appointmentRepository = static::getContainer()->get(AppointmentRepository::class);
+ if (!$appointmentRepository->find(1)) {
+ self::fail('Запись на квест не добавлена');
+ }
+ }
+
+ /**
+ * Отмена записи на квест
+ *
+ * @return void
+ *
+ * @throws TransportExceptionInterface
+ */
+ private function testQuestUnsubscribe(): void
+ {
+ $request = [
+ 'id' => self::$questId,
+ ];
+
+ $this->request('/api/quest/unsubscribe', $request);
+ /** @var AppointmentRepository $appointmentRepository */
+ $appointmentRepository = static::getContainer()->get(AppointmentRepository::class);
+ if ($appointmentRepository->find(1)) {
+ self::fail('Запись на квест не отменена');
+ }
+ }
+
+ /**
+ * Тестирование отзывов
+ *
+ * @return void
+ *
+ * @throws TransportExceptionInterface
+ */
+ public function testReview(): void
+ {
+ $this->testReviewAdd();
+ $this->testReviewUpdate();
+ $this->testReviewRemove();
+ }
+
+ /**
+ * Добавление отзыва на квест
+ *
+ * @return void
+ *
+ * @throws TransportExceptionInterface
+ */
+ private function testReviewAdd(): void
+ {
+ $request = [
+ 'text' => 'Отзыв на квест',
+ 'quest_id' => self::$questId,
+ 'rating' => rand(1, 10),
+ ];
+
+ $this->request('/api/quest/review/create', $request);
+
+ /** @var ReviewRepository $reviewRepository */
+ $reviewRepository = static::getContainer()->get(ReviewRepository::class);
+ if (!$reviewRepository->find(1)) {
+ self::fail('Отзыв не добавлен');
+ }
+ }
+
+ /**
+ * Обновление отзыва квеста
+ *
+ * @return void
+ *
+ * @throws TransportExceptionInterface
+ */
+ private function testReviewUpdate(): void
+ {
+ $request = [
+ 'text' => 'Обновленный отзыв на квест',
+ 'review_id' => 1,
+ 'rating' => rand(1, 10),
+ ];
+
+ $this->request('/api/quest/review/update', $request);
+ /** @var ReviewRepository $reviewRepository */
+ $reviewRepository = static::getContainer()->get(ReviewRepository::class);
+ if ($review = $reviewRepository->find(1)) {
+ if ($review->getText() !== $request['text']) {
+ self::fail('Отзыв не изменен');
+ }
+ }
+ }
+
+ /**
+ * Удаление отзыва квеста
+ *
+ * @return void
+ *
+ * @throws TransportExceptionInterface
+ */
+ private function testReviewRemove(): void
+ {
+ $request = [
+ 'id' => 1
+ ];
+
+ $this->request('/api/quest/review/delete', $request);
+
+ /** @var ReviewRepository $reviewRepository */
+ $reviewRepository = static::getContainer()->get(ReviewRepository::class);
+ if ($reviewRepository->find(1)) {
+ self::fail('Отзыв не удален');
+ }
+ }
+
+ /**
+ * Получение токена
+ *
+ * @return void
+ *
+ * @throws TransportExceptionInterface
+ * @throws ClientExceptionInterface
+ * @throws DecodingExceptionInterface
+ * @throws RedirectionExceptionInterface
+ * @throws ServerExceptionInterface
+ */
+ private function login(): void
+ {
+ $response = static::createClient()->request('POST', '/api/login', [
+ 'headers' => ['Content-Type' => 'application/json'],
+ 'json' => [
+ 'email' => UserFixture::EMAIL,
+ 'password' => UserFixture::PASSWORD,
+ ],
+ ]);
+
+ self::assertResponseStatusCodeSame(200);
+
+ self::assertArrayHasKey('token', $response->toArray()['data']);
+
+ self::$token = $response->toArray()['data']['token'];
+
+ self::assertResponseIsSuccessful();
+ }
+
+ private function loadFixtures(): void
+ {
+ $databaseTool = static::getContainer()->get(DatabaseToolCollection::class)->get();
+
+ $databaseTool->loadFixtures([
+ UserFixture::class,
+ GenreFixture::class,
+ ThemesFixture::class,
+ TagsFixture::class,
+ QuestFixture::class,
+ ]);
+ }
+
+ /**
+ * Запрос
+ *
+ * @param string $url
+ * @param array $request
+ *
+ * @return void
+ *
+ * @throws TransportExceptionInterface
+ */
+ private function request(string $url, array $request): void
+ {
+ static::createClient()->request('POST', $url, [
+ 'headers' => [
+ 'Content-Type' => 'application/json',
+ 'Authorization' => 'Bearer ' . self::$token
+ ],
+ 'json' => $request
+ ]);
+
+ self::assertResponseStatusCodeSame(200);
+
+ self::assertResponseIsSuccessful();
+ }
+}
diff --git a/app/tests/RegisterTest.php b/app/tests/RegisterTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..3e42ffe3f39f464ffc2164751efdc64bbe1d94ff
--- /dev/null
+++ b/app/tests/RegisterTest.php
@@ -0,0 +1,109 @@
+register();
+ $this->login();
+ $this->confirm();
+ }
+
+ private function register(): void
+ {
+ $request = [
+ 'email' => self::EMAIL,
+ 'password' => self::PASSWORD,
+ 'repeat_password' => self::PASSWORD,
+ 'name' => 'Тест',
+ 'surname' => 'Тестов',
+ 'patronymic' => 'Тестович',
+ 'phone_number' => '8 (234) 234 23 45'
+ ];
+
+ static::createClient()->request('POST', '/api/register', [
+ 'headers' => ['Content-Type' => 'application/json'],
+ 'json' => $request
+ ]);
+
+ self::assertResponseStatusCodeSame(200);
+
+ self::assertResponseIsSuccessful();
+
+ $queue = $this->transport('send_transport')->queue();
+ $queue->assertContains(SendMessage::class);
+
+ $message = $queue->first(SendMessage::class)->getMessage();
+
+ $mail = new Email();
+ $mail
+ ->subject($message->getSubject())
+ ->from($message->getFrom())
+ ->to($message->getTo())
+ ->html($message->getBody());
+
+ self::assertEmailHeaderSame($mail, 'subject', 'Подтвердите регистрацию');
+
+ $matches = [];
+ if (preg_match('/(\d+)<\/span>/', $message->getBody(), $matches)) {
+ if (isset($matches[1])) {
+ self::$code = $matches[1];
+ }
+ } else {
+ self::fail('Код не найден в email');
+ }
+ }
+
+ private function login(): void
+ {
+ $response = static::createClient()->request('POST', '/api/login', [
+ 'headers' => ['Content-Type' => 'application/json'],
+ 'json' => [
+ 'email' => self::EMAIL,
+ 'password' => self::PASSWORD
+ ],
+ ]);
+
+ self::assertResponseStatusCodeSame(200);
+
+ self::assertArrayHasKey('token', $response->toArray()['data']);
+
+ self::$token = $response->toArray()['data']['token'];
+
+ self::assertResponseIsSuccessful();
+ }
+
+ private function confirm(): void
+ {
+ $request = [
+ 'code' => self::$code
+ ];
+
+ static::createClient()->request('POST', '/api/email/check', [
+ 'headers' => [
+ 'Content-Type' => 'application/json',
+ 'Authorization' => 'Bearer ' . self::$token
+ ],
+ 'json' => $request
+ ]);
+
+ self::assertResponseStatusCodeSame(200);
+
+ self::assertResponseIsSuccessful();
+ }
+}
diff --git a/app/tests/bootstrap.php b/app/tests/bootstrap.php
new file mode 100644
index 0000000000000000000000000000000000000000..47a58557dccdd2028f30af3fdf381a5fb9568a3f
--- /dev/null
+++ b/app/tests/bootstrap.php
@@ -0,0 +1,13 @@
+bootEnv(dirname(__DIR__).'/.env');
+}
+
+if ($_SERVER['APP_DEBUG']) {
+ umask(0000);
+}