27-05-2026 Update DHL Modul v2.0

This commit is contained in:
Kevin 2026-05-27 13:40:38 +00:00
parent 53bdba33cd
commit 036595be94
41 changed files with 3346 additions and 310 deletions

View file

@ -0,0 +1,100 @@
<?php
use App\Models\ShoppingOrder;
use App\Services\DhlDataHelper;
function dhlReferenceOrder(): ShoppingOrder
{
$order = new ShoppingOrder;
$order->id = 98765;
return $order;
}
function dhlReferenceOptions(array $overrides = []): array
{
return array_merge([
'product_code' => 'V01PAK',
'shipping_address' => [
'firstname' => 'Max',
'lastname' => 'Mustermann',
'company' => '',
'address' => 'Hauptstrasse',
'houseNumber' => '5',
'zipcode' => '10115',
'city' => 'Berlin',
'country' => (object) ['code' => 'DE'],
'email' => 'max@example.com',
'phone' => '+4930123456',
'postnumber' => null,
],
], $overrides);
}
function dhlReferenceConfig(): array
{
return [
'default_product' => 'V01PAK',
'label_format' => 'PDF',
'dimensions' => [
'V01PAK' => ['length' => 30, 'width' => 20, 'height' => 10],
'default' => ['length' => 30, 'width' => 20, 'height' => 10],
],
'sender' => [
'company' => 'mivita care gmbh',
'name' => '',
'street' => 'Leinfeld',
'house_number' => '2',
'postalCode' => '87755',
'city' => 'Kirchhaslach',
'country' => 'DE',
'email' => 'versand@example.com',
'phone' => '+4987654321',
],
];
}
it('uses the admin shipment reference for DHL order data', function () {
$orderData = DhlDataHelper::prepareOrderData(
dhlReferenceOrder(),
1.2,
dhlReferenceOptions(['reference' => 'Nachlieferung Mai']),
dhlReferenceConfig()
);
expect($orderData['reference'])->toBe('Nachlieferung Mai');
});
it('falls back to the order reference when no admin reference is given', function () {
$orderData = DhlDataHelper::prepareOrderData(
dhlReferenceOrder(),
1.2,
dhlReferenceOptions(['reference' => '']),
dhlReferenceConfig()
);
expect($orderData['reference'])->toBe('Order-98765');
});
it('normalizes the DHL reference to the API length limit', function () {
$orderData = DhlDataHelper::prepareOrderData(
dhlReferenceOrder(),
1.2,
dhlReferenceOptions(['reference' => 'Sehr lange interne Referenz fuer DHL Label Nachlieferung']),
dhlReferenceConfig()
);
expect(strlen($orderData['reference']))->toBe(35)
->and($orderData['reference'])->toBe('Sehr lange interne Referenz fuer DH');
});
it('passes the DHL mustEncode option into order data', function () {
$orderData = DhlDataHelper::prepareOrderData(
dhlReferenceOrder(),
1.2,
dhlReferenceOptions(['print_only_if_codeable' => false]),
dhlReferenceConfig()
);
expect($orderData['print_only_if_codeable'])->toBeFalse();
});