mivita/tests/Unit/Dhl/ShippingServiceParseAddressTest.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' => '']);
});