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

@@ -1,54 +0,0 @@
<?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\Renderer;
use App\Widget\Renderer\CompoundChartRenderer;
use App\Widget\Type\CompoundChart;
use App\Widget\Type\CompoundRow;
use App\Widget\Type\More;
use PHPUnit\Framework\TestCase;
use Twig\Environment;
/**
* @covers \App\Widget\Renderer\CompoundChartRenderer
* @covers \App\Widget\Renderer\AbstractTwigRenderer
*/
class CompoundChartRendererTest extends TestCase
{
public function testSupports()
{
$twig = $this->createMock(Environment::class);
$sut = new CompoundChartRenderer($twig);
self::assertTrue($sut->supports(new CompoundChart()));
self::assertFalse($sut->supports(new CompoundRow()));
}
public function testRenderWithCounter()
{
$twig = $this->getMockBuilder(Environment::class)->disableOriginalConstructor()->onlyMethods(['render'])->getMock();
$twig->expects($this->once())->method('render')->willReturnCallback(function ($name, $options) {
return json_encode([$name, $options]);
});
$sut = new CompoundChartRenderer($twig);
$row = new CompoundChart();
$row->setTitle('foo-bar');
$row->addWidget(new More());
$result = $sut->render($row);
$result = json_decode($result, true);
self::assertEquals('widget/section-chart.html.twig', $result[0]);
self::assertArrayHasKey('title', $result[1]);
self::assertEquals('foo-bar', $result[1]['title']);
self::assertArrayHasKey('widgets', $result[1]);
self::assertIsArray($result[1]['widgets']);
self::assertCount(1, $result[1]['widgets']);
}
}

View File

@@ -1,54 +0,0 @@
<?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\Renderer;
use App\Widget\Renderer\CompoundRowRenderer;
use App\Widget\Type\CompoundChart;
use App\Widget\Type\CompoundRow;
use App\Widget\Type\More;
use PHPUnit\Framework\TestCase;
use Twig\Environment;
/**
* @covers \App\Widget\Renderer\CompoundRowRenderer
* @covers \App\Widget\Renderer\AbstractTwigRenderer
*/
class CompoundRowRendererTest extends TestCase
{
public function testSupports()
{
$twig = $this->createMock(Environment::class);
$sut = new CompoundRowRenderer($twig);
self::assertTrue($sut->supports(new CompoundRow()));
self::assertFalse($sut->supports(new CompoundChart()));
}
public function testRenderWithCounter()
{
$twig = $this->getMockBuilder(Environment::class)->disableOriginalConstructor()->onlyMethods(['render'])->getMock();
$twig->expects($this->once())->method('render')->willReturnCallback(function ($name, $options) {
return json_encode([$name, $options]);
});
$sut = new CompoundRowRenderer($twig);
$row = new CompoundRow();
$row->setTitle('foo-bar');
$row->addWidget(new More());
$result = $sut->render($row);
$result = json_decode($result, true);
self::assertEquals('widget/section-simple.html.twig', $result[0]);
self::assertArrayHasKey('title', $result[1]);
self::assertEquals('foo-bar', $result[1]['title']);
self::assertArrayHasKey('widgets', $result[1]);
self::assertIsArray($result[1]['widgets']);
self::assertCount(1, $result[1]['widgets']);
}
}

View File

@@ -1,65 +0,0 @@
<?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\Renderer;
use App\Widget\Renderer\SimpleWidgetRenderer;
use App\Widget\Type\More;
use App\Widget\Type\SimpleWidget;
use PHPUnit\Framework\TestCase;
use Twig\Environment;
/**
* @covers \App\Widget\Renderer\SimpleWidgetRenderer
* @covers \App\Widget\Renderer\AbstractTwigRenderer
*/
class SimpleWidgetRendererTest extends TestCase
{
public function testSupports()
{
$twig = $this->createMock(Environment::class);
$sut = new SimpleWidgetRenderer($twig);
self::assertTrue($sut->supports(new SimpleWidget()));
}
/**
* @dataProvider getSimpleWidgetsData
*/
public function testRenderWithCounter(SimpleWidget $widget, $template, $color)
{
$twig = $this->getMockBuilder(Environment::class)->disableOriginalConstructor()->onlyMethods(['render'])->getMock();
$twig->expects($this->once())->method('render')->willReturnCallback(function ($name, $options) {
return json_encode([$name, $options]);
});
$sut = new SimpleWidgetRenderer($twig);
$data = uniqid(\get_class($widget));
$widget->setData($data);
$result = $sut->render($widget, ['color' => $color]);
$result = json_decode($result, true);
self::assertEquals($template, $result[0]);
self::assertArrayHasKey('data', $result[1]);
self::assertEquals($data, $result[1]['data']);
self::assertArrayHasKey('title', $result[1]);
self::assertArrayHasKey('options', $result[1]);
self::assertIsArray($result[1]['options']);
self::assertArrayHasKey('color', $result[1]['options']);
self::assertEquals($color, $result[1]['options']['color']);
}
public function getSimpleWidgetsData()
{
return [
[new SimpleWidget(), 'widget/widget-simplewidget.html.twig', 'yellow'],
[new More(), 'widget/widget-more.html.twig', '#123456'],
];
}
}

View File

@@ -1,66 +0,0 @@
<?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;
use App\Widget\Type\AbstractContainer;
use App\Widget\Type\More;
use PHPUnit\Framework\TestCase;
/**
* @covers \App\Widget\Type\AbstractContainer
*/
abstract class AbstractContainerTest extends TestCase
{
abstract public function createSut(): AbstractContainer;
public function testDefaultValues()
{
$sut = $this->createSut();
self::assertInstanceOf(AbstractContainer::class, $sut);
self::assertEquals('', $sut->getId());
self::assertEquals('', $sut->getTitle());
self::assertEquals(0, $sut->getOrder());
self::assertEquals([], $sut->getOptions());
self::assertEquals([], $sut->getWidgets());
self::assertEquals([], $sut->getData());
}
public function testSetter()
{
$widget = (new More())->setTitle('bar')->setId('foo');
$sut = $this->createSut();
$sut->setTitle('hello-world');
$sut->setOrder(13);
$sut->addWidget($widget);
self::assertEquals('hello-world', $sut->getTitle());
self::assertEquals('hello-world', $sut->getId());
self::assertCount(1, $sut->getWidgets());
self::assertCount(1, $sut->getData());
self::assertEquals([$widget], $sut->getWidgets());
self::assertEquals([$widget], $sut->getData());
self::assertEquals(13, $sut->getOrder());
self::assertEquals('bar', $sut->getWidgets()[0]->getTitle());
}
public function testSetOptionNotImplemented()
{
$this->expectException(\BadMethodCallException::class);
$sut = $this->createSut();
$sut->setOption('dfsdf', []);
}
}

View File

@@ -9,21 +9,9 @@
namespace App\Tests\Widget\Type;
use App\Widget\Type\SimpleStatisticChart;
/**
* @covers \App\Widget\Type\SimpleStatisticChart
* @covers \App\Widget\Type\AbstractSimpleStatisticChart
*/
abstract class AbstractSimpleStatisticsWidgetTypeTest extends AbstractWidgetTypeTest
{
public function testData()
{
$sut = $this->createSut();
self::assertInstanceOf(SimpleStatisticChart::class, $sut);
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('Cannot set data on instances of SimpleStatisticChart');
$sut->setData(10);
}
}

View File

@@ -0,0 +1,46 @@
<?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;
use App\Widget\Type\AbstractWidget;
use PHPUnit\Framework\TestCase;
/**
* @covers \App\Widget\Type\AbstractWidget
*/
abstract class AbstractWidgetTest extends TestCase
{
abstract public function createSut(): AbstractWidget;
abstract public function getDefaultOptions(): array;
public function testDefaultData()
{
$sut = $this->createSut();
self::assertInstanceOf(AbstractWidget::class, $sut);
self::assertEquals($this->getDefaultOptions(), $sut->getOptions());
}
public function testSetter()
{
$sut = $this->createSut();
// options
$sut->setOption('föööö', 'trääääää');
self::assertEquals(array_merge($this->getDefaultOptions(), ['föööö' => 'trääääää']), $sut->getOptions());
$sut->setOption('blub', 'blab');
$sut->setOption('dataType', 'money');
$options = $sut->getOptions();
self::assertEquals('blab', $options['blub']);
self::assertEquals('money', $options['dataType']);
self::assertEquals('trääääää', $options['föööö']);
}
}

View File

@@ -10,12 +10,11 @@
namespace App\Tests\Widget\Type;
use App\Widget\Type\AbstractWidgetType;
use PHPUnit\Framework\TestCase;
/**
* @covers \App\Widget\Type\AbstractWidgetType
*/
abstract class AbstractWidgetTypeTest extends TestCase
abstract class AbstractWidgetTypeTest extends AbstractWidgetTest
{
abstract public function createSut(): AbstractWidgetType;
@@ -32,7 +31,6 @@ abstract class AbstractWidgetTypeTest extends TestCase
self::assertInstanceOf(AbstractWidgetType::class, $sut);
self::assertEquals($this->getDefaultOptions(), $sut->getOptions());
$this->assertDefaultData($sut);
self::assertEquals('bar', $sut->getOption('foo', 'bar'));
}
public function testFluentInterface()
@@ -49,8 +47,6 @@ abstract class AbstractWidgetTypeTest extends TestCase
// options
$sut->setOption('föööö', 'trääääää');
self::assertEquals('trääääää', $sut->getOption('föööö', 'tröööö'));
self::assertEquals('trääääää', $sut->getOption('föööö', 'tröööö'));
self::assertEquals(array_merge($this->getDefaultOptions(), ['föööö' => 'trääääää']), $sut->getOptions());
$sut->setOptions(['blub' => 'blab', 'dataType' => 'money']);
@@ -59,18 +55,4 @@ abstract class AbstractWidgetTypeTest extends TestCase
self::assertEquals('money', $options['dataType']);
self::assertEquals('trääääää', $options['föööö']);
}
public function testData()
{
$sut = $this->createSut();
self::assertInstanceOf(AbstractWidgetType::class, $sut->setData(''));
$sut->setData('slkudfhalksjdhfkljsahdf');
self::assertEquals('slkudfhalksjdhfkljsahdf', $sut->getData());
$data = new \stdClass();
$sut->setData($data);
self::assertSame($data, $sut->getData());
}
}

View File

@@ -9,49 +9,41 @@
namespace App\Tests\Widget\Type;
use App\Configuration\SystemConfiguration;
use App\Entity\User;
use App\Repository\TimesheetRepository;
use App\Tests\Mocks\SystemConfigurationFactory;
use App\Widget\Type\AbstractCounterYear;
use App\Widget\Type\AbstractWidgetType;
use App\Widget\Type\ActiveUsersYear;
use App\Widget\Type\CounterYear;
use App\Widget\Type\SimpleStatisticChart;
/**
* @covers \App\Widget\Type\ActiveUsersYear
* @covers \App\Widget\Type\CounterYear
* @covers \App\Widget\Type\AbstractCounterYear
*/
class ActiveUsersYearTest extends AbstractWidgetTypeTest
{
/**
* @return CounterYear
* @return AbstractCounterYear
*/
public function createSut(): AbstractWidgetType
{
$repository = $this->createMock(TimesheetRepository::class);
$configuration = $this->createMock(SystemConfiguration::class);
$configuration = SystemConfigurationFactory::createStub();
return new ActiveUsersYear($repository, $configuration);
$sut = new ActiveUsersYear($repository, $configuration);
$sut->setUser(new User());
return $sut;
}
public function getDefaultOptions(): array
{
return [
'dataType' => 'int',
'icon' => 'user',
'icon' => 'users',
'color' => 'yellow',
];
}
public function testData()
{
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('Cannot set data on instances of SimpleStatisticChart');
$sut = $this->createSut();
self::assertInstanceOf(SimpleStatisticChart::class, $sut);
$sut->setData(10);
}
public function testSettings()
{
$sut = $this->createSut();

View File

@@ -11,9 +11,8 @@ namespace App\Tests\Widget\Type;
use App\Repository\TimesheetRepository;
use App\Widget\Type\AbstractAmountPeriod;
use App\Widget\Type\AbstractWidgetType;
use App\Widget\Type\AbstractWidget;
use App\Widget\Type\AmountMonth;
use App\Widget\Type\SimpleStatisticChart;
use App\Widget\WidgetInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
@@ -21,9 +20,9 @@ use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
* @covers \App\Widget\Type\AmountMonth
* @covers \App\Widget\Type\AbstractAmountPeriod
*/
class AmountMonthTest extends AbstractWidgetTypeTest
class AmountMonthTest extends AbstractWidgetTest
{
protected function assertDefaultData(AbstractWidgetType $sut)
protected function assertDefaultData(AbstractWidget $sut)
{
self::assertEquals(0.0, $sut->getData());
}
@@ -31,7 +30,7 @@ class AmountMonthTest extends AbstractWidgetTypeTest
/**
* @return AbstractAmountPeriod
*/
public function createSut(): AbstractWidgetType
public function createSut(): AbstractWidget
{
$repository = $this->createMock(TimesheetRepository::class);
$dispatcher = $this->createMock(EventDispatcherInterface::class);
@@ -42,27 +41,16 @@ class AmountMonthTest extends AbstractWidgetTypeTest
public function getDefaultOptions(): array
{
return [
'dataType' => 'money',
'icon' => 'money',
'color' => WidgetInterface::COLOR_MONTH,
];
}
public function testData()
{
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('Cannot set data on instances of SimpleStatisticChart');
$sut = $this->createSut();
self::assertInstanceOf(SimpleStatisticChart::class, $sut);
$sut->setData(10);
}
public function testSettings()
{
$sut = $this->createSut();
self::assertEquals('widget/widget-counter.html.twig', $sut->getTemplateName());
self::assertEquals('amountMonth', $sut->getId());
self::assertEquals('widget/widget-counter-money.html.twig', $sut->getTemplateName());
self::assertEquals('AmountMonth', $sut->getId());
}
}

View File

@@ -11,9 +11,8 @@ namespace App\Tests\Widget\Type;
use App\Repository\TimesheetRepository;
use App\Widget\Type\AbstractAmountPeriod;
use App\Widget\Type\AbstractWidgetType;
use App\Widget\Type\AbstractWidget;
use App\Widget\Type\AmountToday;
use App\Widget\Type\SimpleStatisticChart;
use App\Widget\WidgetInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
@@ -21,9 +20,9 @@ use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
* @covers \App\Widget\Type\AmountToday
* @covers \App\Widget\Type\AbstractAmountPeriod
*/
class AmountTodayTest extends AbstractWidgetTypeTest
class AmountTodayTest extends AbstractWidgetTest
{
protected function assertDefaultData(AbstractWidgetType $sut)
protected function assertDefaultData(AbstractWidget $sut)
{
self::assertEquals(0.0, $sut->getData());
}
@@ -31,7 +30,7 @@ class AmountTodayTest extends AbstractWidgetTypeTest
/**
* @return AbstractAmountPeriod
*/
public function createSut(): AbstractWidgetType
public function createSut(): AbstractWidget
{
$repository = $this->createMock(TimesheetRepository::class);
$dispatcher = $this->createMock(EventDispatcherInterface::class);
@@ -42,27 +41,16 @@ class AmountTodayTest extends AbstractWidgetTypeTest
public function getDefaultOptions(): array
{
return [
'dataType' => 'money',
'icon' => 'money',
'color' => WidgetInterface::COLOR_TODAY,
];
}
public function testData()
{
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('Cannot set data on instances of SimpleStatisticChart');
$sut = $this->createSut();
self::assertInstanceOf(SimpleStatisticChart::class, $sut);
$sut->setData(10);
}
public function testSettings()
{
$sut = $this->createSut();
self::assertEquals('widget/widget-counter.html.twig', $sut->getTemplateName());
self::assertEquals('amountToday', $sut->getId());
self::assertEquals('widget/widget-counter-money.html.twig', $sut->getTemplateName());
self::assertEquals('AmountToday', $sut->getId());
}
}

View File

@@ -11,9 +11,8 @@ namespace App\Tests\Widget\Type;
use App\Repository\TimesheetRepository;
use App\Widget\Type\AbstractAmountPeriod;
use App\Widget\Type\AbstractWidgetType;
use App\Widget\Type\AbstractWidget;
use App\Widget\Type\AmountTotal;
use App\Widget\Type\SimpleStatisticChart;
use App\Widget\WidgetInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
@@ -21,9 +20,9 @@ use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
* @covers \App\Widget\Type\AmountTotal
* @covers \App\Widget\Type\AbstractAmountPeriod
*/
class AmountTotalTest extends AbstractWidgetTypeTest
class AmountTotalTest extends AbstractWidgetTest
{
protected function assertDefaultData(AbstractWidgetType $sut)
protected function assertDefaultData(AbstractWidget $sut)
{
self::assertEquals(0.0, $sut->getData());
}
@@ -31,7 +30,7 @@ class AmountTotalTest extends AbstractWidgetTypeTest
/**
* @return AbstractAmountPeriod
*/
public function createSut(): AbstractWidgetType
public function createSut(): AbstractWidget
{
$repository = $this->createMock(TimesheetRepository::class);
$dispatcher = $this->createMock(EventDispatcherInterface::class);
@@ -42,27 +41,16 @@ class AmountTotalTest extends AbstractWidgetTypeTest
public function getDefaultOptions(): array
{
return [
'dataType' => 'money',
'icon' => 'money',
'color' => WidgetInterface::COLOR_TOTAL,
];
}
public function testData()
{
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('Cannot set data on instances of SimpleStatisticChart');
$sut = $this->createSut();
self::assertInstanceOf(SimpleStatisticChart::class, $sut);
$sut->setData(10);
}
public function testSettings()
{
$sut = $this->createSut();
self::assertEquals('widget/widget-counter.html.twig', $sut->getTemplateName());
self::assertEquals('widget/widget-counter-money.html.twig', $sut->getTemplateName());
self::assertEquals('amountTotal', $sut->getId());
}
}

View File

@@ -11,9 +11,8 @@ namespace App\Tests\Widget\Type;
use App\Repository\TimesheetRepository;
use App\Widget\Type\AbstractAmountPeriod;
use App\Widget\Type\AbstractWidgetType;
use App\Widget\Type\AbstractWidget;
use App\Widget\Type\AmountWeek;
use App\Widget\Type\SimpleStatisticChart;
use App\Widget\WidgetInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
@@ -21,9 +20,9 @@ use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
* @covers \App\Widget\Type\AmountWeek
* @covers \App\Widget\Type\AbstractAmountPeriod
*/
class AmountWeekTest extends AbstractWidgetTypeTest
class AmountWeekTest extends AbstractWidgetTest
{
protected function assertDefaultData(AbstractWidgetType $sut)
protected function assertDefaultData(AbstractWidget $sut)
{
self::assertEquals(0.0, $sut->getData());
}
@@ -31,7 +30,7 @@ class AmountWeekTest extends AbstractWidgetTypeTest
/**
* @return AbstractAmountPeriod
*/
public function createSut(): AbstractWidgetType
public function createSut(): AbstractWidget
{
$repository = $this->createMock(TimesheetRepository::class);
$dispatcher = $this->createMock(EventDispatcherInterface::class);
@@ -42,27 +41,16 @@ class AmountWeekTest extends AbstractWidgetTypeTest
public function getDefaultOptions(): array
{
return [
'dataType' => 'money',
'icon' => 'money',
'color' => WidgetInterface::COLOR_WEEK,
];
}
public function testData()
{
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('Cannot set data on instances of SimpleStatisticChart');
$sut = $this->createSut();
self::assertInstanceOf(SimpleStatisticChart::class, $sut);
$sut->setData(10);
}
public function testSettings()
{
$sut = $this->createSut();
self::assertEquals('widget/widget-counter.html.twig', $sut->getTemplateName());
self::assertEquals('amountWeek', $sut->getId());
self::assertEquals('widget/widget-counter-money.html.twig', $sut->getTemplateName());
self::assertEquals('AmountWeek', $sut->getId());
}
}

View File

@@ -9,62 +9,55 @@
namespace App\Tests\Widget\Type;
use App\Configuration\SystemConfiguration;
use App\Entity\User;
use App\Repository\TimesheetRepository;
use App\Tests\Mocks\SystemConfigurationFactory;
use App\Widget\Type\AbstractCounterYear;
use App\Widget\Type\AbstractWidgetType;
use App\Widget\Type\AmountYear;
use App\Widget\Type\CounterYear;
use App\Widget\Type\SimpleStatisticChart;
use App\Widget\WidgetInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
/**
* @covers \App\Widget\Type\AmountYear
* @covers \App\Widget\Type\CounterYear
* @covers \App\Widget\Type\AbstractCounterYear
*/
class AmountYearTest extends AbstractWidgetTypeTest
{
protected function assertDefaultData(AbstractWidgetType $sut)
{
self::assertEquals(0.0, $sut->getData());
self::assertEquals([], $sut->getData());
}
/**
* @return CounterYear
* @return AbstractCounterYear
*/
public function createSut(): AbstractWidgetType
{
$repository = $this->createMock(TimesheetRepository::class);
$configuration = $this->createMock(SystemConfiguration::class);
$repository->method('getStatistic')->willReturn([]);
$configuration = SystemConfigurationFactory::createStub();
$dispatcher = $this->createMock(EventDispatcherInterface::class);
return new AmountYear($repository, $configuration, $dispatcher);
$sut = new AmountYear($repository, $configuration, $dispatcher);
$sut->setUser(new User());
return $sut;
}
public function getDefaultOptions(): array
{
return [
'dataType' => 'money',
'icon' => 'money',
'color' => WidgetInterface::COLOR_YEAR,
];
}
public function testData()
{
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('Cannot set data on instances of SimpleStatisticChart');
$sut = $this->createSut();
self::assertInstanceOf(SimpleStatisticChart::class, $sut);
$sut->setData(10);
}
public function testSettings()
{
$sut = $this->createSut();
self::assertEquals('widget/widget-counter.html.twig', $sut->getTemplateName());
self::assertEquals('amountYear', $sut->getId());
self::assertEquals('widget/widget-counter-money.html.twig', $sut->getTemplateName());
self::assertEquals('AmountYear', $sut->getId());
}
}

View File

@@ -1,25 +0,0 @@
<?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;
use App\Widget\Type\AbstractContainer;
use App\Widget\Type\CompoundChart;
/**
* @covers \App\Widget\Type\CompoundChart
* @covers \App\Widget\Type\AbstractContainer
*/
class CompoundChartTest extends AbstractContainerTest
{
public function createSut(): AbstractContainer
{
return new CompoundChart();
}
}

View File

@@ -1,25 +0,0 @@
<?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;
use App\Widget\Type\AbstractContainer;
use App\Widget\Type\CompoundRow;
/**
* @covers \App\Widget\Type\CompoundRow
* @covers \App\Widget\Type\AbstractContainer
*/
class CompoundRowTest extends AbstractContainerTest
{
public function createSut(): AbstractContainer
{
return new CompoundRow();
}
}

View File

@@ -13,20 +13,18 @@ use App\Entity\User;
use App\Repository\TimesheetRepository;
use App\Widget\Type\AbstractWidgetType;
use App\Widget\Type\Counter;
use App\Widget\Type\SimpleWidget;
use DateTime;
/**
* @covers \App\Widget\Type\Counter
* @covers \App\Widget\Type\SimpleStatisticChart
* @covers \App\Widget\Type\SimpleWidget
* @covers \App\Widget\Type\AbstractSimpleStatisticChart
*/
class CounterTest extends AbstractSimpleStatisticsWidgetTypeTest
{
public function createSut(): AbstractWidgetType
{
$sut = new Counter($this->createMock(TimesheetRepository::class));
$sut->setQuery(TimesheetRepository::STATS_QUERY_ACTIVE);
$sut->setQuery(TimesheetRepository::STATS_QUERY_AMOUNT);
return $sut;
}
@@ -38,13 +36,12 @@ class CounterTest extends AbstractSimpleStatisticsWidgetTypeTest
$repository = $this->createMock(TimesheetRepository::class);
$repository->expects($this->once())->method('getStatistic')->willReturnCallback(function (string $type, ?DateTime $begin, ?DateTime $end, ?User $user) {
self::assertEquals($type, 'active');
self::assertNull($begin);
self::assertNull($end);
self::assertNull($user);
});
$sut = new Counter($repository);
$sut->setQuery(TimesheetRepository::STATS_QUERY_ACTIVE);
$sut->setQuery(TimesheetRepository::STATS_QUERY_AMOUNT);
$sut->setUser($user);
$sut->getData([]);
@@ -53,14 +50,13 @@ class CounterTest extends AbstractSimpleStatisticsWidgetTypeTest
$repository = $this->createMock(TimesheetRepository::class);
$repository->expects($this->once())->method('getStatistic')->willReturnCallback(function (string $type, ?DateTime $begin, ?DateTime $end, ?User $user) {
self::assertEquals($type, 'active');
self::assertNull($begin);
self::assertNull($end);
self::assertNotNull($user);
self::assertEquals('bar', $user->getAlias());
});
$sut = new Counter($repository);
$sut->setQuery(TimesheetRepository::STATS_QUERY_ACTIVE);
$sut->setQuery(TimesheetRepository::STATS_QUERY_AMOUNT);
$sut->setUser($user);
$sut->setQueryWithUser(true);
$sut->getData([]);
@@ -68,13 +64,7 @@ class CounterTest extends AbstractSimpleStatisticsWidgetTypeTest
public function getDefaultOptions(): array
{
return ['dataType' => 'int'];
}
public function testExtendsSimpleWidget()
{
$sut = $this->createSut();
self::assertInstanceOf(SimpleWidget::class, $sut);
return [];
}
public function testTemplateName()

View File

@@ -9,32 +9,28 @@
namespace App\Tests\Widget\Type;
use App\Configuration\SystemConfiguration;
use App\Entity\User;
use App\Repository\TimesheetRepository;
use App\Tests\Mocks\SystemConfigurationFactory;
use App\Widget\Type\AbstractWidgetType;
use App\Widget\Type\Counter;
use App\Widget\Type\CounterYear;
use App\Widget\Type\SimpleWidget;
use App\Widget\Type\DurationYear;
use DateTime;
/**
* @covers \App\Widget\Type\CounterYear
* @covers \App\Widget\Type\SimpleStatisticChart
* @covers \App\Widget\Type\SimpleWidget
* @covers \App\Widget\Type\DurationYear
* @covers \App\Widget\Type\AbstractCounterYear
* @covers \App\Widget\Type\AbstractSimpleStatisticChart
*/
class CounterYearTest extends AbstractSimpleStatisticsWidgetTypeTest
{
public function createSut(?string $financialYear = null): AbstractWidgetType
{
$configuration = $this->createMock(SystemConfiguration::class);
$configuration = SystemConfigurationFactory::createStub(['company' => ['financial_year' => $financialYear]]);
if (null !== $financialYear) {
$configuration->method('getFinancialYearStart')->willReturn($financialYear);
}
$sut = new CounterYear($this->createMock(TimesheetRepository::class), $configuration);
$sut->setQuery(TimesheetRepository::STATS_QUERY_ACTIVE);
$sut = new DurationYear($this->createMock(TimesheetRepository::class), $configuration);
$sut->setQuery(TimesheetRepository::STATS_QUERY_AMOUNT);
$sut->setUser(new User());
return $sut;
}
@@ -46,13 +42,12 @@ class CounterYearTest extends AbstractSimpleStatisticsWidgetTypeTest
$repository = $this->createMock(TimesheetRepository::class);
$repository->expects($this->once())->method('getStatistic')->willReturnCallback(function (string $type, ?DateTime $begin, ?DateTime $end, ?User $user) {
self::assertEquals($type, 'active');
self::assertNull($begin);
self::assertNull($end);
self::assertNull($user);
});
$sut = new Counter($repository);
$sut->setQuery(TimesheetRepository::STATS_QUERY_ACTIVE);
$sut->setQuery(TimesheetRepository::STATS_QUERY_AMOUNT);
$sut->setUser($user);
$sut->getData([]);
@@ -61,14 +56,13 @@ class CounterYearTest extends AbstractSimpleStatisticsWidgetTypeTest
$repository = $this->createMock(TimesheetRepository::class);
$repository->expects($this->once())->method('getStatistic')->willReturnCallback(function (string $type, ?DateTime $begin, ?DateTime $end, ?User $user) {
self::assertEquals($type, 'active');
self::assertNull($begin);
self::assertNull($end);
self::assertNotNull($user);
self::assertEquals('bar', $user->getAlias());
});
$sut = new Counter($repository);
$sut->setQuery(TimesheetRepository::STATS_QUERY_ACTIVE);
$sut->setQuery(TimesheetRepository::STATS_QUERY_AMOUNT);
$sut->setUser($user);
$sut->setQueryWithUser(true);
$sut->getData([]);
@@ -76,26 +70,20 @@ class CounterYearTest extends AbstractSimpleStatisticsWidgetTypeTest
public function getDefaultOptions(): array
{
return ['dataType' => 'int'];
}
public function testExtendsSimpleWidget()
{
$sut = $this->createSut();
self::assertInstanceOf(SimpleWidget::class, $sut);
return ['icon' => 'duration', 'color' => 'yellow'];
}
public function testTemplateName()
{
/** @var Counter $sut */
$sut = $this->createSut();
self::assertEquals('widget/widget-counter.html.twig', $sut->getTemplateName());
self::assertEquals('widget/widget-counter-duration.html.twig', $sut->getTemplateName());
}
public function testTemplateNameWithFinancialYear()
{
/** @var Counter $sut */
$sut = $this->createSut('2020-01-01');
self::assertEquals('widget/widget-counter.html.twig', $sut->getTemplateName());
self::assertEquals('widget/widget-counter-duration.html.twig', $sut->getTemplateName());
}
}

View File

@@ -13,23 +13,21 @@ use App\Entity\Activity;
use App\Entity\Project;
use App\Entity\User;
use App\Model\Statistic\Day;
use App\Repository\TimesheetRepository;
use App\Widget\Type\AbstractWidgetType;
use App\Widget\DataProvider\DailyWorkingTimeChartProvider;
use App\Widget\Type\DailyWorkingTimeChart;
use App\Widget\Type\SimpleWidget;
use App\Widget\WidgetInterface;
use PHPUnit\Framework\TestCase;
/**
* @covers \App\Widget\Type\DailyWorkingTimeChart
* @covers \App\Widget\Type\SimpleWidget
* @covers \App\Widget\Type\AbstractWidgetType
* @covers \App\Repository\TimesheetRepository
*/
class DailyWorkingTimeChartTest extends TestCase
{
public function createSut(): AbstractWidgetType
public function createSut(): DailyWorkingTimeChart
{
$repository = $this->createMock(TimesheetRepository::class);
$repository = $this->createMock(DailyWorkingTimeChartProvider::class);
$sut = new DailyWorkingTimeChart($repository);
$sut->setUser(new User());
@@ -37,32 +35,16 @@ class DailyWorkingTimeChartTest extends TestCase
return $sut;
}
public function testExtendsSimpleWidget()
{
$sut = $this->createSut();
self::assertInstanceOf(SimpleWidget::class, $sut);
}
public function testDefaultValues()
{
$sut = $this->createSut();
self::assertInstanceOf(AbstractWidgetType::class, $sut);
self::assertInstanceOf(WidgetInterface::class, $sut);
self::assertEquals('DailyWorkingTimeChart', $sut->getId());
self::assertEquals('stats.yourWorkingHours', $sut->getTitle());
self::assertNull($sut->getOption('begin', 'xxx'));
self::assertNull($sut->getOption('end', 'xxx'));
self::assertEquals('', $sut->getOption('color', 'xxx'));
self::assertInstanceOf(User::class, $sut->getOption('user', 'xxx'));
self::assertEquals('bar', $sut->getOption('type', 'xxx'));
}
public function testFluentInterface()
{
$sut = $this->createSut();
self::assertInstanceOf(AbstractWidgetType::class, $sut->setOptions([]));
self::assertInstanceOf(AbstractWidgetType::class, $sut->setId(''));
self::assertInstanceOf(AbstractWidgetType::class, $sut->setTitle(''));
self::assertInstanceOf(AbstractWidgetType::class, $sut->setData(''));
$options = $sut->getOptions();
self::assertNull($options['begin']);
self::assertNull($options['end']);
self::assertEquals('', $options['color']);
}
public function testSetter()
@@ -71,22 +53,7 @@ class DailyWorkingTimeChartTest extends TestCase
// options
$sut->setOption('föööö', 'trääääää');
self::assertEquals('trääääää', $sut->getOption('föööö', 'tröööö'));
// check default values
self::assertEquals('xxxxx', $sut->getOption('blub', 'xxxxx'));
self::assertEquals('xxxxx', $sut->getOption('dataType', 'xxxxx'));
$sut->setOptions(['blub' => 'blab', 'dataType' => 'money']);
// check option still exists
self::assertEquals('trääääää', $sut->getOption('föööö', 'tröööö'));
// check options are now existing
self::assertEquals('blab', $sut->getOption('blub', 'xxxxx'));
self::assertEquals('money', $sut->getOption('dataType', 'xxxxx'));
// id
$sut->setId('cvbnmyx');
self::assertEquals('cvbnmyx', $sut->getId());
self::assertEquals('trääääää', $sut->getOptions()['föööö']);
}
public function testGetOptions()
@@ -95,7 +62,7 @@ class DailyWorkingTimeChartTest extends TestCase
$options = $sut->getOptions(['type' => 'xxx']);
self::assertStringStartsWith('DailyWorkingTimeChart_', $options['id']);
self::assertEquals('bar', $options['type']);
self::assertEquals('xxx', $options['type']);
}
public function testGetData()
@@ -106,7 +73,7 @@ class DailyWorkingTimeChartTest extends TestCase
$project = $this->createMock(Project::class);
$project->method('getId')->willReturn(4711);
$repository = $this->getMockBuilder(TimesheetRepository::class)->disableOriginalConstructor()->onlyMethods(['getDailyData'])->getMock();
$repository = $this->getMockBuilder(DailyWorkingTimeChartProvider::class)->disableOriginalConstructor()->onlyMethods(['getDailyData'])->getMock();
$repository->expects($this->once())->method('getDailyData')->willReturnCallback(function ($begin, $end, $user) use ($activity, $project) {
return [
[
@@ -129,7 +96,7 @@ class DailyWorkingTimeChartTest extends TestCase
$sut = new DailyWorkingTimeChart($repository);
$sut->setUser(new User());
$data = $sut->getData([]);
$data = $sut->getData($sut->getOptions());
self::assertCount(2, $data);
self::assertArrayHasKey('activities', $data);
self::assertArrayHasKey('data', $data);

View File

@@ -9,54 +9,46 @@
namespace App\Tests\Widget\Type;
use App\Configuration\SystemConfiguration;
use App\Entity\User;
use App\Repository\TimesheetRepository;
use App\Tests\Mocks\SystemConfigurationFactory;
use App\Widget\Type\AbstractCounterYear;
use App\Widget\Type\AbstractWidgetType;
use App\Widget\Type\CounterYear;
use App\Widget\Type\DurationYear;
use App\Widget\Type\SimpleStatisticChart;
/**
* @covers \App\Widget\Type\DurationYear
* @covers \App\Widget\Type\CounterYear
* @covers \App\Widget\Type\AbstractCounterYear
*/
class DurationYearTest extends AbstractWidgetTypeTest
{
/**
* @return CounterYear
* @return AbstractCounterYear
*/
public function createSut(): AbstractWidgetType
{
$repository = $this->createMock(TimesheetRepository::class);
$configuration = $this->createMock(SystemConfiguration::class);
$configuration = SystemConfigurationFactory::createStub();
return new DurationYear($repository, $configuration);
$sut = new DurationYear($repository, $configuration);
$sut->setUser(new User());
return $sut;
}
public function getDefaultOptions(): array
{
return [
'dataType' => 'duration',
'icon' => 'duration',
'color' => 'yellow',
];
}
public function testData()
{
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('Cannot set data on instances of SimpleStatisticChart');
$sut = $this->createSut();
self::assertInstanceOf(SimpleStatisticChart::class, $sut);
$sut->setData(10);
}
public function testSettings()
{
$sut = $this->createSut();
self::assertEquals('widget/widget-counter.html.twig', $sut->getTemplateName());
self::assertEquals('durationYear', $sut->getId());
self::assertEquals('widget/widget-counter-duration.html.twig', $sut->getTemplateName());
self::assertEquals('DurationYear', $sut->getId());
}
}

View File

@@ -11,28 +11,20 @@ namespace App\Tests\Widget\Type;
use App\Widget\Type\AbstractWidgetType;
use App\Widget\Type\More;
use App\Widget\Type\SimpleWidget;
/**
* @covers \App\Widget\Type\More
* @covers \App\Widget\Type\SimpleWidget
*/
class MoreTest extends AbstractWidgetTypeTest
{
public function createSut(): AbstractWidgetType
public function createSut(): More
{
return new More();
}
public function getDefaultOptions(): array
{
return ['dataType' => 'int'];
}
public function testExtendsSimpleWidget()
{
$sut = $this->createSut();
self::assertInstanceOf(SimpleWidget::class, $sut);
return [];
}
public function testTemplateName()
@@ -40,4 +32,18 @@ class MoreTest extends AbstractWidgetTypeTest
$sut = new More();
self::assertEquals('widget/widget-more.html.twig', $sut->getTemplateName());
}
public function testData()
{
$sut = $this->createSut();
self::assertInstanceOf(AbstractWidgetType::class, $sut->setData(''));
$sut->setData('slkudfhalksjdhfkljsahdf');
self::assertEquals('slkudfhalksjdhfkljsahdf', $sut->getData());
$data = new \stdClass();
$sut->setData($data);
self::assertSame($data, $sut->getData());
}
}

View File

@@ -9,19 +9,16 @@
namespace App\Tests\Widget\Type;
use App\Configuration\SystemConfiguration;
use App\Entity\Activity;
use App\Entity\Project;
use App\Entity\User;
use App\Repository\TimesheetRepository;
use App\Widget\Type\AbstractWidgetType;
use App\Tests\Mocks\SystemConfigurationFactory;
use App\Widget\Type\PaginatedWorkingTimeChart;
use App\Widget\Type\SimpleWidget;
use PHPUnit\Framework\TestCase;
/**
* @covers \App\Widget\Type\PaginatedWorkingTimeChart
* @covers \App\Widget\Type\SimpleWidget
* @covers \App\Widget\Type\AbstractWidgetType
* @covers \App\Repository\TimesheetRepository
*/
@@ -30,10 +27,10 @@ class PaginatedWorkingTimeChartTest extends TestCase
/**
* @return PaginatedWorkingTimeChart
*/
public function createSut(): AbstractWidgetType
public function createSut(): PaginatedWorkingTimeChart
{
$repository = $this->createMock(TimesheetRepository::class);
$configuration = $this->createMock(SystemConfiguration::class);
$configuration = SystemConfigurationFactory::createStub();
$sut = new PaginatedWorkingTimeChart($repository, $configuration);
$sut->setUser(new User());
@@ -41,32 +38,11 @@ class PaginatedWorkingTimeChartTest extends TestCase
return $sut;
}
public function testExtendsSimpleWidget()
{
$sut = $this->createSut();
self::assertInstanceOf(SimpleWidget::class, $sut);
}
public function testDefaultValues()
{
$sut = $this->createSut();
self::assertInstanceOf(AbstractWidgetType::class, $sut);
self::assertEquals('PaginatedWorkingTimeChart', $sut->getId());
self::assertEquals('stats.yourWorkingHours', $sut->getTitle());
//self::assertNull($sut->getOption('begin', 'xxx'));
// self::assertNull($sut->getOption('end', 'xxx'));
// self::assertEquals('', $sut->getOption('color', 'xxx'));
self::assertInstanceOf(User::class, $sut->getOption('user', 'xxx'));
// self::assertEquals('bar', $sut->getOption('type', 'xxx'));
}
public function testFluentInterface()
{
$sut = $this->createSut();
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()
@@ -75,22 +51,7 @@ class PaginatedWorkingTimeChartTest extends TestCase
// options
$sut->setOption('föööö', 'trääääää');
self::assertEquals('trääääää', $sut->getOption('föööö', 'tröööö'));
// check default values
self::assertEquals('xxxxx', $sut->getOption('blub', 'xxxxx'));
self::assertEquals('xxxxx', $sut->getOption('dataType', 'xxxxx'));
$sut->setOptions(['blub' => 'blab', 'dataType' => 'money']);
// check option still exists
self::assertEquals('trääääää', $sut->getOption('föööö', 'tröööö'));
// check options are now existing
self::assertEquals('blab', $sut->getOption('blub', 'xxxxx'));
self::assertEquals('money', $sut->getOption('dataType', 'xxxxx'));
// id
$sut->setId('cvbnmyx');
self::assertEquals('cvbnmyx', $sut->getId());
self::assertEquals('trääääää', $sut->getOptions()['föööö']);
}
public function testGetOptions()
@@ -110,37 +71,17 @@ class PaginatedWorkingTimeChartTest extends TestCase
$project->method('getId')->willReturn(4711);
$repository = $this->createMock(TimesheetRepository::class);
$repository->expects($this->once())->method('getDailyStats')->willReturnCallback(function ($user, $begin, $end) use ($activity, $project) {
return [
[
'year' => $begin->format('Y'),
'month' => $begin->format('n'),
'day' => $begin->format('j'),
'rate' => 13.75,
'duration' => 1234,
'billable' => 1234,
'details' => [
[
'activity' => $activity,
'project' => $project,
'billable' => 1234,
]
]
]
];
});
$expectedKeys = [
'begin', 'end', 'stats', 'thisMonth', 'lastWeekInYear', 'lastWeekInLastYear', 'day', 'week', 'month', 'year', 'financial', 'financialBegin'
'begin', 'end', 'thisMonth', 'lastWeekInYear', 'lastWeekInLastYear', 'day', 'week', 'month', 'year', 'financial', 'financialBegin'
];
$configuration = $this->createMock(SystemConfiguration::class);
$configuration->expects($this->once())->method('getFinancialYearStart')->willReturn(null);
$configuration = SystemConfigurationFactory::createStub(['company' => ['financial_year' => null]]);
$sut = new PaginatedWorkingTimeChart($repository, $configuration);
$sut->setUser(new User());
$data = $sut->getData([]);
$data = $sut->getData($sut->getOptions());
self::assertCount(\count($expectedKeys), $data);
foreach ($expectedKeys as $key) {
@@ -158,37 +99,17 @@ class PaginatedWorkingTimeChartTest extends TestCase
$project->method('getId')->willReturn(4711);
$repository = $this->createMock(TimesheetRepository::class);
$repository->expects($this->once())->method('getDailyStats')->willReturnCallback(function ($user, $begin, $end) use ($activity, $project) {
return [
[
'year' => $begin->format('Y'),
'month' => $begin->format('n'),
'day' => $begin->format('j'),
'rate' => 13.75,
'duration' => 1234,
'billable' => 1234,
'details' => [
[
'activity' => $activity,
'project' => $project,
'billable' => 1234,
]
]
]
];
});
$expectedKeys = [
'begin', 'end', 'stats', 'thisMonth', 'lastWeekInYear', 'lastWeekInLastYear', 'day', 'week', 'month', 'year', 'financial', 'financialBegin'
'begin', 'end', 'thisMonth', 'lastWeekInYear', 'lastWeekInLastYear', 'day', 'week', 'month', 'year', 'financial', 'financialBegin'
];
$configuration = $this->createMock(SystemConfiguration::class);
$configuration->expects($this->once())->method('getFinancialYearStart')->willReturn('2020-01-01');
$configuration = SystemConfigurationFactory::createStub(['company' => ['financial_year' => '2020-01-01']]);
$sut = new PaginatedWorkingTimeChart($repository, $configuration);
$sut->setUser(new User());
$data = $sut->getData([]);
$data = $sut->getData($sut->getOptions());
self::assertCount(\count($expectedKeys), $data);
foreach ($expectedKeys as $key) {

View File

@@ -1,29 +0,0 @@
<?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;
use App\Widget\Type\AbstractWidgetType;
use App\Widget\Type\SimpleWidget;
/**
* @covers \App\Widget\Type\SimpleWidget
*/
class SimpleWidgetTest extends AbstractWidgetTypeTest
{
public function createSut(): AbstractWidgetType
{
return new SimpleWidget();
}
public function getDefaultOptions(): array
{
return [];
}
}

View File

@@ -16,9 +16,8 @@ use App\Widget\Type\TotalsActivity;
/**
* @covers \App\Widget\Type\TotalsActivity
* @covers \App\Widget\Type\SimpleWidget
*/
class TotalsActivityTest extends AbstractWidgetTypeTest
class TotalsActivityTest extends AbstractWidgetTest
{
/** @var User */
private $user;
@@ -32,7 +31,7 @@ class TotalsActivityTest extends AbstractWidgetTypeTest
$this->user = $user;
}
public function createSut(): AbstractWidgetType
public function createSut(): TotalsActivity
{
return $this->createWidget();
}
@@ -53,9 +52,7 @@ class TotalsActivityTest extends AbstractWidgetTypeTest
return [
'route' => 'admin_activity',
'icon' => 'activity',
'color' => 'primary',
'dataType' => 'int',
'user' => $this->user,
'color' => 'red',
];
}

View File

@@ -16,9 +16,8 @@ use App\Widget\Type\TotalsCustomer;
/**
* @covers \App\Widget\Type\TotalsCustomer
* @covers \App\Widget\Type\SimpleWidget
*/
class TotalsCustomerTest extends AbstractWidgetTypeTest
class TotalsCustomerTest extends AbstractWidgetTest
{
/** @var User */
private $user;
@@ -32,7 +31,7 @@ class TotalsCustomerTest extends AbstractWidgetTypeTest
$this->user = $user;
}
public function createSut(): AbstractWidgetType
public function createSut(): TotalsCustomer
{
return $this->createWidget();
}
@@ -53,9 +52,7 @@ class TotalsCustomerTest extends AbstractWidgetTypeTest
return [
'route' => 'admin_customer',
'icon' => 'customer',
'color' => 'primary',
'dataType' => 'int',
'user' => $this->user,
'color' => 'red',
];
}

View File

@@ -16,9 +16,8 @@ use App\Widget\Type\TotalsProject;
/**
* @covers \App\Widget\Type\TotalsProject
* @covers \App\Widget\Type\SimpleWidget
*/
class TotalsProjectTest extends AbstractWidgetTypeTest
class TotalsProjectTest extends AbstractWidgetTest
{
/** @var User */
private $user;
@@ -32,7 +31,7 @@ class TotalsProjectTest extends AbstractWidgetTypeTest
$this->user = $user;
}
public function createSut(): AbstractWidgetType
public function createSut(): TotalsProject
{
return $this->createWidget();
}
@@ -53,9 +52,7 @@ class TotalsProjectTest extends AbstractWidgetTypeTest
return [
'route' => 'admin_project',
'icon' => 'project',
'color' => 'primary',
'dataType' => 'int',
'user' => $this->user,
'color' => 'red',
];
}

View File

@@ -16,9 +16,8 @@ use App\Widget\Type\TotalsUser;
/**
* @covers \App\Widget\Type\TotalsUser
* @covers \App\Widget\Type\SimpleWidget
*/
class TotalsUserTest extends AbstractWidgetTypeTest
class TotalsUserTest extends AbstractWidgetTest
{
/** @var User */
private $user;
@@ -32,7 +31,7 @@ class TotalsUserTest extends AbstractWidgetTypeTest
$this->user = $user;
}
public function createSut(): AbstractWidgetType
public function createSut(): TotalsUser
{
return $this->createWidget();
}
@@ -53,9 +52,7 @@ class TotalsUserTest extends AbstractWidgetTypeTest
return [
'route' => 'admin_user',
'icon' => 'user',
'color' => 'primary',
'dataType' => 'int',
'user' => $this->user,
'color' => 'red',
];
}

View File

@@ -11,28 +11,27 @@ namespace App\Tests\Widget\Type;
use App\Entity\User;
use App\Repository\TimesheetRepository;
use App\Widget\Type\AbstractUserAmountPeriod;
use App\Widget\Type\AbstractWidgetType;
use App\Widget\Type\SimpleStatisticChart;
use App\Widget\Type\AbstractUserRevenuePeriod;
use App\Widget\Type\AbstractWidget;
use App\Widget\Type\UserAmountMonth;
use App\Widget\WidgetInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
/**
* @covers \App\Widget\Type\UserAmountMonth
* @covers \App\Widget\Type\AbstractUserAmountPeriod
* @covers \App\Widget\Type\AbstractUserRevenuePeriod
*/
class UserAmountMonthTest extends AbstractWidgetTypeTest
class UserAmountMonthTest extends AbstractWidgetTest
{
protected function assertDefaultData(AbstractWidgetType $sut)
protected function assertDefaultData(AbstractWidget $sut)
{
self::assertEquals(0.0, $sut->getData());
}
/**
* @return AbstractUserAmountPeriod
* @return AbstractUserRevenuePeriod
*/
public function createSut(): AbstractWidgetType
public function createSut(): AbstractWidget
{
$repository = $this->createMock(TimesheetRepository::class);
$dispatcher = $this->createMock(EventDispatcherInterface::class);
@@ -46,27 +45,16 @@ class UserAmountMonthTest extends AbstractWidgetTypeTest
public function getDefaultOptions(): array
{
return [
'dataType' => 'money',
'icon' => 'money',
'color' => WidgetInterface::COLOR_MONTH,
];
}
public function testData()
{
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('Cannot set data on instances of SimpleStatisticChart');
$sut = $this->createSut();
self::assertInstanceOf(SimpleStatisticChart::class, $sut);
$sut->setData(10);
}
public function testSettings()
{
$sut = $this->createSut();
self::assertEquals('widget/widget-counter.html.twig', $sut->getTemplateName());
self::assertEquals('userAmountMonth', $sut->getId());
self::assertEquals('widget/widget-counter-money.html.twig', $sut->getTemplateName());
self::assertEquals('UserAmountMonth', $sut->getId());
}
}

View File

@@ -11,28 +11,27 @@ namespace App\Tests\Widget\Type;
use App\Entity\User;
use App\Repository\TimesheetRepository;
use App\Widget\Type\AbstractUserAmountPeriod;
use App\Widget\Type\AbstractWidgetType;
use App\Widget\Type\SimpleStatisticChart;
use App\Widget\Type\AbstractUserRevenuePeriod;
use App\Widget\Type\AbstractWidget;
use App\Widget\Type\UserAmountToday;
use App\Widget\WidgetInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
/**
* @covers \App\Widget\Type\UserAmountToday
* @covers \App\Widget\Type\AbstractUserAmountPeriod
* @covers \App\Widget\Type\AbstractUserRevenuePeriod
*/
class UserAmountTodayTest extends AbstractWidgetTypeTest
class UserAmountTodayTest extends AbstractWidgetTest
{
protected function assertDefaultData(AbstractWidgetType $sut)
protected function assertDefaultData(AbstractWidget $sut)
{
self::assertEquals(0.0, $sut->getData());
}
/**
* @return AbstractUserAmountPeriod
* @return AbstractUserRevenuePeriod
*/
public function createSut(): AbstractWidgetType
public function createSut(): AbstractWidget
{
$repository = $this->createMock(TimesheetRepository::class);
$dispatcher = $this->createMock(EventDispatcherInterface::class);
@@ -46,27 +45,16 @@ class UserAmountTodayTest extends AbstractWidgetTypeTest
public function getDefaultOptions(): array
{
return [
'dataType' => 'money',
'icon' => 'money',
'color' => WidgetInterface::COLOR_TODAY,
];
}
public function testData()
{
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('Cannot set data on instances of SimpleStatisticChart');
$sut = $this->createSut();
self::assertInstanceOf(SimpleStatisticChart::class, $sut);
$sut->setData(10);
}
public function testSettings()
{
$sut = $this->createSut();
self::assertEquals('widget/widget-counter.html.twig', $sut->getTemplateName());
self::assertEquals('userAmountToday', $sut->getId());
self::assertEquals('widget/widget-counter-money.html.twig', $sut->getTemplateName());
self::assertEquals('UserAmountToday', $sut->getId());
}
}

View File

@@ -11,28 +11,27 @@ namespace App\Tests\Widget\Type;
use App\Entity\User;
use App\Repository\TimesheetRepository;
use App\Widget\Type\AbstractUserAmountPeriod;
use App\Widget\Type\AbstractWidgetType;
use App\Widget\Type\SimpleStatisticChart;
use App\Widget\Type\AbstractUserRevenuePeriod;
use App\Widget\Type\AbstractWidget;
use App\Widget\Type\UserAmountTotal;
use App\Widget\WidgetInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
/**
* @covers \App\Widget\Type\UserAmountTotal
* @covers \App\Widget\Type\AbstractUserAmountPeriod
* @covers \App\Widget\Type\AbstractUserRevenuePeriod
*/
class UserAmountTotalTest extends AbstractWidgetTypeTest
class UserAmountTotalTest extends AbstractWidgetTest
{
protected function assertDefaultData(AbstractWidgetType $sut)
protected function assertDefaultData(AbstractWidget $sut)
{
self::assertEquals(0.0, $sut->getData());
}
/**
* @return AbstractUserAmountPeriod
* @return AbstractUserRevenuePeriod
*/
public function createSut(): AbstractWidgetType
public function createSut(): AbstractWidget
{
$repository = $this->createMock(TimesheetRepository::class);
$dispatcher = $this->createMock(EventDispatcherInterface::class);
@@ -46,27 +45,16 @@ class UserAmountTotalTest extends AbstractWidgetTypeTest
public function getDefaultOptions(): array
{
return [
'dataType' => 'money',
'icon' => 'money',
'color' => WidgetInterface::COLOR_TOTAL,
];
}
public function testData()
{
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('Cannot set data on instances of SimpleStatisticChart');
$sut = $this->createSut();
self::assertInstanceOf(SimpleStatisticChart::class, $sut);
$sut->setData(10);
}
public function testSettings()
{
$sut = $this->createSut();
self::assertEquals('widget/widget-counter.html.twig', $sut->getTemplateName());
self::assertEquals('userAmountTotal', $sut->getId());
self::assertEquals('widget/widget-counter-money.html.twig', $sut->getTemplateName());
self::assertEquals('UserAmountTotal', $sut->getId());
}
}

View File

@@ -11,28 +11,27 @@ namespace App\Tests\Widget\Type;
use App\Entity\User;
use App\Repository\TimesheetRepository;
use App\Widget\Type\AbstractUserAmountPeriod;
use App\Widget\Type\AbstractWidgetType;
use App\Widget\Type\SimpleStatisticChart;
use App\Widget\Type\AbstractUserRevenuePeriod;
use App\Widget\Type\AbstractWidget;
use App\Widget\Type\UserAmountWeek;
use App\Widget\WidgetInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
/**
* @covers \App\Widget\Type\UserAmountWeek
* @covers \App\Widget\Type\AbstractUserAmountPeriod
* @covers \App\Widget\Type\AbstractUserRevenuePeriod
*/
class UserAmountWeekTest extends AbstractWidgetTypeTest
class UserAmountWeekTest extends AbstractWidgetTest
{
protected function assertDefaultData(AbstractWidgetType $sut)
protected function assertDefaultData(AbstractWidget $sut)
{
self::assertEquals(0.0, $sut->getData());
}
/**
* @return AbstractUserAmountPeriod
* @return AbstractUserRevenuePeriod
*/
public function createSut(): AbstractWidgetType
public function createSut(): AbstractWidget
{
$repository = $this->createMock(TimesheetRepository::class);
$dispatcher = $this->createMock(EventDispatcherInterface::class);
@@ -46,27 +45,16 @@ class UserAmountWeekTest extends AbstractWidgetTypeTest
public function getDefaultOptions(): array
{
return [
'dataType' => 'money',
'icon' => 'money',
'color' => WidgetInterface::COLOR_WEEK,
];
}
public function testData()
{
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('Cannot set data on instances of SimpleStatisticChart');
$sut = $this->createSut();
self::assertInstanceOf(SimpleStatisticChart::class, $sut);
$sut->setData(10);
}
public function testSettings()
{
$sut = $this->createSut();
self::assertEquals('widget/widget-counter.html.twig', $sut->getTemplateName());
self::assertEquals('userAmountWeek', $sut->getId());
self::assertEquals('widget/widget-counter-money.html.twig', $sut->getTemplateName());
self::assertEquals('UserAmountWeek', $sut->getId());
}
}

View File

@@ -9,34 +9,34 @@
namespace App\Tests\Widget\Type;
use App\Configuration\SystemConfiguration;
use App\Entity\User;
use App\Repository\TimesheetRepository;
use App\Tests\Mocks\SystemConfigurationFactory;
use App\Widget\Type\AbstractCounterYear;
use App\Widget\Type\AbstractWidgetType;
use App\Widget\Type\CounterYear;
use App\Widget\Type\SimpleStatisticChart;
use App\Widget\Type\UserAmountYear;
use App\Widget\WidgetInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
/**
* @covers \App\Widget\Type\UserAmountYear
* @covers \App\Widget\Type\CounterYear
* @covers \App\Widget\Type\AbstractCounterYear
*/
class UserAmountYearTest extends AbstractWidgetTypeTest
{
protected function assertDefaultData(AbstractWidgetType $sut)
{
self::assertEquals(0.0, $sut->getData());
self::assertEquals([], $sut->getData());
}
/**
* @return CounterYear
* @return AbstractCounterYear
*/
public function createSut(): AbstractWidgetType
{
$repository = $this->createMock(TimesheetRepository::class);
$configuration = $this->createMock(SystemConfiguration::class);
$repository->method('getStatistic')->willReturn([]);
$configuration = SystemConfigurationFactory::createStub();
$dispatcher = $this->createMock(EventDispatcherInterface::class);
$widget = new UserAmountYear($repository, $configuration, $dispatcher);
@@ -48,27 +48,16 @@ class UserAmountYearTest extends AbstractWidgetTypeTest
public function getDefaultOptions(): array
{
return [
'dataType' => 'money',
'icon' => 'money',
'color' => WidgetInterface::COLOR_YEAR,
];
}
public function testData()
{
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('Cannot set data on instances of SimpleStatisticChart');
$sut = $this->createSut();
self::assertInstanceOf(SimpleStatisticChart::class, $sut);
$sut->setData(10);
}
public function testSettings()
{
$sut = $this->createSut();
self::assertEquals('widget/widget-counter.html.twig', $sut->getTemplateName());
self::assertEquals('userAmountYear', $sut->getId());
self::assertEquals('widget/widget-counter-money.html.twig', $sut->getTemplateName());
self::assertEquals('UserAmountYear', $sut->getId());
}
}

View File

@@ -9,54 +9,46 @@
namespace App\Tests\Widget\Type;
use App\Configuration\SystemConfiguration;
use App\Entity\User;
use App\Repository\TimesheetRepository;
use App\Tests\Mocks\SystemConfigurationFactory;
use App\Widget\Type\AbstractCounterYear;
use App\Widget\Type\AbstractWidgetType;
use App\Widget\Type\CounterYear;
use App\Widget\Type\SimpleStatisticChart;
use App\Widget\Type\UserDurationYear;
/**
* @covers \App\Widget\Type\UserDurationYear
* @covers \App\Widget\Type\CounterYear
* @covers \App\Widget\Type\AbstractCounterYear
*/
class UserDurationYearTest extends AbstractWidgetTypeTest
{
/**
* @return CounterYear
* @return AbstractCounterYear
*/
public function createSut(): AbstractWidgetType
{
$repository = $this->createMock(TimesheetRepository::class);
$configuration = $this->createMock(SystemConfiguration::class);
$configuration = SystemConfigurationFactory::createStub();
return new UserDurationYear($repository, $configuration);
$sut = new UserDurationYear($repository, $configuration);
$sut->setUser(new User());
return $sut;
}
public function getDefaultOptions(): array
{
return [
'dataType' => 'duration',
'icon' => 'duration',
'color' => 'yellow',
];
}
public function testData()
{
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('Cannot set data on instances of SimpleStatisticChart');
$sut = $this->createSut();
self::assertInstanceOf(SimpleStatisticChart::class, $sut);
$sut->setData(10);
}
public function testSettings()
{
$sut = $this->createSut();
self::assertEquals('widget/widget-counter.html.twig', $sut->getTemplateName());
self::assertEquals('widget/widget-counter-duration.html.twig', $sut->getTemplateName());
self::assertEquals('userDurationYear', $sut->getId());
}
}

View File

@@ -9,14 +9,9 @@
namespace App\Tests\Widget;
use App\Repository\WidgetRepository;
use App\Widget\Renderer\SimpleWidgetRenderer;
use App\Widget\Type\More;
use App\Widget\WidgetException;
use App\Widget\WidgetService;
use PHPUnit\Framework\TestCase;
use Twig\Environment;
use Twig\Loader\FilesystemLoader;
/**
* @covers \App\Widget\WidgetService
@@ -25,52 +20,17 @@ class WidgetServiceTest extends TestCase
{
public function testConstruct()
{
$repository = $this->createMock(WidgetRepository::class);
$sut = new WidgetService($repository, []);
$sut = new WidgetService();
self::assertFalse($sut->hasWidget('sdfsdf'));
self::assertCount(0, $sut->getRenderer());
$sut = new WidgetService($repository, [
new SimpleWidgetRenderer(new Environment(new FilesystemLoader()))
]);
self::assertCount(1, $sut->getRenderer());
}
public function testFindRenderer()
{
$repository = $this->createMock(WidgetRepository::class);
$renderer = new SimpleWidgetRenderer(new Environment(new FilesystemLoader()));
$sut = new WidgetService($repository, [$renderer]);
$sut->addRenderer(new SimpleWidgetRenderer(new Environment(new FilesystemLoader())));
self::assertCount(2, $sut->getRenderer());
$found = $sut->findRenderer(new More());
self::assertSame($renderer, $found);
}
public function testFindRendererThrowsException()
{
$this->expectException(WidgetException::class);
$this->expectExceptionMessage('No renderer available for widget "App\Widget\Type\More"');
$repository = $this->createMock(WidgetRepository::class);
$sut = new WidgetService($repository, []);
$sut->findRenderer(new More());
}
public function testHasAndGetWidget()
{
$widget = new More();
$widget->setId('sdfsdf');
$repository = $this->getMockBuilder(WidgetRepository::class)->disableOriginalConstructor()->onlyMethods(['has', 'get'])->getMock();
$repository->expects($this->once())->method('has')->willReturn(true);
$repository->expects($this->once())->method('get')->willReturn($widget);
$sut = new WidgetService($repository, []);
$sut = new WidgetService();
$sut->registerWidget($widget);
self::assertTrue($sut->hasWidget('sdfsdf'));
self::assertSame($widget, $sut->getWidget('sdfsdf'));
}