customize html and pdf exports with twig templates (#1582)

This commit is contained in:
Kevin Papst
2020-03-23 01:51:02 +01:00
committed by GitHub
parent 1ca1b00d11
commit 33f76f426c
32 changed files with 895 additions and 307 deletions

View File

@@ -25,6 +25,7 @@ use App\Event\ActivityMetaDisplayEvent;
use App\Event\CustomerMetaDisplayEvent;
use App\Event\ProjectMetaDisplayEvent;
use App\Event\TimesheetMetaDisplayEvent;
use App\Export\ExportRendererInterface;
use App\Export\RendererInterface;
use App\Repository\Query\TimesheetQuery;
use App\Twig\DateExtensions;
@@ -74,10 +75,10 @@ abstract class AbstractRendererTest extends KernelTestCase
}
/**
* @param RendererInterface $renderer
* @param ExportRendererInterface $renderer
* @return \Symfony\Component\HttpFoundation\Response
*/
protected function render(RendererInterface $renderer)
protected function render(ExportRendererInterface $renderer)
{
$customer = new Customer();
$customer->setName('Customer Name');

View File

@@ -0,0 +1,38 @@
<?php
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace App\Tests\Export\Renderer;
use App\Export\Renderer\HtmlRenderer;
use App\Export\Renderer\HtmlRendererFactory;
use App\Repository\ProjectRepository;
use PHPUnit\Framework\TestCase;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Twig\Environment;
/**
* @covers \App\Export\Renderer\HtmlRendererFactory
*/
class HtmlRendererFactoryTest extends TestCase
{
public function testCreate()
{
$sut = new HtmlRendererFactory(
$this->createMock(Environment::class),
$this->createMock(EventDispatcherInterface::class),
$this->createMock(ProjectRepository::class)
);
/** @var HtmlRenderer $renderer */
$renderer = $sut->create('foo', 'bar.html.twig');
self::assertInstanceOf(HtmlRenderer::class, $renderer);
self::assertEquals('foo', $renderer->getId());
}
}

View File

@@ -10,6 +10,7 @@
namespace App\Tests\Export\Renderer;
use App\Export\Renderer\HtmlRenderer;
use App\Repository\ProjectRepository;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\HttpFoundation\Request;
use Twig\Environment;
@@ -26,7 +27,8 @@ class HtmlRendererTest extends AbstractRendererTest
{
$sut = new HtmlRenderer(
$this->createMock(Environment::class),
new EventDispatcher()
new EventDispatcher(),
$this->createMock(ProjectRepository::class)
);
$this->assertEquals('html', $sut->getId());
@@ -44,7 +46,7 @@ class HtmlRendererTest extends AbstractRendererTest
$request->setLocale('en');
$stack->push($request);
$sut = new HtmlRenderer($twig, new EventDispatcher());
$sut = new HtmlRenderer($twig, new EventDispatcher(), $this->createMock(ProjectRepository::class));
$response = $this->render($sut);

View File

@@ -0,0 +1,41 @@
<?php
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace App\Tests\Export\Renderer;
use App\Export\Renderer\HtmlRenderer;
use App\Export\Renderer\PDFRenderer;
use App\Export\Renderer\PdfRendererFactory;
use App\Repository\ProjectRepository;
use App\Timesheet\UserDateTimeFactory;
use App\Utils\HtmlToPdfConverter;
use PHPUnit\Framework\TestCase;
use Twig\Environment;
/**
* @covers \App\Export\Renderer\PdfRendererFactory
*/
class PdfRendererFactoryTest extends TestCase
{
public function testCreate()
{
$sut = new PdfRendererFactory(
$this->createMock(Environment::class),
$this->createMock(UserDateTimeFactory::class),
$this->createMock(HtmlToPdfConverter::class),
$this->createMock(ProjectRepository::class)
);
/** @var HtmlRenderer $renderer */
$renderer = $sut->create('foo', 'bar.pdf.twig');
self::assertInstanceOf(PDFRenderer::class, $renderer);
self::assertEquals('foo', $renderer->getId());
}
}

View File

@@ -10,6 +10,7 @@
namespace App\Tests\Export\Renderer;
use App\Export\Renderer\PDFRenderer;
use App\Repository\ProjectRepository;
use App\Tests\Mocks\Security\UserDateTimeFactoryFactory;
use App\Utils\HtmlToPdfConverter;
use App\Utils\MPdfConverter;
@@ -34,7 +35,8 @@ class PdfRendererTest extends AbstractRendererTest
$sut = new PDFRenderer(
$this->createMock(Environment::class),
$this->getDateTimeFactory(),
$this->createMock(HtmlToPdfConverter::class)
$this->createMock(HtmlToPdfConverter::class),
$this->createMock(ProjectRepository::class)
);
$this->assertEquals('pdf', $sut->getId());
@@ -54,7 +56,7 @@ class PdfRendererTest extends AbstractRendererTest
$request->setLocale('en');
$stack->push($request);
$sut = new PDFRenderer($twig, $this->getDateTimeFactory(), $converter);
$sut = new PDFRenderer($twig, $this->getDateTimeFactory(), $converter, $this->createMock(ProjectRepository::class));
$response = $this->render($sut);