Configurable PDF exports (#5641)

This commit is contained in:
Kevin Papst
2025-09-23 18:32:31 +02:00
committed by GitHub
parent 5d3e46cce2
commit 6d78c6ba36
107 changed files with 2428 additions and 1575 deletions

View File

@@ -26,7 +26,7 @@ use Symfony\Component\HttpFoundation\Response;
abstract class AbstractRendererTestCase extends KernelTestCase
{
protected function render(ExportRendererInterface $renderer): Response
protected function render(ExportRendererInterface $renderer, bool $exportDecimal = false): Response
{
$customer = new Customer('Customer Name');
$customer->setNumber('A-0123456789');
@@ -129,11 +129,15 @@ abstract class AbstractRendererTestCase extends KernelTestCase
$entries = [$timesheet, $timesheet2, $timesheet3, $timesheet4, $timesheet5, $timesheet6];
$currentUser = $this->createMock(User::class);
$currentUser->expects($this->any())->method('isExportDecimal')->willReturn($exportDecimal);
$query = new TimesheetQuery();
$query->setActivities([$activity]);
$query->setBegin(new \DateTime());
$query->setEnd(new \DateTime());
$query->setProjects([$project]);
$query->setCurrentUser($currentUser);
return $renderer->render($entries, $query);
}

View File

@@ -10,6 +10,7 @@
namespace App\Tests\Export\Renderer;
use App\Export\Base\CsvRenderer;
use App\Export\ColumnConverter;
use App\Export\Renderer\CsvRendererFactory;
use App\Export\Template;
use PHPUnit\Framework\Attributes\CoversClass;
@@ -24,12 +25,17 @@ class CsvRendererFactoryTest extends TestCase
{
public function testCreate(): void
{
$sut = new CsvRendererFactory(
$this->createMock(EventDispatcherInterface::class),
$dispatcher = $this->createMock(EventDispatcherInterface::class);
$converter = new ColumnConverter(
$dispatcher,
$this->createMock(Security::class),
$this->createMock(TranslatorInterface::class),
$this->createMock(LoggerInterface::class)
);
$sut = new CsvRendererFactory(
$converter,
$dispatcher,
$this->createMock(TranslatorInterface::class),
);
$template = new Template('foo-id', 'bar-title');
$template->setLocale('it_IT');
@@ -39,5 +45,6 @@ class CsvRendererFactoryTest extends TestCase
self::assertInstanceOf(CsvRenderer::class, $renderer);
self::assertEquals('foo-id', $renderer->getId());
self::assertEquals('bar-title', $renderer->getTitle());
self::assertTrue($renderer->isInternal());
}
}

View File

@@ -35,5 +35,6 @@ class HtmlRendererFactoryTest extends TestCase
self::assertInstanceOf(HtmlRenderer::class, $renderer);
self::assertEquals('foo', $renderer->getId());
self::assertEquals('print', $renderer->getTitle());
self::assertFalse($renderer->isInternal());
}
}

View File

@@ -12,6 +12,7 @@ namespace App\Tests\Export\Renderer;
use App\Activity\ActivityStatisticService;
use App\Entity\User;
use App\Export\Base\HtmlRenderer;
use App\Export\Base\RendererTrait;
use App\Project\ProjectStatisticService;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
@@ -23,9 +24,7 @@ use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Twig\Environment;
/**
* @covers \App\Export\Base\RendererTrait
*/
#[CoversClass(RendererTrait::class)]
#[CoversClass(HtmlRenderer::class)]
#[Group('integration')]
class HtmlRendererTest extends AbstractRendererTestCase

View File

@@ -10,27 +10,38 @@
namespace App\Tests\Export\Renderer;
use App\Export\Base\PDFRenderer;
use App\Export\Base\PdfTemplateRenderer;
use App\Export\Renderer\PdfRendererFactory;
use App\Pdf\HtmlToPdfConverter;
use App\Project\ProjectStatisticService;
use App\Export\Template;
use App\Tests\Mocks\Export\PdfRendererFactoryMock;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\TestCase;
use Twig\Environment;
#[CoversClass(PdfRendererFactory::class)]
class PdfRendererFactoryTest extends TestCase
{
public function testCreate(): void
{
$sut = new PdfRendererFactory(
$this->createMock(Environment::class),
$this->createMock(HtmlToPdfConverter::class),
$this->createMock(ProjectStatisticService::class)
);
$mock = new PdfRendererFactoryMock($this);
$sut = $mock->create();
$renderer = $sut->create('foo', 'bar.pdf.twig');
self::assertInstanceOf(PDFRenderer::class, $renderer);
self::assertEquals('foo', $renderer->getId());
self::assertFalse($renderer->isInternal());
}
public function testCreateFromTemplate(): void
{
$mock = new PdfRendererFactoryMock($this);
$sut = $mock->create();
$template = new Template('foo', 'bar');
$renderer = $sut->createFromTemplate($template);
self::assertInstanceOf(PdfTemplateRenderer::class, $renderer);
self::assertEquals('foo', $renderer->getId());
self::assertTrue($renderer->isInternal());
}
}

View File

@@ -10,8 +10,10 @@
namespace App\Tests\Export\Renderer;
use App\Export\Base\PDFRenderer;
use App\Export\Base\RendererTrait;
use App\Pdf\HtmlToPdfConverter;
use App\Pdf\MPdfConverter;
use App\Pdf\PdfRendererTrait;
use App\Project\ProjectStatisticService;
use App\Tests\Mocks\FileHelperFactory;
use PHPUnit\Framework\Attributes\CoversClass;
@@ -20,9 +22,8 @@ use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Twig\Environment;
/**
* @covers \App\Export\Base\RendererTrait
*/
#[CoversClass(PDFRendererTrait::class)]
#[CoversClass(RendererTrait::class)]
#[CoversClass(PDFRenderer::class)]
#[Group('integration')]
class PdfRendererTest extends AbstractRendererTestCase

View File

@@ -10,6 +10,7 @@
namespace App\Tests\Export\Renderer;
use App\Export\Base\XlsxRenderer;
use App\Export\ColumnConverter;
use App\Export\Renderer\XlsxRendererFactory;
use App\Export\Template;
use PHPUnit\Framework\Attributes\CoversClass;
@@ -24,12 +25,17 @@ class XlsxRendererFactoryTest extends TestCase
{
public function testCreate(): void
{
$sut = new XlsxRendererFactory(
$this->createMock(EventDispatcherInterface::class),
$dispatcher = $this->createMock(EventDispatcherInterface::class);
$converter = new ColumnConverter(
$dispatcher,
$this->createMock(Security::class),
$this->createMock(TranslatorInterface::class),
$this->createMock(LoggerInterface::class)
);
$sut = new XlsxRendererFactory(
$converter,
$dispatcher,
$this->createMock(TranslatorInterface::class),
);
$template = new Template('foo-id', 'bar-title');
$template->setLocale('it_IT');
@@ -39,5 +45,6 @@ class XlsxRendererFactoryTest extends TestCase
self::assertInstanceOf(XlsxRenderer::class, $renderer);
self::assertEquals('foo-id', $renderer->getId());
self::assertEquals('bar-title', $renderer->getTitle());
self::assertTrue($renderer->isInternal());
}
}