Files
pdfdokumente/Tests/Unit/Application/Model/AbstractClasses/pdfDocumentsOrder.php

254 lines
7.5 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 <info@shopmodule.com>
* @link https://www.oxidmodule.com
*/
namespace D3\PdfDocuments\Tests\Unit\Application\Model\AbstractClasses;
use Assert\InvalidArgumentException;
use D3\PdfDocuments\Application\Model\Documents\deliverynotePdf;
use Exception;
use Generator;
use OxidEsales\Eshop\Application\Model\Order;
use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory;
use OxidEsales\EshopCommunity\Internal\Framework\Module\Facade\ModuleSettingService;
use OxidEsales\EshopCommunity\Internal\Framework\Module\Facade\ModuleSettingServiceInterface;
use ReflectionException;
abstract class pdfDocumentsOrder extends pdfDocumentsGeneric
{
/**
* @test
* @covers \D3\PdfDocuments\Application\Model\AbstractClasses\pdfdocumentsOrder::getOrder
* @throws ReflectionException
*/
public function testGetUnsetOrder(): void
{
$sut = oxNew($this->sutClassName);
$this->expectException(InvalidArgumentException::class);
$this->callMethod(
$sut,
'getOrder'
);
}
/**
* @test
* @covers \D3\PdfDocuments\Application\Model\AbstractClasses\pdfdocumentsOrder::getOrder
* @throws ReflectionException
*/
public function testGetUnloadedOrder(): void
{
/** @var deliverynotePdf $sut */
$sut = oxNew($this->sutClassName);
$this->expectException(InvalidArgumentException::class);
$sut->setOrder(oxNew(Order::class));
$this->callMethod(
$sut,
'getOrder'
);
}
/**
* @test
* @covers \D3\PdfDocuments\Application\Model\AbstractClasses\pdfdocumentsOrder::getOrder
* @covers \D3\PdfDocuments\Application\Model\AbstractClasses\pdfdocumentsOrder::setOrder
* @throws ReflectionException
*/
public function testGetLoadedOrder(): void
{
/** @var deliverynotePdf $sut */
$sut = oxNew($this->sutClassName);
$order = $this->getMockBuilder(Order::class)
->onlyMethods(['isLoaded'])
->getMock();
$order->method('isLoaded')->willReturn(true);
$sut->setOrder($order);
$this->assertSame(
$order,
$this->callMethod(
$sut,
'getOrder'
)
);
}
/**
* @test
* @covers \D3\PdfDocuments\Application\Model\AbstractClasses\pdfdocumentsOrder::getTemplateEngineVars
* @throws ReflectionException
*/
public function testGetTemplateEngineVars(): void
{
$order = oxNew(Order::class);
$sut = $this->getMockBuilder($this->sutClassName)
->onlyMethods(['getOrder'])
->getMock();
$sut->method('getOrder')->willReturn($order);
$vars = $this->callMethod(
$sut,
'getTemplateEngineVars',
[0]
);
$this->assertArrayHasKey('order', $vars);
$this->assertArrayHasKey('user', $vars);
$this->assertArrayHasKey('payment', $vars);
}
/**
* @test
* @covers \D3\PdfDocuments\Application\Model\AbstractClasses\pdfdocumentsOrder::getFilename
* @covers \D3\PdfDocuments\Application\Model\Documents\invoicePdf::getFilename
* @covers \D3\PdfDocuments\Application\Model\Documents\invoicewithoutlogoPdf::getFilename
* @dataProvider getFileNameDataProvider
* @throws ReflectionException
*/
public function testGetFileName(mixed $predefinedFileName, string $expected): void
{
$order = $this->getMockBuilder(Order::class)
->onlyMethods(['getFieldData'])
->getMock();
$order->method('getFieldData')->willReturnMap([
['oxbilllname', 'billLNameFixture'],
['oxordernr', 'orderNumberFixture'],
]);
$sut = $this->getMockBuilder($this->sutClassName)
->onlyMethods(['getOrder'])
->getMock();
$sut->method('getOrder')->willReturn($order);
if ($predefinedFileName) {
$this->setValue($sut, 'filename', $predefinedFileName);
}
$this->assertSame(
$expected,
$this->callMethod(
$sut,
'getFileName'
)
);
}
abstract public static function getFileNameDataProvider(): Generator;
/**
* @test
* @covers \D3\PdfDocuments\Application\Model\AbstractClasses\pdfdocumentsOrder::getPaymentTerm
* @throws ReflectionException
*/
public function testGetPaymentTerm(): void
{
$settingService = $this->getMockBuilder(ModuleSettingService::class)
->disableOriginalConstructor()
->onlyMethods(['getInteger'])
->getMock();
$settingService->method('getInteger')->willReturn(10);
$this->addServiceMocks([
ModuleSettingServiceInterface::class => $settingService,
]);
$sut = oxNew($this->sutClassName);
try {
$this->assertSame(
10,
$this->callMethod(
$sut,
'getPaymentTerm'
)
);
} finally {
ContainerFactory::resetContainer();
}
}
/**
* @test
* @covers \D3\PdfDocuments\Application\Model\AbstractClasses\pdfdocumentsOrder::getPaymentTerm
* @throws ReflectionException
*/
public function testGetPaymentTermUnknownSetting(): void
{
$settingService = $this->getMockBuilder(ModuleSettingService::class)
->disableOriginalConstructor()
->onlyMethods(['getInteger'])
->getMock();
$settingService->method('getInteger')->willThrowException(new Exception());
$this->addServiceMocks([
ModuleSettingServiceInterface::class => $settingService,
]);
$sut = oxNew($this->sutClassName);
try {
$this->assertSame(
7,
$this->callMethod(
$sut,
'getPaymentTerm'
)
);
} finally {
ContainerFactory::resetContainer();
}
}
/**
* @test
* @covers \D3\PdfDocuments\Application\Model\AbstractClasses\pdfdocumentsOrder::getPayableUntilDate
* @throws ReflectionException
* @dataProvider getPayableUntilDateDataProvider
*/
public function testGetPayableUntilDate($billdate, $expected): void
{
$order = oxNew(Order::class);
$order->assign(['oxbilldate' => $billdate]);
$sut = $this->getMockBuilder($this->sutClassName)
->onlyMethods(['getOrder', 'getPaymentTerm'])
->getMock();
$sut->method('getOrder')->willReturn($order);
$sut->method('getPaymentTerm')->willReturn(10);
$return = $this->callMethod(
$sut,
'getPayableUntilDate'
);
if (is_int($expected)) {
$this->assertSame($expected, $return);
} else {
$this->assertGreaterThan(time(), $return);
}
}
public static function getPayableUntilDateDataProvider(): Generator
{
yield 'date set' => ['2020-01-01', 1578697200];
yield 'zero date set' => ['0000-00-00', null]; // expected greater than now
yield 'date is null' => [null, null]; // expected greater than now
}
}