linkmobility4oxid/src/tests/unit/Application/Model/MessageSenderTest.php

312 regels
11 KiB
PHP

<?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;
use D3\Linkmobility4OXID\Application\Model\Configuration;
use D3\Linkmobility4OXID\Application\Model\Exceptions\noRecipientFoundException;
use D3\Linkmobility4OXID\Application\Model\MessageSender;
use D3\Linkmobility4OXID\Application\Model\MessageTypes\Sms;
use D3\Linkmobility4OXID\tests\unit\LMUnitTestCase;
use D3\LinkmobilityClient\LoggerHandler;
use D3\TestingTools\Development\CanAccessRestricted;
use Monolog\Logger;
use OxidEsales\Eshop\Application\Model\Order;
use PHPUnit\Framework\MockObject\MockObject;
use ReflectionException;
class MessageSenderTest extends LMUnitTestCase
{
use CanAccessRestricted;
/**
* @test
*
* @param $actionConfigured
* @param $invocationCount
* @param $throwException
*
* @return void
* @throws ReflectionException
* @dataProvider canSendOrderFinishedMessageDataProvider
* @covers \D3\Linkmobility4OXID\Application\Model\MessageSender::sendOrderFinishedMessage
*/
public function canSendOrderFinishedMessage($actionConfigured, $invocationCount, $throwException)
{
/** @var Logger|MockObject $loggerMock */
$loggerMock = $this->getMockBuilder(Logger::class)
->onlyMethods(['debug'])
->disableOriginalConstructor()
->getMock();
$loggerMock->expects($this->exactly((int) $throwException))->method('debug');
/** @var LoggerHandler|MockObject $loggerHandlerMock */
$loggerHandlerMock = $this->getMockBuilder(LoggerHandler::class)
->onlyMethods(['getLogger'])
->getMock();
$loggerHandlerMock->method('getLogger')->willReturn($loggerMock);
d3GetOxidDIC()->set(LoggerHandler::class, $loggerHandlerMock);
/** @var Configuration|MockObject $configurationMock */
$configurationMock = $this->getMockBuilder(Configuration::class)
->onlyMethods(['sendOrderFinishedMessage'])
->getMock();
$configurationMock->method('sendOrderFinishedMessage')->willReturn($actionConfigured);
/** @var Order|MockObject $orderMock */
$orderMock = $this->getMockBuilder(Order::class)
->disableOriginalConstructor()
->getMock();
/** @var MessageSender|MockObject $sut */
$sut = $this->getMockBuilder(MessageSender::class)
->onlyMethods(['getConfiguration', 'sendMessageByOrder'])
->getMock();
$sut->method('getConfiguration')->willReturn($configurationMock);
if ($throwException) {
$sut->expects($invocationCount)->method('sendMessageByOrder')
->willThrowException(oxNew(noRecipientFoundException::class));
} else {
$sut->expects($invocationCount)->method('sendMessageByOrder');
}
$this->callMethod(
$sut,
'sendOrderFinishedMessage',
[$orderMock, 'messageBody']
);
}
/**
* @test
*
* @param $actionConfigured
* @param $invocationCount
* @param $throwException
*
* @return void
* @throws ReflectionException
* @dataProvider canSendOrderFinishedMessageDataProvider
* @covers \D3\Linkmobility4OXID\Application\Model\MessageSender::sendSendedNowMessage
*/
public function canSendSendedNowMessage($actionConfigured, $invocationCount, $throwException)
{
/** @var Logger|MockObject $loggerMock */
$loggerMock = $this->getMockBuilder(Logger::class)
->onlyMethods(['debug'])
->disableOriginalConstructor()
->getMock();
$loggerMock->expects($this->exactly((int) $throwException))->method('debug');
/** @var LoggerHandler|MockObject $loggerHandlerMock */
$loggerHandlerMock = $this->getMockBuilder(LoggerHandler::class)
->onlyMethods(['getLogger'])
->getMock();
$loggerHandlerMock->method('getLogger')->willReturn($loggerMock);
d3GetOxidDIC()->set(LoggerHandler::class, $loggerHandlerMock);
/** @var Configuration|MockObject $configurationMock */
$configurationMock = $this->getMockBuilder(Configuration::class)
->onlyMethods(['sendOrderSendedNowMessage'])
->getMock();
$configurationMock->method('sendOrderSendedNowMessage')->willReturn($actionConfigured);
/** @var Order|MockObject $orderMock */
$orderMock = $this->getMockBuilder(Order::class)
->disableOriginalConstructor()
->getMock();
/** @var MessageSender|MockObject $sut */
$sut = $this->getMockBuilder(MessageSender::class)
->onlyMethods(['getConfiguration', 'sendMessageByOrder'])
->getMock();
$sut->method('getConfiguration')->willReturn($configurationMock);
if ($throwException) {
$sut->expects($invocationCount)->method('sendMessageByOrder')
->willThrowException(oxNew(noRecipientFoundException::class));
} else {
$sut->expects($invocationCount)->method('sendMessageByOrder');
}
$this->callMethod(
$sut,
'sendSendedNowMessage',
[$orderMock, 'messageBody']
);
}
/**
* @test
*
* @param $actionConfigured
* @param $invocationCount
* @param $throwException
*
* @return void
* @throws ReflectionException
* @dataProvider canSendOrderFinishedMessageDataProvider
* @covers \D3\Linkmobility4OXID\Application\Model\MessageSender::sendCancelOrderMessage
*/
public function canSendCancelOrderMessage($actionConfigured, $invocationCount, $throwException)
{
/** @var Logger|MockObject $loggerMock */
$loggerMock = $this->getMockBuilder(Logger::class)
->onlyMethods(['debug'])
->disableOriginalConstructor()
->getMock();
$loggerMock->expects($this->exactly((int) $throwException))->method('debug');
/** @var LoggerHandler|MockObject $loggerHandlerMock */
$loggerHandlerMock = $this->getMockBuilder(LoggerHandler::class)
->onlyMethods(['getLogger'])
->getMock();
$loggerHandlerMock->method('getLogger')->willReturn($loggerMock);
d3GetOxidDIC()->set(LoggerHandler::class, $loggerHandlerMock);
/** @var Configuration|MockObject $configurationMock */
$configurationMock = $this->getMockBuilder(Configuration::class)
->onlyMethods(['sendOrderCanceledMessage'])
->getMock();
$configurationMock->method('sendOrderCanceledMessage')->willReturn($actionConfigured);
/** @var Order|MockObject $orderMock */
$orderMock = $this->getMockBuilder(Order::class)
->disableOriginalConstructor()
->getMock();
/** @var MessageSender|MockObject $sut */
$sut = $this->getMockBuilder(MessageSender::class)
->onlyMethods(['getConfiguration', 'sendMessageByOrder'])
->getMock();
$sut->method('getConfiguration')->willReturn($configurationMock);
if ($throwException) {
$sut->expects($invocationCount)->method('sendMessageByOrder')
->willThrowException(oxNew(noRecipientFoundException::class));
} else {
$sut->expects($invocationCount)->method('sendMessageByOrder');
}
$this->callMethod(
$sut,
'sendCancelOrderMessage',
[$orderMock, 'messageBody']
);
}
/**
* @return array[]
*/
public function canSendOrderFinishedMessageDataProvider(): array
{
return [
'action configured, no exc' => [true, $this->once(), false],
'action configured, throw exc' => [true, $this->once(), true],
'action not configured' => [false, $this->never(), false],
];
}
/**
* @test
* @param $messageBody
* @param $invocationCount
* @return void
* @throws ReflectionException
* @dataProvider canSendMessageByOrderDataProvider
* @covers \D3\Linkmobility4OXID\Application\Model\MessageSender::sendMessageByOrder
*/
public function canSendMessageByOrder($messageBody, $invocationCount)
{
/** @var Sms|MockObject $smsMock */
$smsMock = $this->getMockBuilder(Sms::class)
->onlyMethods(['sendOrderMessage'])
->disableOriginalConstructor()
->getMock();
$smsMock->expects($invocationCount)->method('sendOrderMessage');
/** @var Order|MockObject $orderMock */
$orderMock = $this->getMockBuilder(Order::class)
->disableOriginalConstructor()
->getMock();
/** @var MessageSender|MockObject $sut */
$sut = $this->getMockBuilder(MessageSender::class)
->onlyMethods(['getSms', 'getConfiguration'])
->getMock();
$sut->method('getSms')->willReturn($smsMock);
$this->callMethod(
$sut,
'sendMessageByOrder',
[$orderMock, $messageBody]
);
}
/**
* @return array
*/
public function canSendMessageByOrderDataProvider(): array
{
return [
'has message body' => ['body', $this->once()],
'spaced message body' => [' ', $this->never()],
'empty message body' => ['', $this->never()],
];
}
/**
* @test
* @return void
* @throws ReflectionException
* @covers \D3\Linkmobility4OXID\Application\Model\MessageSender::getSms
*/
public function canGetSms()
{
/** @var MessageSender|MockObject $sut */
$sut = $this->getMockBuilder(MessageSender::class)
->getMock();
$this->assertInstanceOf(
Sms::class,
$this->callMethod(
$sut,
'getSms',
['messageFixture']
)
);
}
/**
* @test
* @return void
* @throws ReflectionException
* @covers \D3\Linkmobility4OXID\Application\Model\MessageSender::getConfiguration
*/
public function canGetConfiguration()
{
/** @var MessageSender|MockObject $sut */
$sut = $this->getMockBuilder(MessageSender::class)
->onlyMethods(['sendMessageByOrder'])
->getMock();
$this->assertInstanceOf(
Configuration::class,
$this->callMethod(
$sut,
'getConfiguration'
)
);
}
}