diff --git a/Application/Model/AbstractClasses/pdfdocumentsGeneric.php b/Application/Model/AbstractClasses/pdfdocumentsGeneric.php index e5ca5d3..0591fea 100644 --- a/Application/Model/AbstractClasses/pdfdocumentsGeneric.php +++ b/Application/Model/AbstractClasses/pdfdocumentsGeneric.php @@ -242,6 +242,9 @@ abstract class pdfdocumentsGeneric extends Base implements genericInterface ->getTemplateRenderer(); } + /** + * @codeCoverageIgnore + */ public function getPdfProperties(): array { return [ diff --git a/Tests/Unit/Application/Model/Documents/nonOrderDocumentTest.php b/Tests/Unit/Application/Model/Documents/nonOrderDocumentTest.php index 5d9beed..6506d1d 100644 --- a/Tests/Unit/Application/Model/Documents/nonOrderDocumentTest.php +++ b/Tests/Unit/Application/Model/Documents/nonOrderDocumentTest.php @@ -18,10 +18,18 @@ use D3\PdfDocuments\Application\Model\AbstractClasses\pdfdocumentsGeneric as pdf use D3\PdfDocuments\Tests\Unit\Application\Model\AbstractClasses\pdfDocumentsGeneric; use D3\PdfDocuments\Tests\Unit\Helpers\nonOrderDocument; use Generator; +use OxidEsales\Eshop\Core\Config; use OxidEsales\Eshop\Core\Registry; use OxidEsales\Eshop\Core\Utils; use OxidEsales\Eshop\Core\UtilsView; +use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory; +use OxidEsales\EshopCommunity\Internal\Framework\Module\Facade\ModuleSettingService; +use OxidEsales\EshopCommunity\Internal\Framework\Module\Facade\ModuleSettingServiceInterface; +use OxidEsales\EshopCommunity\Internal\Framework\Templating\TemplateRenderer; +use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\Rule\InvocationOrder; use ReflectionException; +use Symfony\Component\String\UnicodeString; class nonOrderDocumentTest extends pdfDocumentsGeneric { @@ -122,4 +130,143 @@ class nonOrderDocumentTest extends pdfDocumentsGeneric yield 'no exception' => [false, 'pdfContentFixture']; yield 'exception' => [true, null]; } + + /** + * @test + * @covers \D3\PdfDocuments\Application\Model\AbstractClasses\pdfdocumentsGeneric::getHTMLContent + * @throws ReflectionException + */ + public function testGetHTMLContent(): void + { + $templateRender = $this->getMockBuilder(TemplateRenderer::class) + ->onlyMethods(['renderTemplate']) + ->disableOriginalConstructor() + ->getMock(); + $templateRender->method('renderTemplate')->willReturn('htmlContentFixture'); + + $sut = $this->getMockBuilder($this->sutClassName) + ->onlyMethods(['getTemplateRenderer', 'addBasicAuth']) + ->getMock(); + $sut->method('getTemplateRenderer')->willReturn($templateRender); + $sut->method('addBasicAuth')->willReturnArgument(0); + + $this->assertSame( + 'htmlContentFixture', + $this->callMethod( + $sut, + 'getHTMLContent', + ) + ); + } + + /** + * @test + * @covers \D3\PdfDocuments\Application\Model\AbstractClasses\pdfdocumentsGeneric::addBasicAuth + * @throws ReflectionException + * @dataProvider addBasicAuthDataProvider + */ + public function testAddBasicAuth(string $credential, string $expected): void + { + $source = 'image'; + + $settingService = $this->getMockBuilder(ModuleSettingService::class) + ->onlyMethods(['getString']) + ->disableOriginalConstructor() + ->getMock(); + $settingService->method('getString')->willReturn(new UnicodeString($credential)); + + $config = $this->getMockBuilder(Config::class) + ->onlyMethods(['getShopCurrentUrl']) + ->getMock(); + $config->method('getShopCurrentUrl')->willReturn('https://www.test.dev/index.php'); + + $this->addServiceMocks([ModuleSettingServiceInterface::class => $settingService]); + $currentConfig = Registry::getConfig(); + Registry::set(Config::class, $config); + + $sut = oxNew($this->sutClassName); + + try { + $this->assertSame( + $expected, + $this->callMethod( + $sut, + 'addBasicAuth', + [ $source ] + ) + ); + } finally { + Registry::set(Config::class, $currentConfig); + ContainerFactory::resetContainer(); + } + } + + public static function addBasicAuthDataProvider(): Generator + { + yield 'no credential' => ['', 'image']; + yield 'credential' => ['crd', 'image']; + } + + /** + * @test + * @covers \D3\PdfDocuments\Application\Model\AbstractClasses\pdfdocumentsGeneric::setFilename + * @covers \D3\PdfDocuments\Application\Model\AbstractClasses\pdfdocumentsGeneric::getFilename + * @throws ReflectionException + * @dataProvider setFilenameDataProvider + */ + public function testGetFileName(?string $setFileName, InvocationOrder $getTypeInvocation, string $expected): void + { + /** @var MockObject|nonOrderDocument $sut */ + $sut = $this->getMockBuilder($this->sutClassName) + ->onlyMethods(['sanitizeFileName', 'addFilenameExtension', 'getTypeForFilename']) + ->getMock(); + $sut->expects($this->once())->method('sanitizeFileName')->willReturnArgument(0); + $sut->expects($this->once())->method('addFilenameExtension')->willReturnArgument(0); + $sut->expects($getTypeInvocation)->method('getTypeForFilename')->willReturn('docType'); + + if ($setFileName) { + $sut->setFileName($setFileName); + } + + $this->assertSame( + $expected, + $this->callMethod( + $sut, + 'getFileName' + ) + ); + } + + public static function setFilenameDataProvider(): Generator + { + yield 'no set filename' => [null, self::once(), 'docType']; + yield 'set filename' => ['document', self::never(), 'document']; + } + + /** + * @test + * @covers \D3\PdfDocuments\Application\Model\AbstractClasses\pdfdocumentsGeneric::addFilenameExtension + * @throws ReflectionException + * @dataProvider addFilenameExtensionDataProvider + */ + public function testAddFilenameExtension(string $filename, string $expected): void + { + $sut = oxNew($this->sutClassName); + + $this->assertSame( + $expected, + $this->callMethod( + $sut, + 'addFilenameExtension', + [$filename] + ) + ); + } + + public static function addFilenameExtensionDataProvider(): Generator + { + yield 'no extension' => ['document', 'document.pdf'];; + yield 'with extension' => ['document.pdf', 'document.pdf'];; + yield 'with different extensions' => ['document.txt', 'document.txt.pdf']; + } } \ No newline at end of file