cleanup global context usage in widgets
This commit is contained in:
34
tests/Controller/WidgetControllerTest.php
Normal file
34
tests/Controller/WidgetControllerTest.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?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\Controller;
|
||||
|
||||
use App\Entity\User;
|
||||
|
||||
/**
|
||||
* @group integration
|
||||
*/
|
||||
class WidgetControllerTest extends ControllerBaseTest
|
||||
{
|
||||
public function testIsSecure()
|
||||
{
|
||||
$this->assertUrlIsSecured('/widgets/working-time/2020/1');
|
||||
}
|
||||
|
||||
public function testWorkingtimechartAction()
|
||||
{
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
|
||||
$this->assertAccessIsGranted($client, '/widgets/working-time/2020/1');
|
||||
|
||||
$content = $client->getResponse()->getContent();
|
||||
self::assertStringContainsString('id="PaginatedWorkingTimeChart"', $content);
|
||||
self::assertStringContainsString('myChart = new Chart', $content);
|
||||
self::assertStringContainsString("KimaiPaginatedBoxWidget.create('#PaginatedWorkingTimeChart');", $content);
|
||||
}
|
||||
}
|
||||
@@ -9,10 +9,8 @@
|
||||
|
||||
namespace App\Tests\Repository;
|
||||
|
||||
use App\Entity\User;
|
||||
use App\Repository\TimesheetRepository;
|
||||
use App\Repository\WidgetRepository;
|
||||
use App\Tests\Mocks\Security\CurrentUserFactory;
|
||||
use App\Widget\Type\CompoundChart;
|
||||
use App\Widget\Type\Counter;
|
||||
use App\Widget\WidgetException;
|
||||
@@ -26,9 +24,8 @@ class WidgetRepositoryTest extends TestCase
|
||||
public function testHasWidget()
|
||||
{
|
||||
$repoMock = $this->createMock(TimesheetRepository::class);
|
||||
$userMock = (new CurrentUserFactory($this))->create(new User());
|
||||
|
||||
$sut = new WidgetRepository($repoMock, $userMock, ['test' => []]);
|
||||
$sut = new WidgetRepository($repoMock, ['test' => []]);
|
||||
|
||||
$this->assertFalse($sut->has('foo'));
|
||||
$this->assertTrue($sut->has('test'));
|
||||
@@ -40,9 +37,8 @@ class WidgetRepositoryTest extends TestCase
|
||||
$this->expectExceptionMessage('Cannot find widget "foo".');
|
||||
|
||||
$repoMock = $this->createMock(TimesheetRepository::class);
|
||||
$userMock = (new CurrentUserFactory($this))->create(new User());
|
||||
|
||||
$sut = new WidgetRepository($repoMock, $userMock, ['test' => []]);
|
||||
$sut = new WidgetRepository($repoMock, ['test' => []]);
|
||||
$sut->get('foo');
|
||||
}
|
||||
|
||||
@@ -52,21 +48,19 @@ class WidgetRepositoryTest extends TestCase
|
||||
$this->expectExceptionMessage('Unknown widget type "FooBar"');
|
||||
|
||||
$repoMock = $this->createMock(TimesheetRepository::class);
|
||||
$userMock = (new CurrentUserFactory($this))->create(new User());
|
||||
|
||||
$sut = new WidgetRepository($repoMock, $userMock, ['test' => ['type' => 'FooBar', 'user' => false]]);
|
||||
$sut = new WidgetRepository($repoMock, ['test' => ['type' => 'FooBar', 'user' => false]]);
|
||||
$sut->get('test');
|
||||
}
|
||||
|
||||
public function testGetWidgetTriggersExceptionOnWrongClass()
|
||||
{
|
||||
$this->expectException(WidgetException::class);
|
||||
$this->expectExceptionMessage('Widget type "App\Widget\Type\CompoundChart" is not an instance of "App\Widget\Type\AbstractWidgetType"');
|
||||
$this->expectExceptionMessage('Widget type "App\Widget\Type\CompoundChart" is not an instance of "App\Widget\Type\SimpleStatisticChart"');
|
||||
|
||||
$repoMock = $this->createMock(TimesheetRepository::class);
|
||||
$userMock = (new CurrentUserFactory($this))->create(new User());
|
||||
|
||||
$sut = new WidgetRepository($repoMock, $userMock, ['test' => ['type' => CompoundChart::class, 'user' => false]]);
|
||||
$sut = new WidgetRepository($repoMock, ['test' => ['type' => CompoundChart::class, 'user' => false]]);
|
||||
$sut->get('test');
|
||||
}
|
||||
|
||||
@@ -78,8 +72,6 @@ class WidgetRepositoryTest extends TestCase
|
||||
$repoMock = $this->createMock(TimesheetRepository::class);
|
||||
$repoMock->method('getStatistic')->willReturn($data);
|
||||
|
||||
$userMock = (new CurrentUserFactory($this))->create(new User());
|
||||
|
||||
$widget = [
|
||||
'color' => 'sunny',
|
||||
'icon' => 'far fa-test',
|
||||
@@ -91,7 +83,7 @@ class WidgetRepositoryTest extends TestCase
|
||||
'type' => Counter::class,
|
||||
];
|
||||
|
||||
$sut = new WidgetRepository($repoMock, $userMock, ['test' => $widget]);
|
||||
$sut = new WidgetRepository($repoMock, ['test' => $widget]);
|
||||
$widget = $sut->get('test');
|
||||
|
||||
$options = $widget->getOptions();
|
||||
|
||||
39
tests/Twig/EventExtensionsTest.php
Normal file
39
tests/Twig/EventExtensionsTest.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?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\Twig;
|
||||
|
||||
use App\Twig\EventExtensions;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Twig\TwigFunction;
|
||||
|
||||
/**
|
||||
* @covers \App\Twig\EventExtensions
|
||||
*/
|
||||
class EventExtensionsTest extends TestCase
|
||||
{
|
||||
protected function getSut(): EventExtensions
|
||||
{
|
||||
return new EventExtensions();
|
||||
}
|
||||
|
||||
public function testGetFunctions()
|
||||
{
|
||||
$functions = ['trigger'];
|
||||
$sut = $this->getSut();
|
||||
$twigFunctions = $sut->getFunctions();
|
||||
self::assertCount(\count($functions), $twigFunctions);
|
||||
$i = 0;
|
||||
/** @var TwigFunction $filter */
|
||||
foreach ($twigFunctions as $filter) {
|
||||
self::assertInstanceOf(TwigFunction::class, $filter);
|
||||
self::assertEquals($functions[$i++], $filter->getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
48
tests/Twig/Runtime/ThemeEventExtensionTest.php
Normal file
48
tests/Twig/Runtime/ThemeEventExtensionTest.php
Normal file
@@ -0,0 +1,48 @@
|
||||
<?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\Twig\Runtime;
|
||||
|
||||
use App\Entity\User;
|
||||
use App\Event\ThemeEvent;
|
||||
use App\Tests\Mocks\Security\CurrentUserFactory;
|
||||
use App\Twig\Runtime\ThemeEventExtension;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||
|
||||
/**
|
||||
* @covers \App\Twig\Runtime\ThemeEventExtension
|
||||
*/
|
||||
class ThemeEventExtensionTest extends TestCase
|
||||
{
|
||||
protected function getSut(bool $hasListener = true): ThemeEventExtension
|
||||
{
|
||||
$dispatcher = $this->createMock(EventDispatcherInterface::class);
|
||||
$dispatcher->expects($this->once())->method('hasListeners')->willReturn($hasListener);
|
||||
$dispatcher->expects($hasListener ? $this->once() : $this->never())->method('dispatch');
|
||||
|
||||
$user = (new CurrentUserFactory($this))->create(new User());
|
||||
|
||||
return new ThemeEventExtension($dispatcher, $user);
|
||||
}
|
||||
|
||||
public function testTrigger()
|
||||
{
|
||||
$sut = $this->getSut();
|
||||
$event = $sut->trigger('foo', []);
|
||||
self::assertInstanceOf(ThemeEvent::class, $event);
|
||||
}
|
||||
|
||||
public function testTriggerWithoutListener()
|
||||
{
|
||||
$sut = $this->getSut(false);
|
||||
$event = $sut->trigger('foo', []);
|
||||
self::assertInstanceOf(ThemeEvent::class, $event);
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@
|
||||
namespace App\Tests\Twig;
|
||||
|
||||
use App\Twig\WidgetExtension;
|
||||
use App\Widget\Type\Counter;
|
||||
use App\Widget\Type\More;
|
||||
use App\Widget\WidgetInterface;
|
||||
use App\Widget\WidgetRendererInterface;
|
||||
use App\Widget\WidgetService;
|
||||
@@ -72,7 +72,7 @@ class WidgetExtensionTest extends TestCase
|
||||
|
||||
public function testRenderWidgetByString()
|
||||
{
|
||||
$widget = new Counter();
|
||||
$widget = new More();
|
||||
$sut = $this->getSut(true, $widget, new TestRenderer());
|
||||
$options = ['foo' => 'bar', 'dataType' => 'blub'];
|
||||
$result = $sut->renderWidget('test', $options);
|
||||
@@ -82,7 +82,7 @@ class WidgetExtensionTest extends TestCase
|
||||
|
||||
public function testRenderWidgetObject()
|
||||
{
|
||||
$widget = new Counter();
|
||||
$widget = new More();
|
||||
$sut = $this->getSut(null, null, new TestRenderer());
|
||||
$options = ['foo' => 'bar', 'dataType' => 'blub'];
|
||||
$result = $sut->renderWidget($widget, $options);
|
||||
|
||||
@@ -12,7 +12,7 @@ namespace App\Tests\Widget\Renderer;
|
||||
use App\Widget\Renderer\CompoundChartRenderer;
|
||||
use App\Widget\Type\CompoundChart;
|
||||
use App\Widget\Type\CompoundRow;
|
||||
use App\Widget\Type\Counter;
|
||||
use App\Widget\Type\More;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Twig\Environment;
|
||||
|
||||
@@ -40,7 +40,7 @@ class CompoundChartRendererTest extends TestCase
|
||||
$sut = new CompoundChartRenderer($twig);
|
||||
$row = new CompoundChart();
|
||||
$row->setTitle('foo-bar');
|
||||
$row->addWidget(new Counter());
|
||||
$row->addWidget(new More());
|
||||
|
||||
$result = $sut->render($row);
|
||||
$result = json_decode($result, true);
|
||||
|
||||
@@ -12,7 +12,7 @@ namespace App\Tests\Widget\Renderer;
|
||||
use App\Widget\Renderer\CompoundRowRenderer;
|
||||
use App\Widget\Type\CompoundChart;
|
||||
use App\Widget\Type\CompoundRow;
|
||||
use App\Widget\Type\Counter;
|
||||
use App\Widget\Type\More;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Twig\Environment;
|
||||
|
||||
@@ -40,7 +40,7 @@ class CompoundRowRendererTest extends TestCase
|
||||
$sut = new CompoundRowRenderer($twig);
|
||||
$row = new CompoundRow();
|
||||
$row->setTitle('foo-bar');
|
||||
$row->addWidget(new Counter());
|
||||
$row->addWidget(new More());
|
||||
|
||||
$result = $sut->render($row);
|
||||
$result = json_decode($result, true);
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
namespace App\Tests\Widget\Renderer;
|
||||
|
||||
use App\Widget\Renderer\SimpleWidgetRenderer;
|
||||
use App\Widget\Type\Counter;
|
||||
use App\Widget\Type\More;
|
||||
use App\Widget\Type\SimpleWidget;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
@@ -60,7 +59,6 @@ class SimpleWidgetRendererTest extends TestCase
|
||||
{
|
||||
return [
|
||||
[new SimpleWidget(), 'widget/widget-simplewidget.html.twig', 'yellow'],
|
||||
[new Counter(), 'widget/widget-counter.html.twig', 'asdfgh'],
|
||||
[new More(), 'widget/widget-more.html.twig', '#123456'],
|
||||
];
|
||||
}
|
||||
|
||||
26
tests/Widget/Type/AbstractSimpleStatisticsWidgetTypeTest.php
Normal file
26
tests/Widget/Type/AbstractSimpleStatisticsWidgetTypeTest.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?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\Widget\Type;
|
||||
|
||||
/**
|
||||
* @covers \App\Widget\Type\SimpleStatisticChart
|
||||
*/
|
||||
abstract class AbstractSimpleStatisticsWidgetTypeTest extends AbstractWidgetTypeTest
|
||||
{
|
||||
public function testData()
|
||||
{
|
||||
$sut = $this->createSut();
|
||||
|
||||
$this->expectException(\InvalidArgumentException::class);
|
||||
$this->expectExceptionMessage('Cannot set data on instances of SimpleStatisticChart');
|
||||
|
||||
$sut->setData(10);
|
||||
}
|
||||
}
|
||||
@@ -38,7 +38,6 @@ abstract class AbstractWidgetTypeTest extends TestCase
|
||||
self::assertInstanceOf(AbstractWidgetType::class, $sut->setOptions([]));
|
||||
self::assertInstanceOf(AbstractWidgetType::class, $sut->setId(''));
|
||||
self::assertInstanceOf(AbstractWidgetType::class, $sut->setTitle(''));
|
||||
self::assertInstanceOf(AbstractWidgetType::class, $sut->setData(''));
|
||||
}
|
||||
|
||||
public function testSetter()
|
||||
@@ -57,8 +56,14 @@ abstract class AbstractWidgetTypeTest extends TestCase
|
||||
// id
|
||||
$sut->setId('cvbnmyx');
|
||||
self::assertEquals('cvbnmyx', $sut->getId());
|
||||
}
|
||||
|
||||
public function testData()
|
||||
{
|
||||
$sut = $this->createSut();
|
||||
|
||||
self::assertInstanceOf(AbstractWidgetType::class, $sut->setData(''));
|
||||
|
||||
// data
|
||||
$sut->setData('slkudfhalksjdhfkljsahdf');
|
||||
self::assertEquals('slkudfhalksjdhfkljsahdf', $sut->getData());
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
namespace App\Tests\Widget\Type;
|
||||
|
||||
use App\Repository\TimesheetRepository;
|
||||
use App\Widget\Type\AbstractWidgetType;
|
||||
use App\Widget\Type\Counter;
|
||||
use App\Widget\Type\SimpleWidget;
|
||||
@@ -17,11 +18,14 @@ use App\Widget\Type\SimpleWidget;
|
||||
* @covers \App\Widget\Type\Counter
|
||||
* @covers \App\Widget\Type\SimpleWidget
|
||||
*/
|
||||
class CounterTest extends AbstractWidgetTypeTest
|
||||
class CounterTest extends AbstractSimpleStatisticsWidgetTypeTest
|
||||
{
|
||||
public function createSut(): AbstractWidgetType
|
||||
{
|
||||
return new Counter();
|
||||
$sut = new Counter($this->createMock(TimesheetRepository::class));
|
||||
$sut->setQuery(TimesheetRepository::STATS_QUERY_ACTIVE);
|
||||
|
||||
return $sut;
|
||||
}
|
||||
|
||||
public function getDefaultOptions(): array
|
||||
@@ -37,7 +41,8 @@ class CounterTest extends AbstractWidgetTypeTest
|
||||
|
||||
public function testTemplateName()
|
||||
{
|
||||
$sut = new Counter();
|
||||
/** @var Counter $sut */
|
||||
$sut = $this->createSut();
|
||||
self::assertEquals('widget/widget-counter.html.twig', $sut->getTemplateName());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,8 +12,6 @@ namespace App\Tests\Widget\Type;
|
||||
use App\Entity\User;
|
||||
use App\Model\Statistic\Day;
|
||||
use App\Repository\TimesheetRepository;
|
||||
use App\Tests\Mocks\Security\CurrentUserFactory;
|
||||
use App\Tests\Mocks\Security\UserDateTimeFactoryFactory;
|
||||
use App\Widget\Type\AbstractWidgetType;
|
||||
use App\Widget\Type\DailyWorkingTimeChart;
|
||||
use App\Widget\Type\SimpleWidget;
|
||||
@@ -30,11 +28,11 @@ class DailyWorkingTimeChartTest extends TestCase
|
||||
public function createSut(): AbstractWidgetType
|
||||
{
|
||||
$repository = $this->createMock(TimesheetRepository::class);
|
||||
$mockFactory = new UserDateTimeFactoryFactory($this);
|
||||
$userFactory = new CurrentUserFactory($this);
|
||||
$user = $userFactory->create(new User(), 'Europe/Berlin');
|
||||
|
||||
return new DailyWorkingTimeChart($repository, $user, $mockFactory->create('Europe/Berlin'));
|
||||
$sut = new DailyWorkingTimeChart($repository);
|
||||
$sut->setUser(new User());
|
||||
|
||||
return $sut;
|
||||
}
|
||||
|
||||
public function testExtendsSimpleWidget()
|
||||
@@ -107,12 +105,8 @@ class DailyWorkingTimeChartTest extends TestCase
|
||||
];
|
||||
});
|
||||
|
||||
$userFactory = new CurrentUserFactory($this);
|
||||
$user = $userFactory->create(new User(), 'Europe/Berlin');
|
||||
|
||||
$mockFactory = new UserDateTimeFactoryFactory($this);
|
||||
|
||||
$sut = new DailyWorkingTimeChart($repository, $user, $mockFactory->create('Europe/Berlin'));
|
||||
$sut = new DailyWorkingTimeChart($repository);
|
||||
$sut->setUser(new User());
|
||||
$data = $sut->getData([]);
|
||||
self::assertCount(2, $data);
|
||||
self::assertArrayHasKey('activities', $data);
|
||||
|
||||
@@ -9,17 +9,21 @@
|
||||
|
||||
namespace App\Tests\Widget\Type;
|
||||
|
||||
use App\Repository\TimesheetRepository;
|
||||
use App\Widget\Type\AbstractWidgetType;
|
||||
use App\Widget\Type\YearChart;
|
||||
|
||||
/**
|
||||
* @covers \App\Widget\Type\YearChart
|
||||
*/
|
||||
class YearChartTest extends AbstractWidgetTypeTest
|
||||
class YearChartTest extends AbstractSimpleStatisticsWidgetTypeTest
|
||||
{
|
||||
public function createSut(): AbstractWidgetType
|
||||
{
|
||||
return new YearChart();
|
||||
$sut = new YearChart($this->createMock(TimesheetRepository::class));
|
||||
$sut->setQuery(TimesheetRepository::STATS_QUERY_ACTIVE);
|
||||
|
||||
return $sut;
|
||||
}
|
||||
|
||||
public function getDefaultOptions(): array
|
||||
|
||||
Reference in New Issue
Block a user