add tests for SMS message type classes
Cette révision appartient à :
Parent
2460281434
révision
5ebe4009dd
|
@ -17,6 +17,7 @@ namespace D3\Linkmobility4OXID\Application\Model\MessageTypes;
|
||||||
|
|
||||||
use D3\LinkmobilityClient\RecipientsList\RecipientsList;
|
use D3\LinkmobilityClient\RecipientsList\RecipientsList;
|
||||||
use D3\LinkmobilityClient\Response\ResponseInterface;
|
use D3\LinkmobilityClient\Response\ResponseInterface;
|
||||||
|
use D3\LinkmobilityClient\ValueObject\Recipient;
|
||||||
use Exception;
|
use Exception;
|
||||||
use OxidEsales\Eshop\Application\Model\Remark;
|
use OxidEsales\Eshop\Application\Model\Remark;
|
||||||
|
|
||||||
|
@ -65,7 +66,7 @@ abstract class AbstractMessage
|
||||||
*/
|
*/
|
||||||
protected function setRemark(string $userId, string $recipients, string $message): void
|
protected function setRemark(string $userId, string $recipients, string $message): void
|
||||||
{
|
{
|
||||||
$remark = oxNew(Remark::class);
|
$remark = d3GetOxidDIC()->get('d3ox.linkmobility.'.Remark::class);
|
||||||
$remark->assign([
|
$remark->assign([
|
||||||
'oxtype' => self::REMARK_IDENT,
|
'oxtype' => self::REMARK_IDENT,
|
||||||
'oxparentid' => $userId,
|
'oxparentid' => $userId,
|
||||||
|
@ -97,6 +98,7 @@ abstract class AbstractMessage
|
||||||
public function getRecipientsList(): string
|
public function getRecipientsList(): string
|
||||||
{
|
{
|
||||||
$list = [];
|
$list = [];
|
||||||
|
/** @var Recipient $recipient */
|
||||||
foreach ($this->recipients->getRecipientsList() as $recipient) {
|
foreach ($this->recipients->getRecipientsList() as $recipient) {
|
||||||
$list[] = $recipient->get();
|
$list[] = $recipient->get();
|
||||||
}
|
}
|
||||||
|
@ -113,7 +115,7 @@ abstract class AbstractMessage
|
||||||
{
|
{
|
||||||
$message = trim(strip_tags($message));
|
$message = trim(strip_tags($message));
|
||||||
$message = $this->removeLineBreaks ? str_replace(["\r", "\n"], ' ', $message) : $message;
|
$message = $this->removeLineBreaks ? str_replace(["\r", "\n"], ' ', $message) : $message;
|
||||||
$regexp = '/\s{2,}/m';
|
$regexp = '/[^\S\r\n]{2,}/m';
|
||||||
return $this->removeMultipleSpaces ? (string) preg_replace($regexp, ' ', $message) : $message;
|
return $this->removeMultipleSpaces ? (string) preg_replace($regexp, ' ', $message) : $message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,12 @@ use D3\Linkmobility4OXID\Application\Model\MessageClient;
|
||||||
use D3\Linkmobility4OXID\Application\Model\OrderRecipients;
|
use D3\Linkmobility4OXID\Application\Model\OrderRecipients;
|
||||||
use D3\Linkmobility4OXID\Application\Model\RequestFactory;
|
use D3\Linkmobility4OXID\Application\Model\RequestFactory;
|
||||||
use D3\Linkmobility4OXID\Application\Model\UserRecipients;
|
use D3\Linkmobility4OXID\Application\Model\UserRecipients;
|
||||||
|
use D3\LinkmobilityClient\Client;
|
||||||
use D3\LinkmobilityClient\Exceptions\ApiException;
|
use D3\LinkmobilityClient\Exceptions\ApiException;
|
||||||
use D3\LinkmobilityClient\RecipientsList\RecipientsList;
|
use D3\LinkmobilityClient\RecipientsList\RecipientsList;
|
||||||
|
use D3\LinkmobilityClient\RecipientsList\RecipientsListInterface;
|
||||||
use D3\LinkmobilityClient\Request\RequestInterface;
|
use D3\LinkmobilityClient\Request\RequestInterface;
|
||||||
|
use D3\LinkmobilityClient\Response\ResponseInterface;
|
||||||
use D3\LinkmobilityClient\SMS\SmsRequestInterface;
|
use D3\LinkmobilityClient\SMS\SmsRequestInterface;
|
||||||
use D3\LinkmobilityClient\ValueObject\Recipient;
|
use D3\LinkmobilityClient\ValueObject\Recipient;
|
||||||
use D3\LinkmobilityClient\ValueObject\Sender;
|
use D3\LinkmobilityClient\ValueObject\Sender;
|
||||||
|
@ -34,6 +37,8 @@ use InvalidArgumentException;
|
||||||
use OxidEsales\Eshop\Application\Model\Order;
|
use OxidEsales\Eshop\Application\Model\Order;
|
||||||
use OxidEsales\Eshop\Application\Model\User;
|
use OxidEsales\Eshop\Application\Model\User;
|
||||||
use OxidEsales\Eshop\Core\Registry;
|
use OxidEsales\Eshop\Core\Registry;
|
||||||
|
use OxidEsales\Eshop\Core\UtilsView;
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
class Sms extends AbstractMessage
|
class Sms extends AbstractMessage
|
||||||
{
|
{
|
||||||
|
@ -46,24 +51,43 @@ class Sms extends AbstractMessage
|
||||||
public function sendUserAccountMessage(User $user): bool
|
public function sendUserAccountMessage(User $user): bool
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
Registry::getLogger()->debug('startRequest', ['userId' => $user->getId()]);
|
$this->getLogger()->debug('startRequest', ['userId' => $user->getId()]);
|
||||||
$return = $this->sendCustomRecipientMessage(
|
$return = $this->sendCustomRecipientMessage($this->getUserRecipientsList($user));
|
||||||
oxNew(RecipientsList::class, oxNew(MessageClient::class)->getClient())
|
|
||||||
->add(oxNew(UserRecipients::class, $user)->getSmsRecipient())
|
|
||||||
);
|
|
||||||
if ($return) {
|
if ($return) {
|
||||||
$this->setRemark($user->getId(), $this->getRecipientsList(), $this->getMessage());
|
$this->setRemark($user->getId(), $this->getRecipientsList(), $this->getMessage());
|
||||||
}
|
}
|
||||||
Registry::getLogger()->debug('finishRequest', ['userId' => $user->getId()]);
|
$this->getLogger()->debug('finishRequest', ['userId' => $user->getId()]);
|
||||||
return $return;
|
return $return;
|
||||||
} catch (noRecipientFoundException $e) {
|
} catch (noRecipientFoundException $e) {
|
||||||
Registry::getLogger()->warning($e->getMessage());
|
$this->getLogger()->warning($e->getMessage());
|
||||||
Registry::getUtilsView()->addErrorToDisplay($e);
|
d3GetOxidDIC()->get('d3ox.linkmobility.'.UtilsView::class)->addErrorToDisplay($e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param User $user
|
||||||
|
* @return RecipientsListInterface
|
||||||
|
* @throws noRecipientFoundException
|
||||||
|
*/
|
||||||
|
protected function getUserRecipientsList(User $user): RecipientsListInterface
|
||||||
|
{
|
||||||
|
/** @var MessageClient $messageClient */
|
||||||
|
$messageClient = d3GetOxidDIC()->get(MessageClient::class);
|
||||||
|
|
||||||
|
d3GetOxidDIC()->set(RecipientsList::class.'.args.client', $messageClient->getClient());
|
||||||
|
/** @var RecipientsList $recipientsList */
|
||||||
|
$recipientsList = d3GetOxidDIC()->get(RecipientsList::class);
|
||||||
|
|
||||||
|
d3GetOxidDIC()->set(UserRecipients::class.'.args.user', $user);
|
||||||
|
/** @var UserRecipients $userRecipients */
|
||||||
|
$userRecipients = d3GetOxidDIC()->get(UserRecipients::class);
|
||||||
|
return $recipientsList->add(
|
||||||
|
$userRecipients->getSmsRecipient()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Order $order
|
* @param Order $order
|
||||||
*
|
*
|
||||||
|
@ -74,20 +98,38 @@ class Sms extends AbstractMessage
|
||||||
public function sendOrderMessage(Order $order): bool
|
public function sendOrderMessage(Order $order): bool
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
Registry::getLogger()->debug('startRequest', ['orderId' => $order->getId()]);
|
$this->getLogger()->debug('startRequest', ['orderId' => $order->getId()]);
|
||||||
$return = $this->sendCustomRecipientMessage(
|
$return = $this->sendCustomRecipientMessage($this->getOrderRecipientsList($order));
|
||||||
oxNew(RecipientsList::class, oxNew(MessageClient::class)->getClient())
|
|
||||||
->add($this->getOrderRecipient($order))
|
|
||||||
);
|
|
||||||
if ($return) {
|
if ($return) {
|
||||||
$this->setRemark($order->getOrderUser()->getId(), $this->getRecipientsList(), $this->getMessage());
|
$this->setRemark($order->getOrderUser()->getId(), $this->getRecipientsList(), $this->getMessage());
|
||||||
}
|
}
|
||||||
Registry::getLogger()->debug('finishRequest', ['orderId' => $order->getId()]);
|
$this->getLogger()->debug('finishRequest', ['orderId' => $order->getId()]);
|
||||||
return $return;
|
return $return;
|
||||||
} catch (noRecipientFoundException $e) {
|
} catch (noRecipientFoundException $e) {
|
||||||
Registry::getLogger()->warning($e->getMessage());
|
$this->getLogger()->warning($e->getMessage());
|
||||||
throw $e;
|
d3GetOxidDIC()->get('d3ox.linkmobility.'.UtilsView::class)->addErrorToDisplay($e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Order $order
|
||||||
|
* @return RecipientsListInterface
|
||||||
|
* @throws noRecipientFoundException
|
||||||
|
*/
|
||||||
|
protected function getOrderRecipientsList(Order $order): RecipientsListInterface
|
||||||
|
{
|
||||||
|
/** @var MessageClient $messageClient */
|
||||||
|
$messageClient = d3GetOxidDIC()->get(MessageClient::class);
|
||||||
|
|
||||||
|
d3GetOxidDIC()->set(RecipientsList::class.'.args.client', $messageClient->getClient());
|
||||||
|
/** @var RecipientsList $recipientsList */
|
||||||
|
$recipientsList = d3GetOxidDIC()->get(RecipientsList::class);
|
||||||
|
|
||||||
|
return $recipientsList->add(
|
||||||
|
$this->getOrderRecipient(($order))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -97,7 +139,10 @@ class Sms extends AbstractMessage
|
||||||
*/
|
*/
|
||||||
protected function getOrderRecipient(Order $order): Recipient
|
protected function getOrderRecipient(Order $order): Recipient
|
||||||
{
|
{
|
||||||
return oxNew(OrderRecipients::class, $order)->getSmsRecipient();
|
d3GetOxidDIC()->set(OrderRecipients::class.'.args.order', $order);
|
||||||
|
/** @var OrderRecipients $orderRecipients */
|
||||||
|
$orderRecipients = d3GetOxidDIC()->get(OrderRecipients::class);
|
||||||
|
return $orderRecipients->getSmsRecipient();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -108,54 +153,74 @@ class Sms extends AbstractMessage
|
||||||
public function sendCustomRecipientMessage(RecipientsList $recipientsList): bool
|
public function sendCustomRecipientMessage(RecipientsList $recipientsList): bool
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$this->setRecipients($recipientsList);
|
$this->response = $response = $this->submitMessage($recipientsList);
|
||||||
$configuration = oxNew(Configuration::class);
|
|
||||||
$client = oxNew(MessageClient::class)->getClient();
|
|
||||||
|
|
||||||
/** @var SmsRequestInterface $request */
|
|
||||||
$request = oxNew(RequestFactory::class, $this->getMessage(), $client)->getSmsRequest();
|
|
||||||
$request->setTestMode($configuration->getTestMode())->setMethod(RequestInterface::METHOD_POST)
|
|
||||||
->setSenderAddress(
|
|
||||||
oxNew(
|
|
||||||
Sender::class,
|
|
||||||
$configuration->getSmsSenderNumber(),
|
|
||||||
$configuration->getSmsSenderCountry()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
->setSenderAddressType(RequestInterface::SENDERADDRESSTYPE_INTERNATIONAL);
|
|
||||||
|
|
||||||
$requestRecipientsList = $request->getRecipientsList();
|
|
||||||
foreach ($recipientsList as $recipient) {
|
|
||||||
$requestRecipientsList->add($recipient);
|
|
||||||
}
|
|
||||||
|
|
||||||
$response = $client->request($request);
|
|
||||||
|
|
||||||
$this->response = $response;
|
|
||||||
|
|
||||||
if (false === $response->isSuccessful()) {
|
|
||||||
Registry::getLogger()->warning($response->getErrorMessage(), [$request->getBody()]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $response->isSuccessful();
|
return $response->isSuccessful();
|
||||||
} catch (abortSendingExceptionInterface $e) {
|
} catch (abortSendingExceptionInterface|GuzzleException|ApiException|InvalidArgumentException $e) {
|
||||||
Registry::getLogger()->warning($e->getMessage());
|
$this->getLogger()->warning($e->getMessage());
|
||||||
// Oxid does not accept throwable interface only exceptions according to definition
|
// Oxid does not accept throwable interface only exceptions according to definition
|
||||||
Registry::getUtilsView()->addErrorToDisplay($e->getMessage());
|
d3GetOxidDIC()->get('d3ox.linkmobility.'.UtilsView::class)->addErrorToDisplay($e->getMessage());
|
||||||
} catch (GuzzleException $e) {
|
|
||||||
Registry::getLogger()->warning($e->getMessage());
|
|
||||||
Registry::getUtilsView()->addErrorToDisplay($e->getMessage());
|
|
||||||
} catch (ApiException $e) {
|
|
||||||
Registry::getLogger()->warning($e->getMessage());
|
|
||||||
Registry::getUtilsView()->addErrorToDisplay($e->getMessage());
|
|
||||||
} catch (InvalidArgumentException $e) {
|
|
||||||
Registry::getLogger()->warning($e->getMessage());
|
|
||||||
Registry::getUtilsView()->addErrorToDisplay($e->getMessage());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Configuration $configuration
|
||||||
|
* @param Client $client
|
||||||
|
* @return SmsRequestInterface
|
||||||
|
*/
|
||||||
|
protected function getRequest(Configuration $configuration, Client $client): SmsRequestInterface
|
||||||
|
{
|
||||||
|
d3GetOxidDIC()->setParameter(RequestFactory::class.'.args.message', $this->getMessage());
|
||||||
|
d3GetOxidDIC()->set(RequestFactory::class.'.args.client', $client);
|
||||||
|
/** @var RequestFactory $requestFactory */
|
||||||
|
$requestFactory = d3GetOxidDIC()->get(RequestFactory::class);
|
||||||
|
|
||||||
|
d3GetOxidDIC()->setParameter(Sender::class.'.args.number', $configuration->getSmsSenderNumber());
|
||||||
|
d3GetOxidDIC()->setParameter(Sender::class.'.args.iso2countrycode', $configuration->getSmsSenderCountry());
|
||||||
|
/** @var Sender $sender */
|
||||||
|
$sender = d3GetOxidDIC()->get(Sender::class);
|
||||||
|
|
||||||
|
/** @var SmsRequestInterface $request */
|
||||||
|
$request = $requestFactory->getSmsRequest();
|
||||||
|
$request->setTestMode($configuration->getTestMode())->setMethod(RequestInterface::METHOD_POST)
|
||||||
|
->setSenderAddress($sender)
|
||||||
|
->setSenderAddressType(RequestInterface::SENDERADDRESSTYPE_INTERNATIONAL);
|
||||||
|
|
||||||
|
return $request;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param RecipientsList $recipientsList
|
||||||
|
* @return ResponseInterface
|
||||||
|
* @throws ApiException
|
||||||
|
* @throws GuzzleException
|
||||||
|
*/
|
||||||
|
protected function submitMessage(RecipientsList $recipientsList): ResponseInterface
|
||||||
|
{
|
||||||
|
$this->setRecipients($recipientsList);
|
||||||
|
/** @var Configuration $configuration */
|
||||||
|
$configuration = d3GetOxidDIC()->get(Configuration::class);
|
||||||
|
/** @var MessageClient $messageClient */
|
||||||
|
$messageClient = d3GetOxidDIC()->get(MessageClient::class);
|
||||||
|
$client = $messageClient->getClient();
|
||||||
|
|
||||||
|
$request = $this->getRequest($configuration, $client);
|
||||||
|
$requestRecipientsList = $request->getRecipientsList();
|
||||||
|
foreach ($recipientsList->getRecipients() as $recipient) {
|
||||||
|
$requestRecipientsList->add($recipient);
|
||||||
|
}
|
||||||
|
|
||||||
|
$response = $client->request($request);
|
||||||
|
|
||||||
|
if (false === $response->isSuccessful()) {
|
||||||
|
$this->getLogger()->warning($response->getErrorMessage(), [$request->getBody()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
|
@ -163,4 +228,12 @@ class Sms extends AbstractMessage
|
||||||
{
|
{
|
||||||
return 'SMS';
|
return 'SMS';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return LoggerInterface
|
||||||
|
*/
|
||||||
|
public function getLogger()
|
||||||
|
{
|
||||||
|
return Registry::getLogger();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
# @link https://www.oxidmodule.com
|
# @link https://www.oxidmodule.com
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
|
D3\Linkmobility4OXID\Application\Model\RequestFactory.args.message:
|
||||||
D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms.args.message:
|
D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms.args.message:
|
||||||
D3\Linkmobility4OXID\Application\Model\Exceptions\successfullySentException.args.smscount:
|
D3\Linkmobility4OXID\Application\Model\Exceptions\successfullySentException.args.smscount:
|
||||||
|
|
||||||
|
@ -45,6 +46,25 @@ services:
|
||||||
arguments:
|
arguments:
|
||||||
- D3\Linkmobility4OXID\Application\Model\Configuration
|
- D3\Linkmobility4OXID\Application\Model\Configuration
|
||||||
|
|
||||||
|
D3\Linkmobility4OXID\Application\Model\MessageClient:
|
||||||
|
class: D3\Linkmobility4OXID\Application\Model\MessageClient
|
||||||
|
factory: 'oxNew'
|
||||||
|
shared: true
|
||||||
|
arguments:
|
||||||
|
- D3\Linkmobility4OXID\Application\Model\MessageClient
|
||||||
|
|
||||||
|
D3\Linkmobility4OXID\Application\Model\RequestFactory:
|
||||||
|
class: D3\Linkmobility4OXID\Application\Model\RequestFactory
|
||||||
|
factory: 'oxNew'
|
||||||
|
shared: true
|
||||||
|
arguments:
|
||||||
|
- D3\Linkmobility4OXID\Application\Model\RequestFactory
|
||||||
|
- '%D3\Linkmobility4OXID\Application\Model\RequestFactory.args.message%'
|
||||||
|
- '@D3\Linkmobility4OXID\Application\Model\RequestFactory.args.client'
|
||||||
|
D3\Linkmobility4OXID\Application\Model\RequestFactory.args.client:
|
||||||
|
synthetic: true
|
||||||
|
shared: false
|
||||||
|
|
||||||
D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms:
|
D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms:
|
||||||
class: D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms
|
class: D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms
|
||||||
factory: 'oxNew'
|
factory: 'oxNew'
|
||||||
|
|
|
@ -43,6 +43,17 @@ services:
|
||||||
- '%D3\LinkmobilityClient\ValueObject\Recipient.args.number%'
|
- '%D3\LinkmobilityClient\ValueObject\Recipient.args.number%'
|
||||||
- '%D3\LinkmobilityClient\ValueObject\Recipient.args.iso2countrycode%'
|
- '%D3\LinkmobilityClient\ValueObject\Recipient.args.iso2countrycode%'
|
||||||
|
|
||||||
|
D3\LinkmobilityClient\RecipientsList\RecipientsList:
|
||||||
|
class: D3\LinkmobilityClient\RecipientsList\RecipientsList
|
||||||
|
factory: 'oxNew'
|
||||||
|
shared: false
|
||||||
|
arguments:
|
||||||
|
- D3\LinkmobilityClient\RecipientsList\RecipientsList
|
||||||
|
- '@D3\LinkmobilityClient\RecipientsList\RecipientsList.args.client'
|
||||||
|
D3\LinkmobilityClient\RecipientsList\RecipientsList.args.client:
|
||||||
|
synthetic: true
|
||||||
|
shared: false
|
||||||
|
|
||||||
D3\LinkmobilityClient\ValueObject\Sender:
|
D3\LinkmobilityClient\ValueObject\Sender:
|
||||||
class: D3\LinkmobilityClient\ValueObject\Sender
|
class: D3\LinkmobilityClient\ValueObject\Sender
|
||||||
factory: 'oxNew'
|
factory: 'oxNew'
|
||||||
|
|
|
@ -37,9 +37,7 @@ services:
|
||||||
class: 'OxidEsales\Eshop\Core\UtilsView'
|
class: 'OxidEsales\Eshop\Core\UtilsView'
|
||||||
factory:
|
factory:
|
||||||
- 'OxidEsales\Eshop\Core\Registry'
|
- 'OxidEsales\Eshop\Core\Registry'
|
||||||
- 'get'
|
- 'getUtilsView'
|
||||||
arguments:
|
|
||||||
- 'OxidEsales\Eshop\Core\UtilsView'
|
|
||||||
shared: true
|
shared: true
|
||||||
|
|
||||||
# Order
|
# Order
|
||||||
|
@ -66,6 +64,14 @@ services:
|
||||||
- 'OxidEsales\Eshop\Application\Model\Country'
|
- 'OxidEsales\Eshop\Application\Model\Country'
|
||||||
shared: false
|
shared: false
|
||||||
|
|
||||||
|
# Remark
|
||||||
|
d3ox.linkmobility.OxidEsales\Eshop\Application\Model\Remark:
|
||||||
|
class: 'OxidEsales\Eshop\Application\Model\Remark'
|
||||||
|
factory: 'oxNew'
|
||||||
|
arguments:
|
||||||
|
- 'OxidEsales\Eshop\Application\Model\Remark'
|
||||||
|
shared: false
|
||||||
|
|
||||||
d3ox.linkmobility.Psr\Log\LoggerInterface:
|
d3ox.linkmobility.Psr\Log\LoggerInterface:
|
||||||
class: Psr\Log\LoggerInterface
|
class: Psr\Log\LoggerInterface
|
||||||
factory:
|
factory:
|
||||||
|
|
|
@ -0,0 +1,818 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*
|
||||||
|
* https://www.d3data.de
|
||||||
|
*
|
||||||
|
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
|
||||||
|
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
|
||||||
|
* @link https://www.oxidmodule.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace D3\Linkmobility4OXID\tests\unit\Application\Model\MessageTypes;
|
||||||
|
|
||||||
|
use D3\Linkmobility4OXID\Application\Model\Configuration;
|
||||||
|
use D3\Linkmobility4OXID\Application\Model\Exceptions\noRecipientFoundException;
|
||||||
|
use D3\Linkmobility4OXID\Application\Model\MessageClient;
|
||||||
|
use D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms;
|
||||||
|
use D3\Linkmobility4OXID\Application\Model\OrderRecipients;
|
||||||
|
use D3\Linkmobility4OXID\Application\Model\RequestFactory;
|
||||||
|
use D3\Linkmobility4OXID\Application\Model\UserRecipients;
|
||||||
|
use D3\Linkmobility4OXID\tests\unit\LMUnitTestCase;
|
||||||
|
use D3\LinkmobilityClient\Client;
|
||||||
|
use D3\LinkmobilityClient\Exceptions\ApiException;
|
||||||
|
use D3\LinkmobilityClient\RecipientsList\RecipientsList;
|
||||||
|
use D3\LinkmobilityClient\SMS\BinaryRequest;
|
||||||
|
use D3\LinkmobilityClient\SMS\Response;
|
||||||
|
use D3\LinkmobilityClient\ValueObject\Recipient;
|
||||||
|
use D3\TestingTools\Development\CanAccessRestricted;
|
||||||
|
use Monolog\Logger;
|
||||||
|
use OxidEsales\Eshop\Application\Model\Order;
|
||||||
|
use OxidEsales\Eshop\Application\Model\Remark;
|
||||||
|
use OxidEsales\Eshop\Application\Model\User;
|
||||||
|
use OxidEsales\Eshop\Core\UtilsView;
|
||||||
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
use ReflectionException;
|
||||||
|
|
||||||
|
class SmsTest extends LMUnitTestCase
|
||||||
|
{
|
||||||
|
use CanAccessRestricted;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @return void
|
||||||
|
* @throws ReflectionException
|
||||||
|
* @covers \D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms::__construct
|
||||||
|
* @covers \D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms::getMessage
|
||||||
|
*/
|
||||||
|
public function canConstruct()
|
||||||
|
{
|
||||||
|
/** @var Sms|MockObject $sut */
|
||||||
|
$sut = $this->getMockBuilder(Sms::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['sanitizeMessage'])
|
||||||
|
->getMock();
|
||||||
|
$sut->expects($this->once())->method('sanitizeMessage')->willReturnArgument(0);
|
||||||
|
|
||||||
|
$this->callMethod(
|
||||||
|
$sut,
|
||||||
|
'__construct',
|
||||||
|
['messageFixture']
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
'messageFixture',
|
||||||
|
$this->callMethod(
|
||||||
|
$sut,
|
||||||
|
'getMessage'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @return void
|
||||||
|
* @throws ReflectionException
|
||||||
|
* @covers \D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms::setRemark
|
||||||
|
*/
|
||||||
|
public function canSetRemark()
|
||||||
|
{
|
||||||
|
/** @var Remark|MockObject $remarkMock */
|
||||||
|
$remarkMock = $this->getMockBuilder(Remark::class)
|
||||||
|
->onlyMethods(['assign', 'save'])
|
||||||
|
->getMock();
|
||||||
|
$remarkMock->expects($this->atLeastOnce())->method('assign');
|
||||||
|
$remarkMock->expects($this->atLeastOnce())->method('save')->willReturn(true);
|
||||||
|
d3GetOxidDIC()->set('d3ox.linkmobility.'.Remark::class, $remarkMock);
|
||||||
|
|
||||||
|
/** @var Sms|MockObject $sut */
|
||||||
|
$sut = $this->getMockBuilder(Sms::class)
|
||||||
|
->setConstructorArgs(['messageFixture'])
|
||||||
|
->onlyMethods(['getTypeName'])
|
||||||
|
->getMock();
|
||||||
|
$sut->method('getTypeName')->willReturn('typeFixture');
|
||||||
|
|
||||||
|
$this->callMethod(
|
||||||
|
$sut,
|
||||||
|
'setRemark',
|
||||||
|
['userIdFixture', 'recipients', 'messageFixture']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @return void
|
||||||
|
* @throws ReflectionException
|
||||||
|
* @covers \D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms::getResponse
|
||||||
|
*/
|
||||||
|
public function canGetResponse()
|
||||||
|
{
|
||||||
|
/** @var Response|MockObject $responseMock */
|
||||||
|
$responseMock = $this->getMockBuilder(Response::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
/** @var Sms $sut */
|
||||||
|
$sut = oxNew(Sms::class, 'messageFixture');
|
||||||
|
|
||||||
|
$this->setValue(
|
||||||
|
$sut,
|
||||||
|
'response',
|
||||||
|
$responseMock
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
$responseMock,
|
||||||
|
$this->callMethod(
|
||||||
|
$sut,
|
||||||
|
'getResponse'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @return void
|
||||||
|
* @throws ReflectionException
|
||||||
|
* @covers \D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms::setRecipients
|
||||||
|
*/
|
||||||
|
public function canSetRecipients()
|
||||||
|
{
|
||||||
|
/** @var RecipientsList|MockObject $recipientsListMock */
|
||||||
|
$recipientsListMock = $this->getMockBuilder(RecipientsList::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
/** @var Sms $sut */
|
||||||
|
$sut = oxNew(Sms::class, 'messageFixture');
|
||||||
|
|
||||||
|
$this->callMethod(
|
||||||
|
$sut,
|
||||||
|
'setRecipients',
|
||||||
|
[$recipientsListMock]
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
$recipientsListMock,
|
||||||
|
$this->getValue(
|
||||||
|
$sut,
|
||||||
|
'recipients'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @return void
|
||||||
|
* @throws ReflectionException
|
||||||
|
* @covers \D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms::getRecipientsList
|
||||||
|
*/
|
||||||
|
public function canGetRecipientsList()
|
||||||
|
{
|
||||||
|
/** @var Recipient|MockObject $recipientsMock1 */
|
||||||
|
$recipientsMock1 = $this->getMockBuilder(Recipient::class)
|
||||||
|
->setConstructorArgs(['01512 3456788', 'DE'])
|
||||||
|
->onlyMethods(['getFormatted'])
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
/** @var Recipient|MockObject $recipientsMock1 */
|
||||||
|
$recipientsMock2 = $this->getMockBuilder(Recipient::class)
|
||||||
|
->setConstructorArgs(['01512 3456789', 'DE'])
|
||||||
|
->onlyMethods(['getFormatted'])
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
/** @var RecipientsList|MockObject $recipientsListMock */
|
||||||
|
$recipientsListMock = $this->getMockBuilder(RecipientsList::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['clearRecipents'])
|
||||||
|
->getMock();
|
||||||
|
$recipientsListMock->add($recipientsMock1)->add($recipientsMock2);
|
||||||
|
|
||||||
|
/** @var Sms $sut */
|
||||||
|
$sut = oxNew(Sms::class, 'messageFixture');
|
||||||
|
$this->callMethod(
|
||||||
|
$sut,
|
||||||
|
'setRecipients',
|
||||||
|
[$recipientsListMock]
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
'+4915123456788, +4915123456789',
|
||||||
|
$this->callMethod(
|
||||||
|
$sut,
|
||||||
|
'getRecipientsList'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @param $message
|
||||||
|
* @param $removeLineBreaks
|
||||||
|
* @param $removeMultiSpaces
|
||||||
|
* @param $expected
|
||||||
|
* @return void
|
||||||
|
* @throws ReflectionException
|
||||||
|
* @dataProvider canSanitizeMessageDataProvider
|
||||||
|
* @covers \D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms::sanitizeMessage
|
||||||
|
*/
|
||||||
|
public function canSanitizeMessage($message, $removeLineBreaks, $removeMultiSpaces, $expected)
|
||||||
|
{
|
||||||
|
/** @var Sms|MockObject $sut */
|
||||||
|
$sut = $this->getMockBuilder(Sms::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$this->setValue(
|
||||||
|
$sut,
|
||||||
|
'removeLineBreaks',
|
||||||
|
$removeLineBreaks
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->setValue(
|
||||||
|
$sut,
|
||||||
|
'removeMultipleSpaces',
|
||||||
|
$removeMultiSpaces
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
$expected,
|
||||||
|
$this->callMethod(
|
||||||
|
$sut,
|
||||||
|
'sanitizeMessage',
|
||||||
|
[$message]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array[]
|
||||||
|
*/
|
||||||
|
public function canSanitizeMessageDataProvider(): array
|
||||||
|
{
|
||||||
|
$message = " ab<br>cd ef\r\ngh ";
|
||||||
|
|
||||||
|
return [
|
||||||
|
'keep linebreaks, keep multispaces' => [$message, false, false, "abcd ef\r\ngh"],
|
||||||
|
'rem linebreaks, keep multispaces' => [$message, true, false, "abcd ef gh"],
|
||||||
|
'keep linebreaks, rem multispaces' => [$message, false, true, "abcd ef\r\ngh"],
|
||||||
|
'rem linebreaks, rem multispaces' => [$message, true, true, 'abcd ef gh'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @param $sendReturn
|
||||||
|
* @param $throwException
|
||||||
|
* @param $setRemark
|
||||||
|
* @return void
|
||||||
|
* @throws ReflectionException
|
||||||
|
* @dataProvider canSendUserAccountMessageDataProvider
|
||||||
|
* @covers \D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms::sendUserAccountMessage
|
||||||
|
*/
|
||||||
|
public function canSendUserAccountMessage($sendReturn, $throwException, $setRemark)
|
||||||
|
{
|
||||||
|
/** @var User|MockObject $userMock */
|
||||||
|
$userMock = $this->getMockBuilder(User::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['getId'])
|
||||||
|
->getMock();
|
||||||
|
$userMock->method('getId')->willReturn('userIdFixture');
|
||||||
|
|
||||||
|
/** @var Logger|MockObject $loggerMock */
|
||||||
|
$loggerMock = $this->getMockBuilder(Logger::class)
|
||||||
|
->onlyMethods(['warning'])
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
$loggerMock->expects($this->exactly((int) $throwException))->method('warning');
|
||||||
|
|
||||||
|
/** @var UtilsView|MockObject $utilsViewMock */
|
||||||
|
$utilsViewMock = $this->getMockBuilder(UtilsView::class)
|
||||||
|
->onlyMethods(['addErrorToDisplay'])
|
||||||
|
->getMock();
|
||||||
|
$utilsViewMock->expects($this->exactly((int) $throwException))->method('addErrorToDisplay');
|
||||||
|
d3GetOxidDIC()->set('d3ox.linkmobility.'.UtilsView::class, $utilsViewMock);
|
||||||
|
|
||||||
|
/** @var RecipientsList|MockObject $recipientsListMock */
|
||||||
|
$recipientsListMock = $this->getMockBuilder(RecipientsList::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
/** @var Sms|MockObject $sut */
|
||||||
|
$sut = $this->getMockBuilder(Sms::class)
|
||||||
|
->onlyMethods(['getLogger', 'sendCustomRecipientMessage', 'getUserRecipientsList', 'setRemark',
|
||||||
|
'getRecipientsList', 'getMessage'])
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
$sut->method('getLogger')->willReturn($loggerMock);
|
||||||
|
$sut->method('sendCustomRecipientMessage')->will(
|
||||||
|
$throwException ?
|
||||||
|
$this->throwException(oxNew(noRecipientFoundException::class)) :
|
||||||
|
$this->returnValue($sendReturn)
|
||||||
|
);
|
||||||
|
$sut->expects($setRemark ? $this->once() : $this->never())->method('setRemark');
|
||||||
|
$sut->method('getUserRecipientsList')->willReturn($recipientsListMock);
|
||||||
|
$sut->method('getRecipientsList')->willReturn('abc,def');
|
||||||
|
$sut->method('getMessage')->willReturn('messageFixture');
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
$sendReturn,
|
||||||
|
$this->callMethod(
|
||||||
|
$sut,
|
||||||
|
'sendUserAccountMessage',
|
||||||
|
[$userMock]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function canSendUserAccountMessageDataProvider(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'can send' => [true, false, true],
|
||||||
|
'cant send' => [false, false, false],
|
||||||
|
'no recipient' => [false, true, false]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @return void
|
||||||
|
* @throws ReflectionException
|
||||||
|
* @covers \D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms::getUserRecipientsList
|
||||||
|
*/
|
||||||
|
public function canGetUserRecipientsList()
|
||||||
|
{
|
||||||
|
/** @var User|MockObject $userMock */
|
||||||
|
$userMock = $this->getMockBuilder(User::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
/** @var Recipient|MockObject $recipientMock */
|
||||||
|
$recipientMock = $this->getMockBuilder(Recipient::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
/** @var RecipientsList|MockObject $recipientsListMock */
|
||||||
|
$recipientsListMock = $this->getMockBuilder(RecipientsList::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['add'])
|
||||||
|
->getMock();
|
||||||
|
$recipientsListMock->expects($this->once())->method('add')->willReturnSelf();
|
||||||
|
d3GetOxidDIC()->set(RecipientsList::class, $recipientsListMock);
|
||||||
|
|
||||||
|
$userRecipientsMock = $this->getMockBuilder(UserRecipients::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['getSmsRecipient'])
|
||||||
|
->getMock();
|
||||||
|
$userRecipientsMock->method('getSmsRecipient')->willReturn($recipientMock);
|
||||||
|
d3GetOxidDIC()->set(UserRecipients::class, $userRecipientsMock);
|
||||||
|
|
||||||
|
/** @var MessageClient|MockObject $messageClientMock */
|
||||||
|
$messageClientMock = $this->getMockBuilder(MessageClient::class)
|
||||||
|
->getMock();
|
||||||
|
d3GetOxidDIC()->set(MessageClient::class, $messageClientMock);
|
||||||
|
|
||||||
|
/** @var Sms|MockObject $sut */
|
||||||
|
$sut = $this->getMockBuilder(Sms::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
$recipientsListMock,
|
||||||
|
$this->callMethod(
|
||||||
|
$sut,
|
||||||
|
'getUserRecipientsList',
|
||||||
|
[$userMock]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @param $sendReturn
|
||||||
|
* @param $throwException
|
||||||
|
* @param $setRemark
|
||||||
|
* @return void
|
||||||
|
* @throws ReflectionException
|
||||||
|
* @dataProvider canSendUserAccountMessageDataProvider
|
||||||
|
* @covers \D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms::sendOrderMessage
|
||||||
|
*/
|
||||||
|
public function canSendOrderMessage($sendReturn, $throwException, $setRemark)
|
||||||
|
{
|
||||||
|
/** @var User|MockObject $userMock */
|
||||||
|
$userMock = $this->getMockBuilder(User::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['getId'])
|
||||||
|
->getMock();
|
||||||
|
$userMock->method('getId')->willReturn('userIdFixture');
|
||||||
|
|
||||||
|
/** @var Order|MockObject $orderMock */
|
||||||
|
$orderMock = $this->getMockBuilder(Order::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['getId', 'getOrderUser'])
|
||||||
|
->getMock();
|
||||||
|
$orderMock->method('getId')->willReturn('userIdFixture');
|
||||||
|
$orderMock->method('getOrderUser')->willReturn($userMock);
|
||||||
|
|
||||||
|
/** @var Logger|MockObject $loggerMock */
|
||||||
|
$loggerMock = $this->getMockBuilder(Logger::class)
|
||||||
|
->onlyMethods(['warning'])
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
$loggerMock->expects($this->exactly((int) $throwException))->method('warning');
|
||||||
|
|
||||||
|
/** @var UtilsView|MockObject $utilsViewMock */
|
||||||
|
$utilsViewMock = $this->getMockBuilder(UtilsView::class)
|
||||||
|
->onlyMethods(['addErrorToDisplay'])
|
||||||
|
->getMock();
|
||||||
|
$utilsViewMock->expects($this->exactly((int) $throwException))->method('addErrorToDisplay');
|
||||||
|
d3GetOxidDIC()->set('d3ox.linkmobility.'.UtilsView::class, $utilsViewMock);
|
||||||
|
|
||||||
|
/** @var RecipientsList|MockObject $recipientsListMock */
|
||||||
|
$recipientsListMock = $this->getMockBuilder(RecipientsList::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
/** @var Sms|MockObject $sut */
|
||||||
|
$sut = $this->getMockBuilder(Sms::class)
|
||||||
|
->onlyMethods(['getLogger', 'sendCustomRecipientMessage', 'getOrderRecipientsList', 'setRemark',
|
||||||
|
'getRecipientsList', 'getMessage'])
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
$sut->method('getLogger')->willReturn($loggerMock);
|
||||||
|
$sut->method('sendCustomRecipientMessage')->will(
|
||||||
|
$throwException ?
|
||||||
|
$this->throwException(oxNew(noRecipientFoundException::class)) :
|
||||||
|
$this->returnValue($sendReturn)
|
||||||
|
);
|
||||||
|
$sut->expects($setRemark ? $this->once() : $this->never())->method('setRemark');
|
||||||
|
$sut->method('getOrderRecipientsList')->willReturn($recipientsListMock);
|
||||||
|
$sut->method('getRecipientsList')->willReturn('abc,def');
|
||||||
|
$sut->method('getMessage')->willReturn('messageFixture');
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
$sendReturn,
|
||||||
|
$this->callMethod(
|
||||||
|
$sut,
|
||||||
|
'sendOrderMessage',
|
||||||
|
[$orderMock]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @return void
|
||||||
|
* @throws ReflectionException
|
||||||
|
* @covers \D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms::getOrderRecipientsList
|
||||||
|
*/
|
||||||
|
public function canGetOrderRecipientsList()
|
||||||
|
{
|
||||||
|
/** @var Order|MockObject $orderMock */
|
||||||
|
$orderMock = $this->getMockBuilder(Order::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
/** @var Recipient|MockObject $recipientMock */
|
||||||
|
$recipientMock = $this->getMockBuilder(Recipient::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
/** @var RecipientsList|MockObject $recipientsListMock */
|
||||||
|
$recipientsListMock = $this->getMockBuilder(RecipientsList::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['add'])
|
||||||
|
->getMock();
|
||||||
|
$recipientsListMock->expects($this->once())->method('add')->willReturnSelf();
|
||||||
|
d3GetOxidDIC()->set(RecipientsList::class, $recipientsListMock);
|
||||||
|
|
||||||
|
/** @var MessageClient|MockObject $messageClientMock */
|
||||||
|
$messageClientMock = $this->getMockBuilder(MessageClient::class)
|
||||||
|
->getMock();
|
||||||
|
d3GetOxidDIC()->set(MessageClient::class, $messageClientMock);
|
||||||
|
|
||||||
|
/** @var Sms|MockObject $sut */
|
||||||
|
$sut = $this->getMockBuilder(Sms::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['getOrderRecipient'])
|
||||||
|
->getMock();
|
||||||
|
$sut->method('getOrderRecipient')->willReturn($recipientMock);
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
$recipientsListMock,
|
||||||
|
$this->callMethod(
|
||||||
|
$sut,
|
||||||
|
'getOrderRecipientsList',
|
||||||
|
[$orderMock]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @return void
|
||||||
|
* @throws ReflectionException
|
||||||
|
* @covers \D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms::getOrderRecipient
|
||||||
|
*/
|
||||||
|
public function canGetOrderRecipient()
|
||||||
|
{
|
||||||
|
/** @var Order|MockObject $orderMock */
|
||||||
|
$orderMock = $this->getMockBuilder(Order::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
/** @var Recipient|MockObject $recipientMock */
|
||||||
|
$recipientMock = $this->getMockBuilder(Recipient::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
/** @var OrderRecipients|MockObject $orderRecipientsMock */
|
||||||
|
$orderRecipientsMock = $this->getMockBuilder(OrderRecipients::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['getSmsRecipient'])
|
||||||
|
->getMock();
|
||||||
|
$orderRecipientsMock->method('getSmsRecipient')->willReturn($recipientMock);
|
||||||
|
d3GetOxidDIC()->set(OrderRecipients::class, $orderRecipientsMock);
|
||||||
|
|
||||||
|
/** @var Sms|MockObject $sut */
|
||||||
|
$sut = $this->getMockBuilder(Sms::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
$recipientMock,
|
||||||
|
$this->callMethod(
|
||||||
|
$sut,
|
||||||
|
'getOrderRecipient',
|
||||||
|
[$orderMock]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @param $sendSuccessful
|
||||||
|
* @param $throwException
|
||||||
|
* @param $expected
|
||||||
|
* @return void
|
||||||
|
* @throws ReflectionException
|
||||||
|
* @dataProvider canSendCustomRecipientMessageDataProvider
|
||||||
|
* @covers \D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms::sendCustomRecipientMessage()
|
||||||
|
*/
|
||||||
|
public function canSendCustomRecipientMessage($sendSuccessful, $throwException, $expected)
|
||||||
|
{
|
||||||
|
/** @var RecipientsList|MockObject $recipientsListMock */
|
||||||
|
$recipientsListMock = $this->getMockBuilder(RecipientsList::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
/** @var Response|MockObject $smsResponseMock */
|
||||||
|
$smsResponseMock = $this->getMockBuilder(Response::class)
|
||||||
|
->onlyMethods(['isSuccessful'])
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
$smsResponseMock->method('isSuccessful')->willReturn($sendSuccessful);
|
||||||
|
|
||||||
|
/** @var Logger|MockObject $loggerMock */
|
||||||
|
$loggerMock = $this->getMockBuilder(Logger::class)
|
||||||
|
->onlyMethods(['warning'])
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
$loggerMock->expects($this->exactly((int) $throwException))->method('warning');
|
||||||
|
|
||||||
|
/** @var UtilsView|MockObject $utilsViewMock */
|
||||||
|
$utilsViewMock = $this->getMockBuilder(UtilsView::class)
|
||||||
|
->onlyMethods(['addErrorToDisplay'])
|
||||||
|
->getMock();
|
||||||
|
$utilsViewMock->expects($this->exactly((int) $throwException))->method('addErrorToDisplay');
|
||||||
|
d3GetOxidDIC()->set('d3ox.linkmobility.'.UtilsView::class, $utilsViewMock);
|
||||||
|
|
||||||
|
/** @var Sms|MockObject $sut */
|
||||||
|
$sut = $this->getMockBuilder(Sms::class)
|
||||||
|
->onlyMethods(['submitMessage', 'getLogger'])
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
$sut->method('submitMessage')->will(
|
||||||
|
$throwException ?
|
||||||
|
$this->throwException(oxNew(ApiException::class)) :
|
||||||
|
$this->returnValue($smsResponseMock)
|
||||||
|
);
|
||||||
|
$sut->method('getLogger')->willReturn($loggerMock);
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
$expected,
|
||||||
|
$this->callMethod(
|
||||||
|
$sut,
|
||||||
|
'sendCustomRecipientMessage',
|
||||||
|
[$recipientsListMock]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function canSendCustomRecipientMessageDataProvider(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'is successful' => [true, false, true],
|
||||||
|
'is not successful' => [false, false, false],
|
||||||
|
'no recipient' => [false, true, false],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @return void
|
||||||
|
* @throws ReflectionException
|
||||||
|
* @covers \D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms::getRequest()
|
||||||
|
*/
|
||||||
|
public function canGetRequest()
|
||||||
|
{
|
||||||
|
/** @var Client|MockObject $clientMock */
|
||||||
|
$clientMock = $this->getMockBuilder(Client::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
/** @var Configuration|MockObject $configurationMock */
|
||||||
|
$configurationMock = $this->getMockBuilder(Configuration::class)
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
/** @var BinaryRequest|MockObject $binaryRequestMock */
|
||||||
|
$binaryRequestMock = $this->getMockBuilder(BinaryRequest::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
/** @var RequestFactory|MockObject $requestFactoryMock */
|
||||||
|
$requestFactoryMock = $this->getMockBuilder(RequestFactory::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['getSmsRequest'])
|
||||||
|
->getMock();
|
||||||
|
$requestFactoryMock->method('getSmsRequest')->willReturn($binaryRequestMock);
|
||||||
|
d3GetOxidDIC()->set(RequestFactory::class, $requestFactoryMock);
|
||||||
|
|
||||||
|
/** @var Sms|MockObject $sut */
|
||||||
|
$sut = $this->getMockBuilder(Sms::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
$binaryRequestMock,
|
||||||
|
$this->callMethod(
|
||||||
|
$sut,
|
||||||
|
'getRequest',
|
||||||
|
[$configurationMock, $clientMock]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @param $submitSuccessful
|
||||||
|
* @return void
|
||||||
|
* @throws ReflectionException
|
||||||
|
* @dataProvider canSubmitMessageDataProvider
|
||||||
|
* @covers \D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms::submitMessage()
|
||||||
|
*/
|
||||||
|
public function canSubmitMessage($submitSuccessful)
|
||||||
|
{
|
||||||
|
/** @var Recipient|MockObject $recipientMock */
|
||||||
|
$recipientMock = $this->getMockBuilder(Recipient::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
/** @var RecipientsList|MockObject $recipientListMock */
|
||||||
|
$recipientListMock = $this->getMockBuilder(RecipientsList::class)
|
||||||
|
->onlyMethods(['getRecipients'])
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
$recipientListMock->method('getRecipients')->willReturn([$recipientMock]);
|
||||||
|
|
||||||
|
/** @var RecipientsList|MockObject $requestRecipientListMock */
|
||||||
|
$requestRecipientListMock = $this->getMockBuilder(RecipientsList::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['add'])
|
||||||
|
->getMock();
|
||||||
|
$requestRecipientListMock->expects($this->once())->method('add')->with(
|
||||||
|
$this->identicalTo($recipientMock)
|
||||||
|
);
|
||||||
|
|
||||||
|
/** @var BinaryRequest|MockObject $binaryRequestMock */
|
||||||
|
$binaryRequestMock = $this->getMockBuilder(BinaryRequest::class)
|
||||||
|
->onlyMethods(['getRecipientsList', 'getBody'])
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
$binaryRequestMock->method('getRecipientsList')->willReturn($requestRecipientListMock);
|
||||||
|
$binaryRequestMock->method('getBody')->willReturn(['bodyFixture']);
|
||||||
|
|
||||||
|
/** @var Response|MockObject $smsResponseMock */
|
||||||
|
$smsResponseMock = $this->getMockBuilder(Response::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['isSuccessful', 'getErrorMessage'])
|
||||||
|
->getMock();
|
||||||
|
$smsResponseMock->method('isSuccessful')->willReturn($submitSuccessful);
|
||||||
|
$smsResponseMock->method('getErrorMessage')->willReturn('errorMessageFixture');
|
||||||
|
|
||||||
|
/** @var Logger|MockObject $loggerMock */
|
||||||
|
$loggerMock = $this->getMockBuilder(Logger::class)
|
||||||
|
->onlyMethods(['warning'])
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
$loggerMock->expects($this->exactly((int) !$submitSuccessful))->method('warning');
|
||||||
|
|
||||||
|
/** @var Client|MockObject $clientMock */
|
||||||
|
$clientMock = $this->getMockBuilder(Client::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['request'])
|
||||||
|
->getMock();
|
||||||
|
$clientMock->method('request')->willReturn($smsResponseMock);
|
||||||
|
|
||||||
|
/** @var MessageClient|MockObject $messageClientMock */
|
||||||
|
$messageClientMock = $this->getMockBuilder(MessageClient::class)
|
||||||
|
->onlyMethods(['getClient'])
|
||||||
|
->getMock();
|
||||||
|
$messageClientMock->method('getClient')->willReturn($clientMock);
|
||||||
|
d3GetOxidDIC()->set(MessageClient::class, $messageClientMock);
|
||||||
|
|
||||||
|
/** @var Sms|MockObject $sut */
|
||||||
|
$sut = $this->getMockBuilder(Sms::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['getRequest', 'getLogger'])
|
||||||
|
->getMock();
|
||||||
|
$sut->method('getRequest')->willReturn($binaryRequestMock);
|
||||||
|
$sut->method('getLogger')->willReturn($loggerMock);
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
$smsResponseMock,
|
||||||
|
$this->callMethod(
|
||||||
|
$sut,
|
||||||
|
'submitMessage',
|
||||||
|
[$recipientListMock]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function canSubmitMessageDataProvider(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'successful' => [true],
|
||||||
|
'not successful'=> [false]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @return void
|
||||||
|
* @throws ReflectionException
|
||||||
|
* @covers \D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms::getTypeName
|
||||||
|
*/
|
||||||
|
public function canGetTypeName()
|
||||||
|
{
|
||||||
|
/** @var Sms|MockObject $sut */
|
||||||
|
$sut = $this->getMockBuilder(Sms::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['getMessage'])
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$this->assertIsString(
|
||||||
|
$this->callMethod(
|
||||||
|
$sut,
|
||||||
|
'getTypeName'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @return void
|
||||||
|
* @throws ReflectionException
|
||||||
|
* @covers \D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms::getLogger()
|
||||||
|
*/
|
||||||
|
public function canGetLogger()
|
||||||
|
{
|
||||||
|
/** @var Sms|MockObject $sut */
|
||||||
|
$sut = $this->getMockBuilder(Sms::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->onlyMethods(['getMessage'])
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$this->assertInstanceOf(
|
||||||
|
LoggerInterface::class,
|
||||||
|
$this->callMethod(
|
||||||
|
$sut,
|
||||||
|
'getLogger'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Chargement…
Référencer dans un nouveau ticket