/**
  * @param Message $message
  * @return SendMessageResult
  *
  * @throws ApiRuntimeException
  * @throws TransferException Thrown by Guzzle during communication failure or unexpected server behaviour.
  */
 public function send(Message $message)
 {
     $response = $this->guzzleClient->post('/messages', ['json' => ['originator' => $message->getOriginator(), 'recipients' => $message->getRecipient(), 'body' => $message->getBody()], 'exceptions' => false]);
     try {
         $document = $response->json();
     } catch (\RuntimeException $e) {
         throw new ApiRuntimeException('The MessageBird server did not return valid JSON.', [], $e);
     }
     if (isset($document['errors'])) {
         $errors = $document['errors'];
     } else {
         $errors = [];
     }
     $statusCode = (int) $response->getStatusCode();
     if (!in_array($statusCode, [200, 201, 204, 401, 404, 405, 422]) && !($statusCode >= 500 && $statusCode < 600)) {
         throw new ApiRuntimeException(sprintf('Unexpected MessageBird server behaviour (HTTP %d)', $statusCode), $errors);
     }
     if (!isset($document['recipients']['items'][0]['status'])) {
         $deliveryStatus = SendMessageResult::STATUS_NOT_SENT;
     } else {
         $deliveryStatus = $document['recipients']['items'][0]['status'];
     }
     return new SendMessageResult($deliveryStatus, $errors);
 }
 /**
  * @param Message $message
  * @return array
  */
 private function createMessageLogContext(Message $message)
 {
     return ['message' => ['recipient' => $message->getRecipient(), 'body' => $message->getBody()]];
 }
 public function testItHasABody()
 {
     $message = new Message('SURFnet', '31612345678', 'body');
     $this->assertEquals('body', $message->getBody());
 }