103 lines
3.8 KiB
PHP
103 lines
3.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Tests\BusProNet\XmlParser;
|
|
|
|
use App\BusProNet\XmlParser\ContingentParser;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class ContingentParserTest extends TestCase
|
|
{
|
|
private ContingentParser $parser;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
$this->parser = new ContingentParser();
|
|
}
|
|
|
|
public function testParseBuildsRoomTypesAndRowsWithLinksAndControlRoom(): void
|
|
{
|
|
$xml = <<<'XML'
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<hotelzimmer>
|
|
<unterbringungen>
|
|
<unterbringung idbuspro="10" code="DZ" zimmerbezeichnung="Double Room" pax_max="2" />
|
|
<unterbringung idbuspro="11" code="BelKal" zimmerbezeichnung="Control" pax_max="1" />
|
|
<unterbringung idbuspro="12" code="PDGS" zimmerbezeichnung="Pseudo" pax_max="1" />
|
|
<unterbringung idbuspro="13" code="EZ" zimmerbezeichnung="Single Room" pax_max="1" idbuspro_kontingent_aus="10" />
|
|
</unterbringungen>
|
|
<kapazitaeten>
|
|
<kapazitaet termin="24.02.2026">
|
|
<zimmerliste>
|
|
<zimmer idbuspro="10" kontingent="3" frei="1" status="" abpreis="100,00" abpreis_naechte="2" abpreis_verlaengerung="15,00" abpreis_verlaengerung_naechte="1" />
|
|
<zimmer idbuspro="11" kontingent="1" frei="1" status="A" abpreis="0" abpreis_naechte="0" abpreis_verlaengerung="0" abpreis_verlaengerung_naechte="0" />
|
|
</zimmerliste>
|
|
</kapazitaet>
|
|
</kapazitaeten>
|
|
</hotelzimmer>
|
|
XML;
|
|
|
|
$result = $this->parser->parse($xml);
|
|
|
|
$this->assertArrayHasKey('roomTypes', $result);
|
|
$this->assertArrayHasKey('rows', $result);
|
|
$this->assertCount(3, $result['roomTypes']); // PDGS skipped
|
|
$this->assertCount(3, $result['rows']);
|
|
|
|
$rowsByCode = [];
|
|
foreach ($result['rows'] as $row) {
|
|
$rowsByCode[$row['roomCode']] = $row;
|
|
}
|
|
|
|
$this->assertSame('OK', $rowsByCode['DZ']['status']);
|
|
$this->assertSame(6, $rowsByCode['DZ']['pax']);
|
|
$this->assertSame(2, $rowsByCode['DZ']['available']);
|
|
$this->assertSame(100.0, $rowsByCode['DZ']['minPrice']);
|
|
$this->assertSame(2, $rowsByCode['DZ']['minNights']);
|
|
$this->assertSame(15.0, $rowsByCode['DZ']['additionalNightMinPrice']);
|
|
$this->assertSame(1, $rowsByCode['DZ']['additionalNightMinNights']);
|
|
$this->assertFalse($rowsByCode['DZ']['isControlRoom']);
|
|
|
|
// Linked room uses DZ contingent node but its own pax
|
|
$this->assertSame('Single Room', $rowsByCode['EZ']['roomLabel']);
|
|
$this->assertSame(3, $rowsByCode['EZ']['pax']);
|
|
$this->assertSame(1, $rowsByCode['EZ']['available']);
|
|
|
|
$this->assertSame('ON_REQUEST', $rowsByCode['BelKal']['status']);
|
|
$this->assertSame(0, $rowsByCode['BelKal']['pax']);
|
|
$this->assertSame(0, $rowsByCode['BelKal']['available']);
|
|
$this->assertTrue($rowsByCode['BelKal']['isControlRoom']);
|
|
}
|
|
|
|
public function testParseHandlesZeroValuesAndBlockedStatus(): void
|
|
{
|
|
$xml = <<<'XML'
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<hotelzimmer>
|
|
<unterbringungen>
|
|
<unterbringung idbuspro="20" code="DZ" zimmerbezeichnung="Double Room" pax_max="2" />
|
|
</unterbringungen>
|
|
<kapazitaeten>
|
|
<kapazitaet termin="25.02.2026">
|
|
<zimmerliste>
|
|
<zimmer idbuspro="20" kontingent="0" frei="0" status="S" abpreis="0" abpreis_naechte="0" abpreis_verlaengerung="0" abpreis_verlaengerung_naechte="0" />
|
|
</zimmerliste>
|
|
</kapazitaet>
|
|
</kapazitaeten>
|
|
</hotelzimmer>
|
|
XML;
|
|
|
|
$result = $this->parser->parse($xml);
|
|
$row = $result['rows'][0];
|
|
|
|
$this->assertSame('BLOCKED', $row['status']);
|
|
$this->assertSame(0, $row['pax']);
|
|
$this->assertSame(0, $row['available']);
|
|
$this->assertSame(0.0, $row['minPrice']);
|
|
$this->assertSame(0, $row['minNights']);
|
|
$this->assertSame(0.0, $row['additionalNightMinPrice']);
|
|
$this->assertSame(0, $row['additionalNightMinNights']);
|
|
}
|
|
}
|