DHL Modul v0.5 Shipping Label ok
This commit is contained in:
parent
480fdc65ed
commit
8fdaa0ba1d
122 changed files with 17938 additions and 2239 deletions
114
packages/acme-laravel-dhl/tests/Unit/AddressParserTest.php
Normal file
114
packages/acme-laravel-dhl/tests/Unit/AddressParserTest.php
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
<?php
|
||||
|
||||
namespace Tests\Unit;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Acme\Dhl\Services\ShippingService;
|
||||
use ReflectionClass;
|
||||
use ReflectionMethod;
|
||||
|
||||
/**
|
||||
* Test cases for German address parsing functionality
|
||||
*/
|
||||
class AddressParserTest extends TestCase
|
||||
{
|
||||
private ShippingService $shippingService;
|
||||
private ReflectionMethod $parseMethod;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
// Mock DhlClient for testing
|
||||
$mockClient = $this->createMock(\Acme\Dhl\Support\DhlClient::class);
|
||||
$this->shippingService = new ShippingService($mockClient);
|
||||
|
||||
// Make private method accessible for testing
|
||||
$reflection = new ReflectionClass($this->shippingService);
|
||||
$this->parseMethod = $reflection->getMethod('parseGermanAddress');
|
||||
$this->parseMethod->setAccessible(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test standard German address formats
|
||||
*/
|
||||
public function testStandardGermanAddresses(): void
|
||||
{
|
||||
$testCases = [
|
||||
// Basic format: Street + Number
|
||||
'Musterstraße 123' => ['street' => 'Musterstraße', 'houseNumber' => '123'],
|
||||
'Hauptstraße 1' => ['street' => 'Hauptstraße', 'houseNumber' => '1'],
|
||||
|
||||
// With letter suffix
|
||||
'Bahnhofstraße 45a' => ['street' => 'Bahnhofstraße', 'houseNumber' => '45a'],
|
||||
'Kirchgasse 12B' => ['street' => 'Kirchgasse', 'houseNumber' => '12B'],
|
||||
|
||||
// Multi-word street names
|
||||
'Am Markt 7' => ['street' => 'Am Markt', 'houseNumber' => '7'],
|
||||
'An der Kirche 23' => ['street' => 'An der Kirche', 'houseNumber' => '23'],
|
||||
'Karl-Marx-Straße 156' => ['street' => 'Karl-Marx-Straße', 'houseNumber' => '156'],
|
||||
|
||||
// Range numbers
|
||||
'Lindenstraße 1-3' => ['street' => 'Lindenstraße', 'houseNumber' => '1-3'],
|
||||
'Gartenweg 12/14' => ['street' => 'Gartenweg', 'houseNumber' => '12/14'],
|
||||
|
||||
// With abbreviations
|
||||
'Muster Str. 99' => ['street' => 'Muster Str.', 'houseNumber' => '99'],
|
||||
'Berliner Pl. 5' => ['street' => 'Berliner Pl.', 'houseNumber' => '5'],
|
||||
];
|
||||
|
||||
foreach ($testCases as $input => $expected) {
|
||||
$result = $this->parseMethod->invoke($this->shippingService, $input);
|
||||
|
||||
$this->assertEquals($expected['street'], $result['street'], "Failed parsing street for: {$input}");
|
||||
$this->assertEquals($expected['houseNumber'], $result['houseNumber'], "Failed parsing house number for: {$input}");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test edge cases and problematic addresses
|
||||
*/
|
||||
public function testEdgeCases(): void
|
||||
{
|
||||
$edgeCases = [
|
||||
// No house number - should return null for houseNumber
|
||||
'Musterstraße' => ['street' => 'Musterstraße', 'houseNumber' => null],
|
||||
'Am Markt' => ['street' => 'Am Markt', 'houseNumber' => null],
|
||||
|
||||
// Empty string
|
||||
'' => ['street' => '', 'houseNumber' => null],
|
||||
|
||||
// Only number
|
||||
'123' => ['street' => '123', 'houseNumber' => null],
|
||||
|
||||
// Multiple spaces
|
||||
'Muster Straße 123' => ['street' => 'Muster Straße', 'houseNumber' => '123'],
|
||||
];
|
||||
|
||||
foreach ($edgeCases as $input => $expected) {
|
||||
$result = $this->parseMethod->invoke($this->shippingService, $input);
|
||||
|
||||
$this->assertEquals($expected['street'], $result['street'], "Failed parsing street for edge case: {$input}");
|
||||
$this->assertEquals($expected['houseNumber'], $result['houseNumber'], "Failed parsing house number for edge case: {$input}");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test international addresses (should not be parsed)
|
||||
*/
|
||||
public function testInternationalAddresses(): void
|
||||
{
|
||||
$internationalCases = [
|
||||
// English-style addresses
|
||||
'123 Main Street' => ['street' => '123 Main Street', 'houseNumber' => null],
|
||||
'456 Oak Avenue' => ['street' => '456 Oak Avenue', 'houseNumber' => null],
|
||||
];
|
||||
|
||||
foreach ($internationalCases as $input => $expected) {
|
||||
$result = $this->parseMethod->invoke($this->shippingService, $input);
|
||||
|
||||
$this->assertEquals($expected['street'], $result['street'], "International address should not be parsed: {$input}");
|
||||
$this->assertEquals($expected['houseNumber'], $result['houseNumber'], "International address should have null house number: {$input}");
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue