customize html and pdf exports with twig templates (#1582)
This commit is contained in:
@@ -88,8 +88,8 @@ class ExportControllerTest extends ControllerBaseTest
|
||||
$this->assertDataTableRowCount($client, 'datatable_export', 23);
|
||||
|
||||
// assert export type buttons are available
|
||||
$expected = ['csv', 'html', 'pdf', 'xlsx'];
|
||||
$node = $client->getCrawler()->filter('#export-buttons button');
|
||||
$expected = ['csv', 'default.html.twig', 'default-budget.pdf.twig', 'default.pdf.twig', 'xlsx'];
|
||||
$node = $client->getCrawler()->filter('#export-buttons .startExportBtn');
|
||||
$this->assertEquals(count($expected), $node->count());
|
||||
/** @var \DOMElement $button */
|
||||
foreach ($node->getIterator() as $button) {
|
||||
@@ -140,8 +140,8 @@ class ExportControllerTest extends ControllerBaseTest
|
||||
$this->assertDataTableRowCount($client, 'datatable_export', 3);
|
||||
|
||||
// assert export type buttons are available
|
||||
$expected = ['csv', 'html', 'pdf', 'xlsx'];
|
||||
$node = $client->getCrawler()->filter('#export-buttons button');
|
||||
$expected = ['csv', 'default.html.twig', 'default-budget.pdf.twig', 'default.pdf.twig', 'xlsx'];
|
||||
$node = $client->getCrawler()->filter('#export-buttons .startExportBtn');
|
||||
$this->assertEquals(count($expected), $node->count());
|
||||
/** @var \DOMElement $button */
|
||||
foreach ($node->getIterator() as $button) {
|
||||
@@ -208,7 +208,7 @@ class ExportControllerTest extends ControllerBaseTest
|
||||
|
||||
// don't add daterange to make sure the current month is the default range
|
||||
$client->submit($form, [
|
||||
'type' => 'html',
|
||||
'type' => 'default.html.twig',
|
||||
'markAsExported' => 1
|
||||
]);
|
||||
|
||||
|
||||
@@ -292,6 +292,14 @@ class ConfigurationTest extends TestCase
|
||||
'simple_form' => true,
|
||||
'number_format' => '{Y}/{cy,3}',
|
||||
],
|
||||
'export' => [
|
||||
'documents' => [
|
||||
],
|
||||
'defaults' => [
|
||||
0 => 'var/export/',
|
||||
1 => 'templates/export/renderer/',
|
||||
],
|
||||
],
|
||||
'languages' => [],
|
||||
'calendar' => [
|
||||
'week_numbers' => true,
|
||||
|
||||
@@ -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');
|
||||
|
||||
38
tests/Export/Renderer/HtmlRendererFactoryTest.php
Normal file
38
tests/Export/Renderer/HtmlRendererFactoryTest.php
Normal 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());
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
|
||||
41
tests/Export/Renderer/PdfRendererFactoryTest.php
Normal file
41
tests/Export/Renderer/PdfRendererFactoryTest.php
Normal 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());
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ namespace App\Tests\Export;
|
||||
use App\Export\Renderer\HtmlRenderer;
|
||||
use App\Export\ServiceExport;
|
||||
use App\Export\Timesheet\HtmlRenderer as HtmlExporter;
|
||||
use App\Repository\ProjectRepository;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\EventDispatcher\EventDispatcher;
|
||||
use Twig\Environment;
|
||||
@@ -36,7 +37,7 @@ class ServiceExportTest extends TestCase
|
||||
{
|
||||
$sut = new ServiceExport();
|
||||
|
||||
$renderer = new HtmlRenderer($this->createMock(Environment::class), new EventDispatcher());
|
||||
$renderer = new HtmlRenderer($this->createMock(Environment::class), new EventDispatcher(), $this->createMock(ProjectRepository::class));
|
||||
$sut->addRenderer($renderer);
|
||||
|
||||
self::assertEquals(1, count($sut->getRenderer()));
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
namespace App\Tests\Export\Timesheet;
|
||||
|
||||
use App\Export\Timesheet\PDFRenderer;
|
||||
use App\Repository\ProjectRepository;
|
||||
use App\Tests\Mocks\Security\UserDateTimeFactoryFactory;
|
||||
use App\Utils\HtmlToPdfConverter;
|
||||
use App\Utils\MPdfConverter;
|
||||
@@ -32,9 +33,10 @@ class PdfRendererTest extends AbstractRendererTest
|
||||
public function testConfiguration()
|
||||
{
|
||||
$sut = new PDFRenderer(
|
||||
$this->getMockBuilder(Environment::class)->disableOriginalConstructor()->getMock(),
|
||||
$this->createMock(Environment::class),
|
||||
$this->getDateTimeFactory(),
|
||||
$this->getMockBuilder(HtmlToPdfConverter::class)->getMock()
|
||||
$this->createMock(HtmlToPdfConverter::class),
|
||||
$this->createMock(ProjectRepository::class)
|
||||
);
|
||||
|
||||
$this->assertEquals('pdf', $sut->getId());
|
||||
@@ -52,7 +54,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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user