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(); });