Next major version 2 with PHP 8.1, Symfony 6, Tabler UI, 2FA ... (#2902)

This commit is contained in:
Kevin Papst
2022-12-31 21:19:55 +01:00
committed by GitHub
parent 95e06746bd
commit 90a0fd8a22
2164 changed files with 83700 additions and 86426 deletions

View File

@@ -9,7 +9,7 @@
namespace App\Tests\Export\Renderer;
use App\Configuration\LanguageFormattings;
use App\Configuration\LocaleService;
use App\Entity\Activity;
use App\Entity\ActivityMeta;
use App\Entity\Customer;
@@ -26,7 +26,7 @@ use App\Event\CustomerMetaDisplayEvent;
use App\Event\ProjectMetaDisplayEvent;
use App\Event\TimesheetMetaDisplayEvent;
use App\Export\ExportRendererInterface;
use App\Export\RendererInterface;
use App\Export\TimesheetExportInterface;
use App\Repository\Query\TimesheetQuery;
use App\Twig\LocaleFormatExtensions;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
@@ -40,14 +40,14 @@ abstract class AbstractRendererTest extends KernelTestCase
{
/**
* @param string $classname
* @return RendererInterface
* @return ExportRendererInterface|TimesheetExportInterface
*/
protected function getAbstractRenderer(string $classname)
{
$languages = [
'en' => [
'date' => 'Y.m.d',
'duration' => '%h:%m h',
'duration' => '%h:%m',
'time' => 'H:i',
]
];
@@ -57,7 +57,7 @@ abstract class AbstractRendererTest extends KernelTestCase
$security->expects($this->any())->method('isGranted')->willReturn(true);
$translator = $this->createMock(TranslatorInterface::class);
$dateExtension = new LocaleFormatExtensions(new LanguageFormattings($languages), $security);
$dateExtension = new LocaleFormatExtensions(new LocaleService($languages), $security);
$dispatcher = new EventDispatcher();
$dispatcher->addSubscriber(new MetaFieldColumnSubscriber());
@@ -71,8 +71,7 @@ abstract class AbstractRendererTest extends KernelTestCase
*/
protected function render(ExportRendererInterface $renderer)
{
$customer = new Customer();
$customer->setName('Customer Name');
$customer = new Customer('Customer Name');
$customer->setNumber('A-0123456789');
$customer->setVatId('DE-9876543210');
$customer->setMetaField((new CustomerMeta())->setName('customer-foo')->setValue('customer-bar')->setIsVisible(true));
@@ -89,19 +88,21 @@ abstract class AbstractRendererTest extends KernelTestCase
$activity->setProject($project);
$activity->setMetaField((new ActivityMeta())->setName('activity-foo')->setValue('activity-bar')->setIsVisible(true));
$userMethods = ['getId', 'getPreferenceValue', 'getUsername'];
$userMethods = ['getId', 'getPreferenceValue', 'getUsername', 'getUserIdentifier'];
$user1 = $this->getMockBuilder(User::class)->onlyMethods($userMethods)->disableOriginalConstructor()->getMock();
$user1->method('getId')->willReturn(1);
$user1->method('getPreferenceValue')->willReturn('50');
$user1->method('getUsername')->willReturn('foo-bar');
$user1->method('getUserIdentifier')->willReturn('foo-bar');
$user2 = $this->getMockBuilder(User::class)->onlyMethods($userMethods)->disableOriginalConstructor()->getMock();
$user2->method('getId')->willReturn(2);
$user2->method('getUsername')->willReturn('hello-world');
$user2->method('getUserIdentifier')->willReturn('hello-world');
$timesheet = new Timesheet();
$timesheet
->setDuration(3600)
->setDuration(3600) // 60 minutes
->setRate(293.27)
->setUser($user1)
->setActivity($activity)
@@ -145,11 +146,14 @@ abstract class AbstractRendererTest extends KernelTestCase
->addTag((new Tag())->setName('foo'))
;
$userKevin = new User();
$userKevin->setUserIdentifier('kevin');
$timesheet5 = new Timesheet();
$timesheet5
->setDuration(400)
->setFixedRate(84)
->setUser((new User())->setUsername('kevin'))
->setUser($userKevin)
->setActivity($activity)
->setProject($project)
->setBegin(new \DateTime('2019-06-16 12:00:00'))
@@ -160,11 +164,14 @@ abstract class AbstractRendererTest extends KernelTestCase
->setMetaField((new TimesheetMeta())->setName('foo2')->setValue('meta-bar2')->setIsVisible(true))
;
$userNivek = new User();
$userNivek->setUserIdentifier('nivek');
$timesheet6 = new Timesheet();
$timesheet6
->setDuration(400)
->setFixedRate(-100.92)
->setUser((new User())->setUsername('nivek'))
->setUser($userNivek)
->setActivity($activity)
->setProject($project)
->setBegin(new \DateTime('2019-06-16 12:00:00'))

View File

@@ -17,7 +17,6 @@ use Symfony\Component\HttpFoundation\BinaryFileResponse;
* @covers \App\Export\Base\AbstractSpreadsheetRenderer
* @covers \App\Export\Base\RendererTrait
* @covers \App\Export\Renderer\CsvRenderer
* @covers \App\Export\Renderer\AbstractSpreadsheetRenderer
* @group integration
*/
class CsvRendererTest extends AbstractRendererTest

View File

@@ -46,7 +46,7 @@ class HtmlRendererTest extends AbstractRendererTest
{
$kernel = self::bootKernel();
/** @var Environment $twig */
$twig = $kernel->getContainer()->get('twig');
$twig = self::getContainer()->get('twig');
$token = $this->createMock(TokenInterface::class);
$token->expects($this->any())->method('getUser')->willReturn(new User());
@@ -57,7 +57,7 @@ class HtmlRendererTest extends AbstractRendererTest
$app = $twig->getGlobals()['app'];
$twig->addGlobal('app', $app);
$app->setTokenStorage($tokenStorage);
$stack = $kernel->getContainer()->get('request_stack');
$stack = self::getContainer()->get('request_stack');
$request = new Request();
$request->setLocale('en');
$stack->push($request);
@@ -74,7 +74,7 @@ class HtmlRendererTest extends AbstractRendererTest
$content = $response->getContent();
$this->assertStringContainsString('<h2 id="doc-title" contenteditable="true"', $content);
$this->assertStringContainsString('<h3 id="doc-summary" contenteditable="true" data-original="Summary">Summary</h3>', $content);
$this->assertStringContainsString('<h3 class="card-title" id="doc-summary" contenteditable="true" data-original="Summary">Summary</h3>', $content);
$this->assertEquals(1, substr_count($content, 'id="export-summary"'));
$this->assertEquals(1, substr_count($content, 'id="export-records"'));
$this->assertEquals(1, substr_count($content, 'id="summary-project"'));
@@ -82,7 +82,7 @@ class HtmlRendererTest extends AbstractRendererTest
$this->assertStringContainsString('<td>Customer Name</td>', $content);
$this->assertStringContainsString('<td>project name</td>', $content);
$this->assertStringContainsString('<span class="duration-format" data-duration="7000">01:56 h</span>', $content);
$this->assertStringContainsString('<span class="duration-format" data-duration-decimal="1.94" data-duration="1:56">1:56</span>', $content);
$this->assertStringContainsString('<td class="cost summary-rate">€2,437.12</td>', $content);
$this->assertStringContainsString('-€100.92', $content);

View File

@@ -11,8 +11,8 @@ namespace App\Tests\Export\Renderer;
use App\Export\Renderer\PDFRenderer;
use App\Export\Renderer\PdfRendererFactory;
use App\Pdf\HtmlToPdfConverter;
use App\Project\ProjectStatisticService;
use App\Utils\HtmlToPdfConverter;
use PHPUnit\Framework\TestCase;
use Twig\Environment;

View File

@@ -10,12 +10,11 @@
namespace App\Tests\Export\Renderer;
use App\Export\Renderer\PDFRenderer;
use App\Pdf\HtmlToPdfConverter;
use App\Pdf\MPdfConverter;
use App\Project\ProjectStatisticService;
use App\Tests\Mocks\FileHelperFactory;
use App\Utils\HtmlToPdfConverter;
use App\Utils\MPdfConverter;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Twig\Environment;
/**
@@ -26,22 +25,6 @@ use Twig\Environment;
*/
class PdfRendererTest extends AbstractRendererTest
{
public function testDisposition()
{
$sut = new PDFRenderer(
$this->createMock(Environment::class),
$this->createMock(HtmlToPdfConverter::class),
$this->createMock(ProjectStatisticService::class)
);
$this->assertEquals(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $sut->getDisposition());
$sut->setDispositionInline(false);
$this->assertEquals(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $sut->getDisposition());
$sut->setDispositionInline(true);
$this->assertEquals(ResponseHeaderBag::DISPOSITION_INLINE, $sut->getDisposition());
$sut->setDispositionInline(false);
$this->assertEquals(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $sut->getDisposition());
}
public function testConfiguration()
{
$sut = new PDFRenderer(
@@ -64,8 +47,8 @@ class PdfRendererTest extends AbstractRendererTest
{
$kernel = self::bootKernel();
/** @var Environment $twig */
$twig = $kernel->getContainer()->get('twig');
$stack = $kernel->getContainer()->get('request_stack');
$twig = self::getContainer()->get('twig');
$stack = self::getContainer()->get('request_stack');
$cacheDir = $kernel->getContainer()->getParameter('kernel.cache_dir');
$converter = new MPdfConverter((new FileHelperFactory($this))->create(), $cacheDir);
$request = new Request();
@@ -74,12 +57,15 @@ class PdfRendererTest extends AbstractRendererTest
$sut = new PDFRenderer($twig, $converter, $this->createMock(ProjectStatisticService::class));
$response = $this->render($sut);
$prefix = date('Ymd');
$response = $this->render($sut);
$this->assertEquals('application/pdf', $response->headers->get('Content-Type'));
$this->assertEquals('attachment; filename=' . $prefix . '-Customer_Name-project_name.pdf', $response->headers->get('Content-Disposition'));
$this->assertNotEmpty($response->getContent());
$sut->setDispositionInline(true);
$response = $this->render($sut);
$this->assertEquals('inline; filename=' . $prefix . '-Customer_Name-project_name.pdf', $response->headers->get('Content-Disposition'));
}
}

View File

@@ -17,7 +17,6 @@ use Symfony\Component\HttpFoundation\BinaryFileResponse;
* @covers \App\Export\Base\AbstractSpreadsheetRenderer
* @covers \App\Export\Base\RendererTrait
* @covers \App\Export\Renderer\XlsxRenderer
* @covers \App\Export\Renderer\AbstractSpreadsheetRenderer
* @group integration
*/
class XlsxRendererTest extends AbstractRendererTest