feat: groups price calculator admin crud, booking/offer flow and api

This commit is contained in:
Björn Fromme
2026-08-03 15:25:10 +02:00
parent eabed8295a
commit 9d2aa11fdb
258 changed files with 16231 additions and 582 deletions
@@ -0,0 +1,92 @@
<?php
declare(strict_types=1);
namespace App\Tests\BusProNet\XmlParser;
use App\BusProNet\XmlParser\CrmAttributesResponseParser;
use PHPUnit\Framework\TestCase;
use Symfony\Component\DomCrawler\Crawler;
class CrmAttributesResponseParserTest extends TestCase
{
private CrmAttributesResponseParser $parser;
protected function setUp(): void
{
$this->parser = new CrmAttributesResponseParser();
}
public function testParseAssignsGroupsManagerRoleWhenSelected(): void
{
$roles = $this->parseRoles($this->selectionXml(1477, true));
self::assertContains('ROLE_GROUPS_MANAGER', $roles);
self::assertNotContains('ROLE_GROUPS_ADMIN', $roles);
}
public function testParseAssignsGroupsAdminRoleWhenSelected(): void
{
$roles = $this->parseRoles($this->selectionXml(1478, true));
self::assertContains('ROLE_GROUPS_ADMIN', $roles);
self::assertNotContains('ROLE_GROUPS_MANAGER', $roles);
}
public function testParseAssignsNoGroupsRolesWhenNotSelected(): void
{
$roles = $this->parseRoles($this->selectionXml(1477, false));
self::assertNotContains('ROLE_GROUPS_MANAGER', $roles);
self::assertNotContains('ROLE_GROUPS_ADMIN', $roles);
self::assertSame(['ROLE_CUSTOMER'], $roles);
}
public function testParseStillAssignsExistingAdminManagerTeamerRoles(): void
{
$xmlContent = '<?xml version="1.0" encoding="utf-8"?>
<ergebnis>
<satz typ="KUNDENDATEN" />
<selektionsmerkmale>
<selektionsgruppe id="1" bezeichnung="Rollen">
<selektion id="1292" bezeichnung="Admin" aenderbar="0" auswahl="True" />
<selektion id="1293" bezeichnung="Manager" aenderbar="0" auswahl="True" />
<selektion id="1070" bezeichnung="Teamer" aenderbar="0" auswahl="True" />
</selektionsgruppe>
</selektionsmerkmale>
<crmaktionen></crmaktionen>
</ergebnis>';
$roles = $this->parseRoles($xmlContent);
self::assertContains('ROLE_ADMIN', $roles);
self::assertContains('ROLE_MANAGER', $roles);
self::assertContains('ROLE_TEAMER', $roles);
self::assertContains('ROLE_HOUSE_MANAGER', $roles);
}
/**
* @return string[]
*/
private function parseRoles(string $xmlContent): array
{
$crawler = new Crawler($xmlContent);
$resultNode = $crawler->filterXPath('//ergebnis');
return $this->parser->parse($resultNode)->roles;
}
private function selectionXml(int $id, bool $selected): string
{
return sprintf('<?xml version="1.0" encoding="utf-8"?>
<ergebnis>
<satz typ="KUNDENDATEN" />
<selektionsmerkmale>
<selektionsgruppe id="1" bezeichnung="Rollen">
<selektion id="%d" bezeichnung="Gruppenreisen" aenderbar="0" auswahl="%s" />
</selektionsgruppe>
</selektionsmerkmale>
<crmaktionen></crmaktionen>
</ergebnis>', $id, $selected ? 'True' : 'False');
}
}