50 lines
1.5 KiB
PHP
50 lines
1.5 KiB
PHP
<?php
|
|
|
|
use Acme\Dhl\Services\ShippingService;
|
|
use Acme\Dhl\Support\DhlClient;
|
|
|
|
function invokeParseAddressFields(array $address): array
|
|
{
|
|
$service = new ShippingService(new DhlClient('https://example.test', null, null, null));
|
|
|
|
$reflection = (new ReflectionClass(ShippingService::class))->getMethod('parseAddressFields');
|
|
$reflection->setAccessible(true);
|
|
|
|
return $reflection->invoke($service, $address);
|
|
}
|
|
|
|
it('keeps an explicit house number unchanged', function () {
|
|
$address = invokeParseAddressFields([
|
|
'street' => 'Musterstrasse',
|
|
'houseNumber' => '42a',
|
|
]);
|
|
|
|
expect($address['street'])->toBe('Musterstrasse')
|
|
->and($address['houseNumber'])->toBe('42a');
|
|
});
|
|
|
|
it('extracts the house number from a combined street field', function () {
|
|
$address = invokeParseAddressFields([
|
|
'street' => 'Musterstrasse 42a',
|
|
'houseNumber' => '',
|
|
]);
|
|
|
|
expect($address['street'])->toBe('Musterstrasse')
|
|
->and($address['houseNumber'])->toBe('42a');
|
|
});
|
|
|
|
it('throws when the street contains no parseable house number instead of defaulting to 1', function () {
|
|
invokeParseAddressFields([
|
|
'street' => 'Postfach',
|
|
'houseNumber' => '',
|
|
]);
|
|
})->throws(InvalidArgumentException::class, 'Hausnummer fehlt');
|
|
|
|
it('does not throw when neither street nor house number are provided', function () {
|
|
$address = invokeParseAddressFields([
|
|
'street' => '',
|
|
'houseNumber' => '',
|
|
]);
|
|
|
|
expect($address)->toBe(['street' => '', 'houseNumber' => '']);
|
|
});
|