/** * Book pickup action * * @Method ("POST") * @Route ( * "/pickup.{_format}", * name="wk_dhl_api_b2b_book_pickup", * requirements={ * "_format"="(xml|json)" * }, * defaults={ * "_format"="json" * } * ) * * @param Request $request * @return Response */ public function bookPickupAction(Request $request) { try { $pickupRequest = $this->serializer->deserialize($request->getContent(), 'Wk\\DhlApiBundle\\Model\\B2b\\Request\\BookPickupRequest', 'json'); $result = $this->connection->bookPickup($pickupRequest->BookingInformation, $pickupRequest->PickupAddress, $pickupRequest->ContactOrderer); return $this->generateResponse($result); } catch (BadRequestHttpException $exception) { return $this->generateError($exception->getMessage(), $exception->getCode(), 400); } catch (\InvalidArgumentException $exception) { return $this->generateError($exception->getMessage(), 1001, 400); } catch (\Exception $exception) { return $this->generateError($exception->getMessage(), 1000); } }
/** * Tests booking a pickup * * @param PickupBookingInformationType $bookingInformation * @param PickupAddressType $senderAddress * @param PickupOrdererType $ordererAddress * @param BookPickupResponse $expectedResponse * @param Exception $expectedException * * @dataProvider provideBookPickupData */ public function testBookPickup(PickupBookingInformationType $bookingInformation, PickupAddressType $senderAddress, PickupOrdererType $ordererAddress = null, BookPickupResponse $expectedResponse = null, Exception $expectedException = null) { if ($expectedException) { $this->clientWillThrowException($expectedException); // Fire the function which is to be tested $this->connection->bookPickup($bookingInformation, $senderAddress, $ordererAddress); } elseif ($expectedResponse) { // Stubbing $this->client->expects($this->any())->method('__soapCall')->willReturn($expectedResponse); // Fire the function which is to be tested $response = $this->connection->bookPickup($bookingInformation, $senderAddress, $ordererAddress); // check if the response has a status information with the expected status code $this->assertArrayHasKey('Status', $response); $this->assertArrayHasKey('StatusCode', $response['Status']); $this->assertSame($expectedResponse->toArray(), $response); } }