66 lines
2.4 KiB
PHP
66 lines
2.4 KiB
PHP
<?php
|
|
|
|
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 testLoadById(): void
|
|
{
|
|
$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>';
|
|
|
|
$filesystem = $this->createMock(FilesystemOperator::class);
|
|
$filesystem->expects($this->once())
|
|
->method('read')
|
|
->with('test_file.xml')
|
|
->willReturn($xmlContent);
|
|
|
|
$hotelLoader = $this->createStub(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);
|
|
$this->assertEquals('F', $travel->type);
|
|
$this->assertInstanceOf(\DateTimeImmutable::class, $travel->dateFrom);
|
|
$this->assertInstanceOf(\DateTimeImmutable::class, $travel->dateTo);
|
|
$this->assertEquals('Davos - Sportclub Waldschlössli', $travel->label);
|
|
$this->assertEquals(534.2, $travel->priceFrom);
|
|
}
|
|
}
|