112 lines
3.5 KiB
PHP
112 lines
3.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Tests\BusProNet\XmlParser;
|
|
|
|
use App\BusProNet\XmlParser\AgencyParser;
|
|
use PHPUnit\Framework\TestCase;
|
|
use Symfony\Component\DomCrawler\Crawler;
|
|
|
|
class AgencyParserTest extends TestCase
|
|
{
|
|
private AgencyParser $parser;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
$this->parser = new AgencyParser();
|
|
}
|
|
|
|
public function testParseAgencies(): void
|
|
{
|
|
$xmlContent = '<?xml version="1.0" encoding="utf-8"?>
|
|
<ergebnis>
|
|
<satz typ="AGENTUREN" />
|
|
<agenturen>
|
|
<agentur id="124487">
|
|
<name>ADAC Hansa e.V.</name>
|
|
<code>295</code>
|
|
<strasse>Musterstr. 123</strasse>
|
|
<plz>99999</plz>
|
|
<ort>Musterort</ort>
|
|
<telefon>0361-442930</telefon>
|
|
</agentur>
|
|
<agentur id="75861">
|
|
<name>ADAC im Fördepark</name>
|
|
<code>103</code>
|
|
<strasse>Sebastianusstr. 24</strasse>
|
|
<plz>41468</plz>
|
|
<ort>Neuss</ort>
|
|
</agentur>
|
|
</agenturen>
|
|
</ergebnis>';
|
|
|
|
$crawler = new Crawler($xmlContent);
|
|
$resultNode = $crawler->filterXPath('//ergebnis');
|
|
$agencies = $this->parser->parse($resultNode);
|
|
|
|
$this->assertCount(2, $agencies);
|
|
|
|
// Test first agency (complete data)
|
|
$this->assertEquals(124487, $agencies[0]->id);
|
|
$this->assertEquals('ADAC Hansa e.V.', $agencies[0]->name);
|
|
$this->assertEquals('295', $agencies[0]->code);
|
|
$this->assertEquals('Musterstr. 123', $agencies[0]->street);
|
|
$this->assertEquals('99999', $agencies[0]->postCode);
|
|
$this->assertEquals('Musterort', $agencies[0]->city);
|
|
$this->assertEquals('0361-442930', $agencies[0]->phone);
|
|
|
|
// Test second agency (missing phone)
|
|
$this->assertEquals(75861, $agencies[1]->id);
|
|
$this->assertEquals('ADAC im Fördepark', $agencies[1]->name);
|
|
$this->assertEquals('103', $agencies[1]->code);
|
|
$this->assertEquals('Sebastianusstr. 24', $agencies[1]->street);
|
|
$this->assertEquals('41468', $agencies[1]->postCode);
|
|
$this->assertEquals('Neuss', $agencies[1]->city);
|
|
$this->assertNull($agencies[1]->phone);
|
|
}
|
|
|
|
public function testParseMinimalAgency(): void
|
|
{
|
|
$xmlContent = '<?xml version="1.0" encoding="utf-8"?>
|
|
<ergebnis>
|
|
<satz typ="AGENTUREN" />
|
|
<agenturen>
|
|
<agentur id="12345">
|
|
<name>Test Agency</name>
|
|
<code>001</code>
|
|
</agentur>
|
|
</agenturen>
|
|
</ergebnis>';
|
|
|
|
$crawler = new Crawler($xmlContent);
|
|
$resultNode = $crawler->filterXPath('//ergebnis');
|
|
$agencies = $this->parser->parse($resultNode);
|
|
|
|
$this->assertCount(1, $agencies);
|
|
$this->assertEquals(12345, $agencies[0]->id);
|
|
$this->assertEquals('Test Agency', $agencies[0]->name);
|
|
$this->assertEquals('001', $agencies[0]->code);
|
|
$this->assertNull($agencies[0]->street);
|
|
$this->assertNull($agencies[0]->postCode);
|
|
$this->assertNull($agencies[0]->city);
|
|
$this->assertNull($agencies[0]->phone);
|
|
}
|
|
|
|
public function testParseEmptyAgenciesList(): void
|
|
{
|
|
$xmlContent = '<?xml version="1.0" encoding="utf-8"?>
|
|
<ergebnis>
|
|
<satz typ="AGENTUREN" />
|
|
<agenturen>
|
|
</agenturen>
|
|
</ergebnis>';
|
|
|
|
$crawler = new Crawler($xmlContent);
|
|
$resultNode = $crawler->filterXPath('//ergebnis');
|
|
$agencies = $this->parser->parse($resultNode);
|
|
|
|
$this->assertCount(0, $agencies);
|
|
}
|
|
}
|