feat: upgrade project to symfony 7.4
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
||||
type: php
|
||||
docroot: public
|
||||
php_version: "8.3"
|
||||
php_version: "8.4"
|
||||
webserver_type: apache-fpm
|
||||
xdebug_enabled: false
|
||||
additional_hostnames:
|
||||
|
||||
@@ -37,3 +37,7 @@ yarn-error.log
|
||||
###> phpstan/phpstan ###
|
||||
phpstan.neon
|
||||
###< phpstan/phpstan ###
|
||||
|
||||
###> config reference ###
|
||||
/config/reference.php
|
||||
###< config reference ###
|
||||
|
||||
+36
-36
@@ -4,7 +4,7 @@
|
||||
"minimum-stability": "stable",
|
||||
"prefer-stable": true,
|
||||
"require": {
|
||||
"php": ">=8.1",
|
||||
"php": ">=8.4",
|
||||
"ext-ctype": "*",
|
||||
"ext-dom": "*",
|
||||
"ext-iconv": "*",
|
||||
@@ -29,39 +29,39 @@
|
||||
"phpstan/phpdoc-parser": "^2.0",
|
||||
"spatie/crypto": "^2.1",
|
||||
"symfony/apache-pack": "^1.0",
|
||||
"symfony/asset": "6.4.*",
|
||||
"symfony/console": "6.4.*",
|
||||
"symfony/doctrine-messenger": "6.4.*",
|
||||
"symfony/dom-crawler": "6.4.*",
|
||||
"symfony/dotenv": "6.4.*",
|
||||
"symfony/expression-language": "6.4.*",
|
||||
"symfony/asset": "7.4.*",
|
||||
"symfony/console": "7.4.*",
|
||||
"symfony/doctrine-messenger": "7.4.*",
|
||||
"symfony/dom-crawler": "7.4.*",
|
||||
"symfony/dotenv": "7.4.*",
|
||||
"symfony/expression-language": "7.4.*",
|
||||
"symfony/flex": "^2",
|
||||
"symfony/form": "6.4.*",
|
||||
"symfony/framework-bundle": "6.4.*",
|
||||
"symfony/html-sanitizer": "6.4.*",
|
||||
"symfony/http-client": "6.4.*",
|
||||
"symfony/intl": "6.4.*",
|
||||
"symfony/lock": "6.4.*",
|
||||
"symfony/mailer": "6.4.*",
|
||||
"symfony/mime": "6.4.*",
|
||||
"symfony/form": "7.4.*",
|
||||
"symfony/framework-bundle": "7.4.*",
|
||||
"symfony/html-sanitizer": "7.4.*",
|
||||
"symfony/http-client": "7.4.*",
|
||||
"symfony/intl": "7.4.*",
|
||||
"symfony/lock": "7.4.*",
|
||||
"symfony/mailer": "7.4.*",
|
||||
"symfony/mime": "7.4.*",
|
||||
"symfony/monolog-bundle": "^3.0",
|
||||
"symfony/notifier": "6.4.*",
|
||||
"symfony/process": "6.4.*",
|
||||
"symfony/property-access": "6.4.*",
|
||||
"symfony/property-info": "6.4.*",
|
||||
"symfony/runtime": "6.4.*",
|
||||
"symfony/security-bundle": "6.4.*",
|
||||
"symfony/serializer": "6.4.*",
|
||||
"symfony/notifier": "7.4.*",
|
||||
"symfony/process": "7.4.*",
|
||||
"symfony/property-access": "7.4.*",
|
||||
"symfony/property-info": "7.4.*",
|
||||
"symfony/runtime": "7.4.*",
|
||||
"symfony/security-bundle": "7.4.*",
|
||||
"symfony/serializer": "7.4.*",
|
||||
"symfony/stimulus-bundle": "^2.21",
|
||||
"symfony/string": "6.4.*",
|
||||
"symfony/translation": "6.4.*",
|
||||
"symfony/twig-bundle": "6.4.*",
|
||||
"symfony/uid": "6.4.*",
|
||||
"symfony/string": "7.4.*",
|
||||
"symfony/translation": "7.4.*",
|
||||
"symfony/twig-bundle": "7.4.*",
|
||||
"symfony/uid": "7.4.*",
|
||||
"symfony/ux-twig-component": "^2.36",
|
||||
"symfony/validator": "6.4.*",
|
||||
"symfony/web-link": "6.4.*",
|
||||
"symfony/validator": "7.4.*",
|
||||
"symfony/web-link": "7.4.*",
|
||||
"symfony/webpack-encore-bundle": "^2.2",
|
||||
"symfony/yaml": "6.4.*",
|
||||
"symfony/yaml": "7.4.*",
|
||||
"twig/extra-bundle": "^2.12|^3.0",
|
||||
"twig/html-extra": "^3.15",
|
||||
"twig/intl-extra": "*",
|
||||
@@ -77,7 +77,7 @@
|
||||
},
|
||||
"sort-packages": true,
|
||||
"platform": {
|
||||
"php": "8.3.30"
|
||||
"php": "8.4.24"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -119,7 +119,7 @@
|
||||
"extra": {
|
||||
"symfony": {
|
||||
"allow-contrib": true,
|
||||
"require": "6.4.*",
|
||||
"require": "7.4.*",
|
||||
"docker": true
|
||||
}
|
||||
},
|
||||
@@ -131,12 +131,12 @@
|
||||
"phpstan/phpstan-symfony": "^2.0",
|
||||
"phpunit/phpunit": "^9.5",
|
||||
"rector/rector": "^2.4",
|
||||
"symfony/browser-kit": "6.4.*",
|
||||
"symfony/css-selector": "6.4.*",
|
||||
"symfony/debug-bundle": "6.4.*",
|
||||
"symfony/browser-kit": "7.4.*",
|
||||
"symfony/css-selector": "7.4.*",
|
||||
"symfony/debug-bundle": "7.4.*",
|
||||
"symfony/maker-bundle": "^1.0",
|
||||
"symfony/phpunit-bridge": "^7.1",
|
||||
"symfony/stopwatch": "6.4.*",
|
||||
"symfony/web-profiler-bundle": "6.4.*"
|
||||
"symfony/stopwatch": "7.4.*",
|
||||
"symfony/web-profiler-bundle": "7.4.*"
|
||||
}
|
||||
}
|
||||
|
||||
Generated
+1214
-1012
File diff suppressed because it is too large
Load Diff
@@ -9,8 +9,7 @@ doctrine:
|
||||
profiling_collect_backtrace: '%kernel.debug%'
|
||||
use_savepoints: true
|
||||
orm:
|
||||
auto_generate_proxy_classes: true
|
||||
enable_lazy_ghost_objects: true
|
||||
enable_native_lazy_objects: true
|
||||
validate_xml_mapping: true
|
||||
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
|
||||
auto_mapping: true
|
||||
@@ -33,8 +32,6 @@ when@test:
|
||||
when@prod:
|
||||
doctrine:
|
||||
orm:
|
||||
auto_generate_proxy_classes: false
|
||||
proxy_dir: '%kernel.build_dir%/doctrine/orm/Proxies'
|
||||
query_cache_driver:
|
||||
type: pool
|
||||
pool: doctrine.system_cache_pool
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# see https://symfony.com/doc/current/reference/configuration/framework.html
|
||||
framework:
|
||||
secret: '%env(APP_SECRET)%'
|
||||
annotations: false
|
||||
http_method_override: false
|
||||
handle_all_throwables: true
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
framework:
|
||||
property_info:
|
||||
with_constructor_extractor: true
|
||||
@@ -14,4 +14,6 @@ when@test:
|
||||
intercept_redirects: false
|
||||
|
||||
framework:
|
||||
profiler: { collect: false }
|
||||
profiler:
|
||||
collect: false
|
||||
collect_serializer_data: true
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\BusProNet;
|
||||
|
||||
use Symfony\Component\DomCrawler\Crawler;
|
||||
|
||||
/**
|
||||
* Builds a Crawler over BusPro's XML payloads.
|
||||
*
|
||||
* The Crawler constructor parses its content as HTML5, which flattens the
|
||||
* nesting BusPro's exports and API responses rely on, so XML has to be added
|
||||
* through addXmlContent() instead.
|
||||
*/
|
||||
final class XmlCrawlerFactory
|
||||
{
|
||||
public static function create(string $xml): Crawler
|
||||
{
|
||||
$crawler = new Crawler();
|
||||
$crawler->addXmlContent($xml);
|
||||
|
||||
return $crawler;
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ namespace App\BusProNet\XmlLoader;
|
||||
|
||||
use App\BusProNet\Model\Hotel;
|
||||
use App\BusProNet\Model\Travel;
|
||||
use App\BusProNet\XmlCrawlerFactory;
|
||||
use App\Exception\HotelNotFoundException;
|
||||
use Psr\Cache\InvalidArgumentException;
|
||||
use Symfony\Component\DomCrawler\Crawler;
|
||||
@@ -73,7 +74,7 @@ class HotelLoader extends AbstractLoader
|
||||
{
|
||||
$xml = $this->xmlExport->read($filename);
|
||||
|
||||
return new Crawler($xml);
|
||||
return XmlCrawlerFactory::create($xml);
|
||||
}
|
||||
|
||||
public function parseXml(Crawler $node): Hotel
|
||||
|
||||
@@ -5,6 +5,7 @@ declare(strict_types=1);
|
||||
namespace App\BusProNet\XmlLoader;
|
||||
|
||||
use App\BusProNet\Model\Insurance;
|
||||
use App\BusProNet\XmlCrawlerFactory;
|
||||
use App\BusProNet\XmlParser\InsuranceParser;
|
||||
use League\Flysystem\FilesystemOperator;
|
||||
use Psr\Cache\InvalidArgumentException;
|
||||
@@ -50,6 +51,6 @@ class InsuranceLoader extends AbstractLoader
|
||||
{
|
||||
$xml = $this->xmlExport->read($filename);
|
||||
|
||||
return new Crawler($xml);
|
||||
return XmlCrawlerFactory::create($xml);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace App\BusProNet\XmlLoader;
|
||||
|
||||
use App\BusProNet\Model\Pickup;
|
||||
use App\BusProNet\Model\Travel;
|
||||
use App\BusProNet\XmlCrawlerFactory;
|
||||
use Psr\Cache\InvalidArgumentException;
|
||||
use Symfony\Component\DomCrawler\Crawler;
|
||||
use Symfony\Contracts\Cache\ItemInterface;
|
||||
@@ -46,7 +47,7 @@ class PickupLoader extends AbstractLoader
|
||||
{
|
||||
$xml = $this->xmlExport->read($filename);
|
||||
|
||||
return new Crawler($xml);
|
||||
return XmlCrawlerFactory::create($xml);
|
||||
}
|
||||
|
||||
public function parseXml(Crawler $node): Pickup
|
||||
|
||||
@@ -7,6 +7,7 @@ use App\BusProNet\Model\MutableData;
|
||||
use App\BusProNet\Model\ServiceAvailabilityResponse;
|
||||
use App\BusProNet\Model\Travel;
|
||||
use App\BusProNet\Utility\DateCodeUtility;
|
||||
use App\BusProNet\XmlCrawlerFactory;
|
||||
use App\BusProNet\XmlParser\TravelParser;
|
||||
use App\Exception\HotelNotInTravelException;
|
||||
use App\Exception\TravelNotFoundException;
|
||||
@@ -71,7 +72,7 @@ class TravelLoader extends AbstractLoader
|
||||
foreach ($xmlFiles as $file) {
|
||||
$xml = $this->xmlExport->read($file->path());
|
||||
|
||||
$crawler = new Crawler($xml);
|
||||
$crawler = XmlCrawlerFactory::create($xml);
|
||||
$travelDataNodes = $crawler->filterXPath('//reisen/reise/termin');
|
||||
|
||||
$travelDataNodes->each(function (Crawler $node) use (&$mapping, $hotels, $file) {
|
||||
@@ -218,7 +219,7 @@ class TravelLoader extends AbstractLoader
|
||||
{
|
||||
try {
|
||||
$xml = $this->xmlExport->read($filename);
|
||||
$crawler = new Crawler($xml);
|
||||
$crawler = XmlCrawlerFactory::create($xml);
|
||||
|
||||
$travelNode = $crawler->filterXPath(sprintf('//reise/termin[@idbuspro="%d"]', $dateId));
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ namespace App\BusProNet\XmlParser;
|
||||
|
||||
use App\BusProNet\ApiClient;
|
||||
use App\BusProNet\Exception\ResponseParserException;
|
||||
use Symfony\Component\DomCrawler\Crawler;
|
||||
use App\BusProNet\XmlCrawlerFactory;
|
||||
|
||||
class ApiResponseParser extends AbstractParser
|
||||
{
|
||||
@@ -14,7 +14,7 @@ class ApiResponseParser extends AbstractParser
|
||||
/** @param array<string, mixed> $additionalArgs */
|
||||
public function parseXmlString(string $type, string $xml, array $additionalArgs = []): mixed
|
||||
{
|
||||
$crawler = new Crawler($xml);
|
||||
$crawler = XmlCrawlerFactory::create($xml);
|
||||
|
||||
if (0 === $crawler->count()) {
|
||||
throw new ResponseParserException('Empty response received from server');
|
||||
|
||||
@@ -5,7 +5,8 @@ declare(strict_types=1);
|
||||
namespace App\Security\Voter;
|
||||
|
||||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
||||
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
|
||||
use Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface;
|
||||
use Symfony\Component\Security\Core\Authorization\Voter\Vote;
|
||||
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
|
||||
|
||||
/**
|
||||
@@ -16,7 +17,7 @@ class AdministrativeAccessVoter extends Voter
|
||||
public const ADMINISTRATIVE_ACCESS = 'ADMINISTRATIVE_ACCESS';
|
||||
|
||||
public function __construct(
|
||||
private readonly AuthorizationCheckerInterface $authorizationChecker,
|
||||
private readonly AccessDecisionManagerInterface $accessDecisionManager,
|
||||
) {
|
||||
}
|
||||
|
||||
@@ -25,9 +26,9 @@ class AdministrativeAccessVoter extends Voter
|
||||
return self::ADMINISTRATIVE_ACCESS === $attribute;
|
||||
}
|
||||
|
||||
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool
|
||||
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token, ?Vote $vote = null): bool
|
||||
{
|
||||
return $this->authorizationChecker->isGranted('ROLE_ADMIN')
|
||||
|| $this->authorizationChecker->isGranted('ROLE_GROUPS_MANAGER');
|
||||
return $this->accessDecisionManager->decide($token, ['ROLE_ADMIN'])
|
||||
|| $this->accessDecisionManager->decide($token, ['ROLE_GROUPS_MANAGER']);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ namespace App\Security\Voter;
|
||||
use App\BusProNet\Model\Booking;
|
||||
use App\Entity\User;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
||||
use Symfony\Component\Security\Core\Authorization\Voter\Vote;
|
||||
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
|
||||
|
||||
/**
|
||||
@@ -32,7 +33,7 @@ class BookingVoter extends Voter
|
||||
return $subject instanceof Booking;
|
||||
}
|
||||
|
||||
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool
|
||||
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token, ?Vote $vote = null): bool
|
||||
{
|
||||
/** @var User|null $user */
|
||||
$user = $token->getUser();
|
||||
|
||||
@@ -177,6 +177,18 @@
|
||||
".env"
|
||||
]
|
||||
},
|
||||
"symfony/form": {
|
||||
"version": "7.4",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "main",
|
||||
"version": "7.2",
|
||||
"ref": "7d86a6723f4a623f59e2bf966b6aad2fc461d36b"
|
||||
},
|
||||
"files": [
|
||||
"config/packages/csrf.yaml"
|
||||
]
|
||||
},
|
||||
"symfony/framework-bundle": {
|
||||
"version": "6.4",
|
||||
"recipe": {
|
||||
@@ -280,6 +292,18 @@
|
||||
"tests/bootstrap.php"
|
||||
]
|
||||
},
|
||||
"symfony/property-info": {
|
||||
"version": "7.4",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "main",
|
||||
"version": "7.3",
|
||||
"ref": "dae70df71978ae9226ae915ffd5fad817f5ca1f7"
|
||||
},
|
||||
"files": [
|
||||
"config/packages/property_info.yaml"
|
||||
]
|
||||
},
|
||||
"symfony/routing": {
|
||||
"version": "6.4",
|
||||
"recipe": {
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
{% apply spaceless %}
|
||||
{% for message in messages %}
|
||||
{% for message in messages %}
|
||||
{% if message is iterable %}
|
||||
{% set message = message.id | trans(message.parameters | default({}), message.domain | default(null), message.locale | default(null)) | raw %}
|
||||
{% else %}
|
||||
{% set message = message | trans | raw %}
|
||||
{% endif %}
|
||||
<div {{ stimulus_controller('toast', { 'text': message, 'class': 'toastify--' ~ level}) }}{{ qa_attribute('toast', level)}}></div>
|
||||
{% endfor %}
|
||||
{% endapply %}
|
||||
{% endfor %}
|
||||
|
||||
@@ -4,9 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\BusProNet\XmlParser;
|
||||
|
||||
use App\BusProNet\XmlCrawlerFactory;
|
||||
use App\BusProNet\XmlParser\AgencyParser;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DomCrawler\Crawler;
|
||||
|
||||
class AgencyParserTest extends TestCase
|
||||
{
|
||||
@@ -41,7 +41,7 @@ class AgencyParserTest extends TestCase
|
||||
</agenturen>
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$resultNode = $crawler->filterXPath('//ergebnis');
|
||||
$agencies = $this->parser->parse($resultNode);
|
||||
|
||||
@@ -79,7 +79,7 @@ class AgencyParserTest extends TestCase
|
||||
</agenturen>
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$resultNode = $crawler->filterXPath('//ergebnis');
|
||||
$agencies = $this->parser->parse($resultNode);
|
||||
|
||||
@@ -102,7 +102,7 @@ class AgencyParserTest extends TestCase
|
||||
</agenturen>
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$resultNode = $crawler->filterXPath('//ergebnis');
|
||||
$agencies = $this->parser->parse($resultNode);
|
||||
|
||||
|
||||
@@ -4,9 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\BusProNet\XmlParser;
|
||||
|
||||
use App\BusProNet\XmlCrawlerFactory;
|
||||
use App\BusProNet\XmlParser\BookingInsurancesParser;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DomCrawler\Crawler;
|
||||
|
||||
class BookingInsurancesParserTest extends TestCase
|
||||
{
|
||||
@@ -22,7 +22,7 @@ class BookingInsurancesParserTest extends TestCase
|
||||
</ergebnis>
|
||||
XML;
|
||||
|
||||
$crawler = new Crawler($xml);
|
||||
$crawler = XmlCrawlerFactory::create($xml);
|
||||
$insurancesData = $crawler->filterXPath('//versicherungen/versicherung');
|
||||
|
||||
$parser = new BookingInsurancesParser();
|
||||
@@ -53,7 +53,7 @@ XML;
|
||||
</ergebnis>
|
||||
XML;
|
||||
|
||||
$crawler = new Crawler($xml);
|
||||
$crawler = XmlCrawlerFactory::create($xml);
|
||||
$insurancesData = $crawler->filterXPath('//versicherungen/versicherung');
|
||||
|
||||
$parser = new BookingInsurancesParser();
|
||||
@@ -88,7 +88,7 @@ XML;
|
||||
</ergebnis>
|
||||
XML;
|
||||
|
||||
$crawler = new Crawler($xml);
|
||||
$crawler = XmlCrawlerFactory::create($xml);
|
||||
$insurancesData = $crawler->filterXPath('//versicherungen/versicherung');
|
||||
|
||||
$parser = new BookingInsurancesParser();
|
||||
|
||||
@@ -4,9 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\BusProNet\XmlParser;
|
||||
|
||||
use App\BusProNet\XmlCrawlerFactory;
|
||||
use App\BusProNet\XmlParser\BookingResponseParser;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DomCrawler\Crawler;
|
||||
|
||||
class BookingResponseParserTest extends TestCase
|
||||
{
|
||||
@@ -34,7 +34,7 @@ class BookingResponseParserTest extends TestCase
|
||||
</zahlungsbedingungen>
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$response = $this->parser->parse($crawler->filter('ergebnis'));
|
||||
|
||||
$this->assertTrue($response->isInquiryValid());
|
||||
@@ -67,7 +67,7 @@ class BookingResponseParserTest extends TestCase
|
||||
</zahlungsbedingungen>
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$response = $this->parser->parse($crawler->filter('ergebnis'));
|
||||
|
||||
$this->assertTrue($response->isInquiryValid());
|
||||
@@ -102,7 +102,7 @@ class BookingResponseParserTest extends TestCase
|
||||
<zahlungsbedingungen></zahlungsbedingungen>
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$response = $this->parser->parse($crawler->filter('ergebnis'));
|
||||
|
||||
$this->assertTrue($response->isInquiryValid());
|
||||
@@ -140,7 +140,7 @@ class BookingResponseParserTest extends TestCase
|
||||
</zahlungsbedingungen>
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$response = $this->parser->parse($crawler->filter('ergebnis'));
|
||||
|
||||
// Verify all voucher types are parsed
|
||||
@@ -169,7 +169,7 @@ class BookingResponseParserTest extends TestCase
|
||||
</zahlungsbedingungen>
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$response = $this->parser->parse($crawler->filter('ergebnis'));
|
||||
|
||||
$this->assertTrue($response->isInquiryValid());
|
||||
@@ -200,7 +200,7 @@ class BookingResponseParserTest extends TestCase
|
||||
</zahlungsbedingungen>
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$response = $this->parser->parse($crawler->filter('ergebnis'));
|
||||
|
||||
// Verify multiple purchase vouchers are parsed
|
||||
@@ -228,7 +228,7 @@ class BookingResponseParserTest extends TestCase
|
||||
</zahlungsbedingungen>
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$response = $this->parser->parse($crawler->filter('ergebnis'));
|
||||
|
||||
$this->assertTrue($response->isInquiryValid());
|
||||
@@ -269,7 +269,7 @@ class BookingResponseParserTest extends TestCase
|
||||
</zahlungsbedingungen>
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$response = $this->parser->parse($crawler->filter('ergebnis'));
|
||||
|
||||
// Voucher discount should only include AKTION
|
||||
@@ -305,7 +305,7 @@ class BookingResponseParserTest extends TestCase
|
||||
</zahlungsbedingungen>
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$response = $this->parser->parse($crawler->filter('ergebnis'));
|
||||
|
||||
// Verify no API-applied discounts
|
||||
@@ -333,7 +333,7 @@ class BookingResponseParserTest extends TestCase
|
||||
</zahlungsbedingungen>
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$response = $this->parser->parse($crawler->filter('ergebnis'));
|
||||
|
||||
$this->assertTrue($response->isInquiryValid());
|
||||
@@ -366,7 +366,7 @@ class BookingResponseParserTest extends TestCase
|
||||
</zahlungsbedingungen>
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$response = $this->parser->parse($crawler->filter('ergebnis'));
|
||||
|
||||
// Only ERM (Gruppenrabatt) should be counted as API-applied discount
|
||||
|
||||
@@ -5,9 +5,9 @@ declare(strict_types=1);
|
||||
namespace App\Tests\BusProNet\XmlParser;
|
||||
|
||||
use App\BusProNet\Model\CrmAttributes;
|
||||
use App\BusProNet\XmlCrawlerFactory;
|
||||
use App\BusProNet\XmlParser\CrmAttributesResponseParser;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DomCrawler\Crawler;
|
||||
|
||||
class CrmAttributesResponseParserTest extends TestCase
|
||||
{
|
||||
@@ -82,7 +82,7 @@ class CrmAttributesResponseParserTest extends TestCase
|
||||
// A house that is deliberately left out of bpn_crm_house_manager_ids claims nothing —
|
||||
// matching is by id, never by label.
|
||||
$parser = new CrmAttributesResponseParser([]);
|
||||
$attributes = $parser->parse((new Crawler($this->hausleitungXml()))->filterXPath('//ergebnis'));
|
||||
$attributes = $parser->parse(XmlCrawlerFactory::create($this->hausleitungXml())->filterXPath('//ergebnis'));
|
||||
|
||||
self::assertSame([], $attributes->roles);
|
||||
self::assertSame([], $attributes->hotelCodes);
|
||||
@@ -108,7 +108,7 @@ class CrmAttributesResponseParserTest extends TestCase
|
||||
|
||||
private function parse(string $xmlContent): CrmAttributes
|
||||
{
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$resultNode = $crawler->filterXPath('//ergebnis');
|
||||
|
||||
return $this->parser->parse($resultNode);
|
||||
|
||||
@@ -4,9 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\BusProNet\XmlParser;
|
||||
|
||||
use App\BusProNet\XmlCrawlerFactory;
|
||||
use App\BusProNet\XmlParser\ExtendedAvailabilitiesParser;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DomCrawler\Crawler;
|
||||
|
||||
class ExtendedAvailabilitiesParserTest extends TestCase
|
||||
{
|
||||
@@ -28,7 +28,7 @@ class ExtendedAvailabilitiesParserTest extends TestCase
|
||||
<reise status="Frei" buchungstatusmoeglich="FA" />
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xml);
|
||||
$crawler = XmlCrawlerFactory::create($xml);
|
||||
$response = $this->parser->parseServices($crawler);
|
||||
|
||||
$services = $response->getServices();
|
||||
@@ -58,7 +58,7 @@ class ExtendedAvailabilitiesParserTest extends TestCase
|
||||
</leistungen>
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xml);
|
||||
$crawler = XmlCrawlerFactory::create($xml);
|
||||
$response = $this->parser->parseServices($crawler);
|
||||
|
||||
$services = $response->getServices();
|
||||
@@ -78,7 +78,7 @@ class ExtendedAvailabilitiesParserTest extends TestCase
|
||||
<reise status="Frei" buchungstatusmoeglich="FA" />
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xml);
|
||||
$crawler = XmlCrawlerFactory::create($xml);
|
||||
$response = $this->parser->parseServices($crawler);
|
||||
|
||||
$this->assertSame('Frei', $response->travelStatus);
|
||||
@@ -93,7 +93,7 @@ class ExtendedAvailabilitiesParserTest extends TestCase
|
||||
<reise status="Frei" buchungstatusmoeglich="" />
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xml);
|
||||
$crawler = XmlCrawlerFactory::create($xml);
|
||||
$response = $this->parser->parseServices($crawler);
|
||||
|
||||
$this->assertSame([], $response->allowedBookingStatus);
|
||||
@@ -106,7 +106,7 @@ class ExtendedAvailabilitiesParserTest extends TestCase
|
||||
<leistungen />
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xml);
|
||||
$crawler = XmlCrawlerFactory::create($xml);
|
||||
$response = $this->parser->parseServices($crawler);
|
||||
|
||||
$this->assertNull($response->travelStatus);
|
||||
@@ -120,7 +120,7 @@ class ExtendedAvailabilitiesParserTest extends TestCase
|
||||
<leistungen />
|
||||
</ergebnis>';
|
||||
|
||||
$crawler = new Crawler($xml);
|
||||
$crawler = XmlCrawlerFactory::create($xml);
|
||||
$response = $this->parser->parseServices($crawler);
|
||||
|
||||
$this->assertSame([], $response->getServices());
|
||||
|
||||
@@ -4,9 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\BusProNet\XmlParser;
|
||||
|
||||
use App\BusProNet\XmlCrawlerFactory;
|
||||
use App\BusProNet\XmlParser\InsuranceParser;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DomCrawler\Crawler;
|
||||
|
||||
class InsuranceParserTest extends TestCase
|
||||
{
|
||||
@@ -36,7 +36,7 @@ class InsuranceParserTest extends TestCase
|
||||
</versicherungspakete>
|
||||
</versicherungsstammdaten>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$insurances = $this->parser->parse($crawler);
|
||||
|
||||
// Test all insurances are included (2 regular + 1 complementary + 1 package = 4 total)
|
||||
@@ -112,7 +112,7 @@ class InsuranceParserTest extends TestCase
|
||||
</versicherungspakete>
|
||||
</versicherungsstammdaten>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$insurances = $this->parser->parse($crawler);
|
||||
|
||||
$this->assertCount(2, $insurances);
|
||||
@@ -134,7 +134,7 @@ class InsuranceParserTest extends TestCase
|
||||
</versicherungen>
|
||||
</versicherungsstammdaten>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$insurances = $this->parser->parse($crawler);
|
||||
|
||||
$this->assertCount(1, $insurances);
|
||||
@@ -155,7 +155,7 @@ class InsuranceParserTest extends TestCase
|
||||
</versicherungspakete>
|
||||
</versicherungsstammdaten>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$insurances = $this->parser->parse($crawler);
|
||||
|
||||
$this->assertEmpty($insurances);
|
||||
@@ -179,7 +179,7 @@ class InsuranceParserTest extends TestCase
|
||||
</versicherungspakete>
|
||||
</versicherungsstammdaten>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$insurances = $this->parser->parse($crawler);
|
||||
|
||||
// Should include: normal insurance (178917), both complementary insurances (177270, 999999), and package (P1000320)
|
||||
|
||||
@@ -4,9 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\BusProNet\XmlParser;
|
||||
|
||||
use App\BusProNet\XmlCrawlerFactory;
|
||||
use App\BusProNet\XmlParser\PersonalDataParser;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DomCrawler\Crawler;
|
||||
|
||||
class PersonalDataParserTest extends TestCase
|
||||
{
|
||||
@@ -46,7 +46,7 @@ class PersonalDataParserTest extends TestCase
|
||||
|
||||
private function parse(string $xml): \App\BusProNet\Model\PersonalData
|
||||
{
|
||||
return $this->parser->parse(new Crawler($xml));
|
||||
return $this->parser->parse(XmlCrawlerFactory::create($xml));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,9 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\BusProNet\XmlParser;
|
||||
|
||||
use App\BusProNet\XmlCrawlerFactory;
|
||||
use App\BusProNet\XmlParser\TravelParser;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DomCrawler\Crawler;
|
||||
|
||||
class TravelParserTest extends TestCase
|
||||
{
|
||||
@@ -68,7 +68,7 @@ class TravelParserTest extends TestCase
|
||||
</reise>
|
||||
</reisen>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$travelNode = $crawler->filterXPath('//reise/termin')->first();
|
||||
$travel = $this->parser->parse($travelNode);
|
||||
|
||||
@@ -135,7 +135,7 @@ class TravelParserTest extends TestCase
|
||||
</reise>
|
||||
</reisen>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$travelNode = $crawler->filterXPath('//reise/termin')->first();
|
||||
$travel = $this->parser->parse($travelNode);
|
||||
|
||||
@@ -166,7 +166,7 @@ class TravelParserTest extends TestCase
|
||||
</reise>
|
||||
</reisen>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$travelNode = $crawler->filterXPath('//reise/termin')->first();
|
||||
$travel = $this->parser->parse($travelNode);
|
||||
|
||||
@@ -201,7 +201,7 @@ class TravelParserTest extends TestCase
|
||||
</reise>
|
||||
</reisen>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$travelNode = $crawler->filterXPath('//reise/termin')->first();
|
||||
$travel = $this->parser->parse($travelNode);
|
||||
|
||||
@@ -240,7 +240,7 @@ class TravelParserTest extends TestCase
|
||||
</reise>
|
||||
</reisen>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$travelNode = $crawler->filterXPath('//reise/termin')->first();
|
||||
$travel = $this->parser->parse($travelNode);
|
||||
|
||||
@@ -284,7 +284,7 @@ class TravelParserTest extends TestCase
|
||||
</reise>
|
||||
</reisen>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$travelNode = $crawler->filterXPath('//reise/termin')->first();
|
||||
$travel = $this->parser->parse($travelNode);
|
||||
|
||||
@@ -319,7 +319,7 @@ class TravelParserTest extends TestCase
|
||||
</reise>
|
||||
</reisen>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$travelNode = $crawler->filterXPath('//reise/termin')->first();
|
||||
$travel = $this->parser->parse($travelNode);
|
||||
|
||||
@@ -347,7 +347,7 @@ class TravelParserTest extends TestCase
|
||||
</reise>
|
||||
</reisen>';
|
||||
|
||||
$crawler = new Crawler($xmlContent);
|
||||
$crawler = XmlCrawlerFactory::create($xmlContent);
|
||||
$travelNode = $crawler->filterXPath('//reise/termin')->first();
|
||||
$travel = $this->parser->parse($travelNode);
|
||||
|
||||
@@ -364,7 +364,7 @@ class TravelParserTest extends TestCase
|
||||
<zustieg idbuspro="4" zeit="01:00" preis="0,00" />
|
||||
</zustiege>';
|
||||
|
||||
$crawler = new Crawler($xml);
|
||||
$crawler = XmlCrawlerFactory::create($xml);
|
||||
$defaultDate = new \DateTimeImmutable('2029-12-30');
|
||||
|
||||
$pickups = $this->parser->getPickups(
|
||||
@@ -392,7 +392,7 @@ class TravelParserTest extends TestCase
|
||||
<zustieg idbuspro="2" zeit="30.12.2029 20:30" preis="0,00" />
|
||||
</zustiege>';
|
||||
|
||||
$crawler = new Crawler($xml);
|
||||
$crawler = XmlCrawlerFactory::create($xml);
|
||||
$defaultDate = new \DateTimeImmutable('2029-12-30');
|
||||
|
||||
$pickups = $this->parser->getPickups(
|
||||
@@ -413,7 +413,7 @@ class TravelParserTest extends TestCase
|
||||
<zustieg idbuspro="2" zeit="01:00" preis="0,00" />
|
||||
</zustiege>';
|
||||
|
||||
$crawler = new Crawler($xml);
|
||||
$crawler = XmlCrawlerFactory::create($xml);
|
||||
$defaultDate = new \DateTimeImmutable('2029-12-30');
|
||||
|
||||
$pickups = $this->parser->getPickups(
|
||||
|
||||
@@ -88,7 +88,7 @@ class BpnSyncContingentsCommandTest extends TestCase
|
||||
);
|
||||
|
||||
$application = new Application();
|
||||
$application->add($command);
|
||||
$application->addCommand($command);
|
||||
|
||||
$tester = new CommandTester($application->find('app:bpn:sync-contingents'));
|
||||
$tester->execute(['--horizon-months' => '1']);
|
||||
|
||||
@@ -299,7 +299,7 @@ final class TestablePersonalDataController extends PersonalDataController
|
||||
$this->flashes[] = [$type, (string) $message];
|
||||
}
|
||||
|
||||
protected function render(string $view, array $parameters = [], Response $response = null): Response
|
||||
protected function render(string $view, array $parameters = [], ?Response $response = null): Response
|
||||
{
|
||||
$this->renderedView = $view;
|
||||
$this->renderedParameters = $parameters;
|
||||
|
||||
@@ -8,8 +8,9 @@ use App\BusProNet\Constants;
|
||||
use App\BusProNet\Model\Booking;
|
||||
use App\BusProNet\Model\Service;
|
||||
use App\BusProNet\Model\Travel;
|
||||
use App\BusProNet\XmlParser\TravelParser;
|
||||
use App\BusProNet\Utility\DirectionMapper;
|
||||
use App\BusProNet\XmlCrawlerFactory;
|
||||
use App\BusProNet\XmlParser\TravelParser;
|
||||
use App\Form\Model\BookingDto;
|
||||
use App\Form\Model\ParticipantDto;
|
||||
use App\Form\Service\ParticipantFieldOptionsProvider;
|
||||
@@ -18,7 +19,6 @@ use App\Service\InsuranceManager;
|
||||
use App\Service\ServiceAvailabilityCalculator;
|
||||
use App\Service\ServiceLabelFormatter;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DomCrawler\Crawler;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
class ParticipantFieldOptionsProviderBabyTest extends TestCase
|
||||
@@ -488,7 +488,7 @@ class ParticipantFieldOptionsProviderBabyTest extends TestCase
|
||||
private function createTravelWithExportedSkiPasses(array $serviceIds): Travel
|
||||
{
|
||||
$parser = new TravelParser();
|
||||
$crawler = new Crawler(file_get_contents('/var/www/html/var/xmlexport/Ziel_2456.xml'));
|
||||
$crawler = XmlCrawlerFactory::create(file_get_contents('/var/www/html/var/xmlexport/Ziel_2456.xml'));
|
||||
$travelNode = $crawler->filterXPath('//reise/termin')->first();
|
||||
$travel = $parser->parse($travelNode);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user