wip: booking process, refactoring

This commit is contained in:
Björn Fromme
2025-07-16 19:37:17 +02:00
parent 47faa6b08e
commit eecea0abd1
43 changed files with 2269 additions and 366 deletions
@@ -4,22 +4,45 @@ namespace App\Tests\BusProNet\DataLoader;
use App\BusProNet\Model\Hotel;
use App\BusProNet\XmlLoader\HotelLoader;
use League\Flysystem\FilesystemOperator;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Cache\Adapter\ArrayAdapter;
class HotelDataLoaderTest extends TestCase
{
public function testParse(): void
public function testLoadAll(): void
{
$loader = new HotelLoader(__DIR__.'/../../Resources');
$hotelId = 163113;
$xmlContent = '<?xml version="1.0" encoding="utf-8"?>
<!--Export für dreipunktnull büro für mediengestaltung-->
<hotels erstellt_am="14.07.2025 15:04:46">
<hotel id="1" idbuspro="163113" code="SBWOXA">
<name>L\'Oxalys</name>
<ort>Val Thorens</ort>
<land>F</land>
<strasse>Rue des Lacs</strasse>
<telefon></telefon>
<art>Hotel</art>
<internetbuchbar>True</internetbuchbar>
</hotel>
</hotels>';
$xml = $loader->loadById($hotelId, 'hotels_data.xml');
$this->assertInstanceOf(\SimpleXMLElement::class, $xml);
$filesystem = $this->createMock(FilesystemOperator::class);
$filesystem->expects($this->once())
->method('read')
->with('hotel.xml')
->willReturn($xmlContent);
$hotel = $loader->parseXml($xml);
$cache = new ArrayAdapter();
$loader = new HotelLoader($cache, $filesystem);
$hotels = $loader->loadAll();
$this->assertIsArray($hotels);
$this->assertArrayHasKey(163113, $hotels);
$hotel = $hotels[163113];
$this->assertInstanceOf(Hotel::class, $hotel);
$this->assertEquals($hotelId, $hotel->id);
$this->assertEquals(163113, $hotel->id);
$this->assertEquals('L\'Oxalys', $hotel->name);
$this->assertEquals('SBWOXA', $hotel->code);
$this->assertEquals('Val Thorens', $hotel->city);
@@ -4,22 +4,41 @@ namespace App\Tests\BusProNet\DataLoader;
use App\BusProNet\Model\Pickup;
use App\BusProNet\XmlLoader\PickupLoader;
use League\Flysystem\FilesystemOperator;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Cache\Adapter\ArrayAdapter;
class PickupDataLoaderTest extends TestCase
{
public function testParse(): void
public function testLoadById(): void
{
$loader = new PickupLoader();
$pickupId = 1;
$xmlContent = '<?xml version="1.0" encoding="utf-8"?>
<!--Export für dreipunktnull büro für mediengestaltung-->
<zustiege erstellt_am="14.07.2025 15:15:09">
<zustieg id="1" idbuspro="1" code="MS-Hbf">
<ort>Münster</ort>
<plz>48143</plz>
<strasse>Hafenstr/Ecke Friedrich-Ebert-Str</strasse>
<art>BUS</art>
<hausabholung>False</hausabholung>
<crsbuchbar>True</crsbuchbar>
<internetbuchbar>True</internetbuchbar>
</zustieg>
</zustiege>';
$xml = $loader->loadById($pickupId, 'pickups_data.xml');
$this->assertInstanceOf(\SimpleXMLElement::class, $xml);
$filesystem = $this->createMock(FilesystemOperator::class);
$filesystem->expects($this->once())
->method('read')
->with('zustiege.xml')
->willReturn($xmlContent);
$pickup = $loader->parseXml($xml);
$cache = new ArrayAdapter();
$loader = new PickupLoader($cache, $filesystem);
$pickup = $loader->loadById(1);
$this->assertInstanceOf(Pickup::class, $pickup);
$this->assertEquals($pickupId, $pickup->id);
$this->assertEquals(1, $pickup->id);
$this->assertEquals('MS-Hbf', $pickup->code);
$this->assertEquals('Münster', $pickup->city);
$this->assertEquals('48143', $pickup->postalCode);
@@ -3,21 +3,56 @@
namespace App\Tests\BusProNet\DataLoader;
use App\BusProNet\Model\Travel;
use App\BusProNet\XmlLoader\HotelLoader;
use App\BusProNet\XmlLoader\TravelLoader;
use App\BusProNet\XmlParser\TravelParser;
use League\Flysystem\FilesystemOperator;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Cache\Adapter\ArrayAdapter;
class TravelDataLoaderTest extends TestCase
{
public function testParse(): void
public function testLoadById(): void
{
$loader = new TravelLoader('');
$filename = __DIR__.'/../../Resources/travel_data.xml';
$travelId = 11478;
$xmlContent = '<?xml version="1.0" encoding="utf-8"?>
<!--Export für dreipunktnull büro für mediengestaltung-->
<reisen>
<reise id="1" idbuspro="1234" code="DPWMP" erstellt_am="14.07.2025 15:02:01">
<termin id="1" idbuspro="11478" idprodukt="1234" termin="06.01.2025" bis="25.01.2025" code="DPWMP060125" reiseart="F">
<text>Davos - Sportclub Waldschlössli</text>
<abpreis>534.2</abpreis>
<hotel idbuspro="123">
<text>Test Hotel</text>
</hotel>
</termin>
</reise>
</reisen>';
$xml = $loader->loadById($travelId, $filename);
$this->assertInstanceOf(\SimpleXMLElement::class, $xml);
$filesystem = $this->createMock(FilesystemOperator::class);
$filesystem->expects($this->once())
->method('read')
->with('test_file.xml')
->willReturn($xmlContent);
$travel = $loader->parseXml($xml);
$hotelLoader = $this->createMock(HotelLoader::class);
$travelParser = $this->createMock(TravelParser::class);
$expectedTravel = new Travel();
$expectedTravel->code = 'DPWMP060125';
$expectedTravel->type = 'F';
$expectedTravel->dateFrom = new \DateTimeImmutable('2025-01-06');
$expectedTravel->dateTo = new \DateTimeImmutable('2025-01-25');
$expectedTravel->label = 'Davos - Sportclub Waldschlössli';
$expectedTravel->priceFrom = 534.2;
$travelParser->expects($this->once())
->method('parse')
->willReturn($expectedTravel);
$cache = new ArrayAdapter();
$loader = new TravelLoader($hotelLoader, $travelParser, 'http://example.com', $cache, $filesystem);
$travel = $loader->loadById(11478, null, 'test_file.xml');
$this->assertInstanceOf(Travel::class, $travel);
$this->assertEquals('DPWMP060125', $travel->code);
@@ -26,11 +61,5 @@ class TravelDataLoaderTest extends TestCase
$this->assertInstanceOf(\DateTimeImmutable::class, $travel->dateTo);
$this->assertEquals('Davos - Sportclub Waldschlössli', $travel->label);
$this->assertEquals(534.2, $travel->priceFrom);
$this->assertCount(8, $travel->selectionGroups);
$this->assertCount(27, $travel->additionalServices);
$this->assertCount(5, $travel->transportationServices);
$this->assertCount(7, $travel->pickupsTo);
$this->assertCount(12, $travel->rooms);
}
}