fix phpunit annotations (#794)

This commit is contained in:
Kevin Papst
2019-05-19 17:05:07 +02:00
committed by GitHub
parent d2ad87d09c
commit 46ff78a4c4
34 changed files with 230 additions and 109 deletions

View File

@@ -10,6 +10,9 @@
namespace App\Form;
use App\Configuration\TimesheetConfiguration;
use App\Entity\Activity;
use App\Entity\Customer;
use App\Entity\Project;
use App\Entity\Timesheet;
use App\Form\Type\ActivityType;
use App\Form\Type\CustomerType;
@@ -80,6 +83,7 @@ class TimesheetEditForm extends AbstractType
$end = null;
$begin = null;
$customerCount = $this->customers->countCustomer(true);
$projectCount = $this->projects->countProject(true);
$isNew = true;
if (isset($options['data'])) {
@@ -123,51 +127,13 @@ class TimesheetEditForm extends AbstractType
}
if ($isNew || null === $end || !$this->configuration->isDurationOnly()) {
$builder->add('begin', DateTimePickerType::class, array_merge($dateTimeOptions, [
'label' => 'label.begin'
]));
$this->addBegin($builder, $dateTimeOptions);
}
if ($this->configuration->isDurationOnly()) {
$builder->add('duration', DurationType::class, [
'required' => false,
'docu_chapter' => 'timesheet.html#duration-format',
'attr' => [
'placeholder' => '00:00',
]
]);
$builder->addEventListener(
FormEvents::POST_SET_DATA,
function (FormEvent $event) {
/** @var Timesheet $data */
$data = $event->getData();
if (null === $data || null === $data->getEnd()) {
$event->getForm()->get('duration')->setData(null);
}
}
);
// make sure that duration is mapped back to end field
$builder->addEventListener(
FormEvents::SUBMIT,
function (FormEvent $event) {
/** @var Timesheet $data */
$data = $event->getData();
$duration = $data->getDuration();
$end = null;
if (null !== $duration) {
$end = clone $data->getBegin();
$end->modify('+ ' . $duration . 'seconds');
}
$data->setEnd($end);
}
);
$this->addDuration($builder);
} else {
$builder->add('end', DateTimePickerType::class, array_merge($dateTimeOptions, [
'label' => 'label.end',
'required' => false,
]));
$this->addEnd($builder, $dateTimeOptions);
}
$projectOptions = [];
@@ -175,35 +141,60 @@ class TimesheetEditForm extends AbstractType
if ($customerCount < 2) {
$projectOptions['group_by'] = null;
} elseif ($options['customer']) {
$builder
->add('customer', CustomerType::class, [
'query_builder' => function (CustomerRepository $repo) use ($customer) {
return $repo->builderForEntityType($customer);
},
'data' => $customer ? $customer : '',
'required' => false,
'placeholder' => null === $customer ? '' : null,
'mapped' => false,
'project_enabled' => true,
]);
$this->addCustomer($builder, $customer);
}
if ($this->projects->countProject(true) <= 1) {
if ($projectCount <= 1) {
$projectOptions['group_by'] = null;
}
$this->addProject($builder, $projectOptions, $project, $customer);
$this->addActivity($builder, $activity, $project);
$this->addDescription($builder);
$this->addTags($builder);
if ($options['include_rate']) {
$this->addRates($builder, $currency);
}
if ($options['include_user']) {
$this->addUser($builder);
}
if ($options['include_exported']) {
$this->addExported($builder);
}
}
protected function addCustomer(FormBuilderInterface $builder, ?Customer $customer = null)
{
$builder
->add('customer', CustomerType::class, [
'query_builder' => function (CustomerRepository $repo) use ($customer) {
return $repo->builderForEntityType($customer);
},
'data' => $customer ? $customer : '',
'required' => false,
'placeholder' => null === $customer ? '' : null,
'mapped' => false,
'project_enabled' => true,
]);
}
protected function addProject(FormBuilderInterface $builder, array $projectOptions, ?Project $project = null, ?Customer $customer = null)
{
$builder
->add(
'project',
ProjectType::class,
array_merge($projectOptions, [
'placeholder' => '',
'activity_enabled' => true,
'query_builder' => function (ProjectRepository $repo) use ($project, $customer) {
return $repo->builderForEntityType($project, $customer);
},
])
);
'placeholder' => '',
'activity_enabled' => true,
'query_builder' => function (ProjectRepository $repo) use ($project, $customer) {
return $repo->builderForEntityType($project, $customer);
},
])
);
// replaces the project select after submission, to make sure only projects for the selected customer are displayed
$builder->addEventListener(
@@ -224,7 +215,10 @@ class TimesheetEditForm extends AbstractType
]);
}
);
}
protected function addActivity(FormBuilderInterface $builder, ?Activity $activity = null, ?Project $project = null)
{
$builder
->add('activity', ActivityType::class, [
'placeholder' => '',
@@ -251,13 +245,72 @@ class TimesheetEditForm extends AbstractType
]);
}
);
}
protected function addBegin(FormBuilderInterface $builder, array $dateTimeOptions)
{
$builder->add('begin', DateTimePickerType::class, array_merge($dateTimeOptions, [
'label' => 'label.begin'
]));
}
protected function addEnd(FormBuilderInterface $builder, array $dateTimeOptions)
{
$builder->add('end', DateTimePickerType::class, array_merge($dateTimeOptions, [
'label' => 'label.end',
'required' => false,
]));
}
protected function addDuration(FormBuilderInterface $builder)
{
$builder->add('duration', DurationType::class, [
'required' => false,
'docu_chapter' => 'timesheet.html#duration-format',
'attr' => [
'placeholder' => '00:00',
]
]);
$builder->addEventListener(
FormEvents::POST_SET_DATA,
function (FormEvent $event) {
/** @var Timesheet $data */
$data = $event->getData();
if (null === $data || null === $data->getEnd()) {
$event->getForm()->get('duration')->setData(null);
}
}
);
// make sure that duration is mapped back to end field
$builder->addEventListener(
FormEvents::SUBMIT,
function (FormEvent $event) {
/** @var Timesheet $data */
$data = $event->getData();
$duration = $data->getDuration();
$end = null;
if (null !== $duration) {
$end = clone $data->getBegin();
$end->modify('+ ' . $duration . 'seconds');
}
$data->setEnd($end);
}
);
}
protected function addDescription(FormBuilderInterface $builder)
{
$builder
->add('description', TextareaType::class, [
'label' => 'label.description',
'required' => false,
]);
}
protected function addTags(FormBuilderInterface $builder)
{
$builder
->add('tags', TagsInputType::class, [
// documentation is for NelmioApiDocBundle
@@ -267,26 +320,29 @@ class TimesheetEditForm extends AbstractType
],
'required' => false,
]);
}
if ($options['include_rate']) {
$builder
->add('fixedRate', FixedRateType::class, [
'currency' => $currency,
])
->add('hourlyRate', HourlyRateType::class, [
'currency' => $currency,
]);
}
if ($options['include_user']) {
$builder->add('user', UserType::class);
}
if ($options['include_exported']) {
$builder->add('exported', YesNoType::class, [
'label' => 'label.exported'
protected function addRates(FormBuilderInterface $builder, $currency)
{
$builder
->add('fixedRate', FixedRateType::class, [
'currency' => $currency,
])
->add('hourlyRate', HourlyRateType::class, [
'currency' => $currency,
]);
}
}
protected function addUser(FormBuilderInterface $builder)
{
$builder->add('user', UserType::class);
}
protected function addExported(FormBuilderInterface $builder)
{
$builder->add('exported', YesNoType::class, [
'label' => 'label.exported'
]);
}
/**

View File

@@ -17,7 +17,6 @@ use Symfony\Bundle\FrameworkBundle\Client;
use Symfony\Component\HttpFoundation\Response;
/**
* @coversDefaultClass \App\API\ActivityController
* @group integration
*/
class ActivityControllerTest extends APIControllerBaseTest

View File

@@ -12,7 +12,6 @@ namespace App\Tests\API;
use App\Entity\User;
/**
* @coversDefaultClass \App\API\ConfigurationController
* @group integration
*/
class ConfigurationControllerTest extends APIControllerBaseTest

View File

@@ -13,7 +13,6 @@ use App\Entity\User;
use Symfony\Component\HttpFoundation\Response;
/**
* @coversDefaultClass \App\API\CustomerController
* @group integration
*/
class CustomerControllerTest extends APIControllerBaseTest

View File

@@ -13,7 +13,7 @@ use App\API\Model\I18n;
use PHPUnit\Framework\TestCase;
/**
* @coversDefaultClass \App\API\Model\I18n
* @covers \App\API\Model\I18n
*/
class I18nTest extends TestCase
{

View File

@@ -17,7 +17,6 @@ use Symfony\Bundle\FrameworkBundle\Client;
use Symfony\Component\HttpFoundation\Response;
/**
* @coversDefaultClass \App\API\ProjectController
* @group integration
*/
class ProjectControllerTest extends APIControllerBaseTest

View File

@@ -13,7 +13,6 @@ use App\Constants;
use App\Entity\User;
/**
* @coversDefaultClass \App\API\StatusController
* @group integration
*/
class StatusControllerTest extends APIControllerBaseTest

View File

@@ -14,7 +14,6 @@ use App\Tests\DataFixtures\TagFixtures;
use Symfony\Component\HttpFoundation\Response;
/**
* @coversDefaultClass \App\API\TagController
* @group integration
*/
class TagControllerTest extends APIControllerBaseTest

View File

@@ -18,7 +18,6 @@ use App\Tests\DataFixtures\TimesheetFixtures;
use Symfony\Component\HttpFoundation\Response;
/**
* @coversDefaultClass \App\API\TimesheetController
* @group integration
*/
class TimesheetControllerTest extends APIControllerBaseTest

View File

@@ -12,7 +12,6 @@ namespace App\Tests\API;
use App\Entity\User;
/**
* @coversDefaultClass \App\API\UserController
* @group integration
*/
class UserControllerTest extends APIControllerBaseTest

View File

@@ -14,7 +14,7 @@ use App\Calendar\Source;
use PHPUnit\Framework\TestCase;
/**
* @coversDefaultClass \App\Calendar\Google
* @covers \App\Calendar\Google
*/
class GoogleTest extends TestCase
{

View File

@@ -13,7 +13,7 @@ use App\Calendar\Source;
use PHPUnit\Framework\TestCase;
/**
* @coversDefaultClass \App\Calendar\Source
* @covers \App\Calendar\Source
*/
class SourceTest extends TestCase
{

View File

@@ -16,7 +16,7 @@ use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\Console\Tester\CommandTester;
/**
* @coversDefaultClass \App\Command\CreateUserCommand
* @covers \App\Command\CreateUserCommand
* @group integration
*/
class CreateUserCommandTest extends KernelTestCase

View File

@@ -12,7 +12,6 @@ namespace App\Tests\Controller;
use App\Entity\User;
/**
* @coversDefaultClass \App\Controller\AboutController
* @group integration
*/
class AboutControllerTest extends ControllerBaseTest

View File

@@ -16,7 +16,6 @@ use App\Tests\DataFixtures\ProjectFixtures;
use App\Tests\DataFixtures\TimesheetFixtures;
/**
* @coversDefaultClass \App\Controller\ActivityController
* @group integration
*/
class ActivityControllerTest extends ControllerBaseTest

View File

@@ -13,7 +13,6 @@ use App\Configuration\CalendarConfiguration;
use App\Tests\Configuration\TestConfigLoader;
/**
* @coversDefaultClass \App\Controller\CalendarController
* @group integration
*/
class CalendarControllerTest extends ControllerBaseTest

View File

@@ -15,7 +15,6 @@ use App\Tests\DataFixtures\CustomerFixtures;
use App\Tests\DataFixtures\TimesheetFixtures;
/**
* @coversDefaultClass \App\Controller\CustomerController
* @group integration
*/
class CustomerControllerTest extends ControllerBaseTest

View File

@@ -12,7 +12,6 @@ namespace App\Tests\Controller;
use App\Entity\User;
/**
* @coversDefaultClass \App\Controller\DashboardController
* @group integration
*/
class DashboardControllerTest extends ControllerBaseTest

View File

@@ -13,7 +13,6 @@ use App\Entity\User;
use App\Tests\DataFixtures\TimesheetFixtures;
/**
* @coversDefaultClass \App\Controller\ExportController
* @group integration
*/
class ExportControllerTest extends ControllerBaseTest

View File

@@ -15,7 +15,6 @@ use App\Form\Type\InitialViewType;
use App\Form\Type\LanguageType;
/**
* @coversDefaultClass \App\Controller\HomepageController
* @group integration
*/
class HomepageControllerTest extends ControllerBaseTest

View File

@@ -16,7 +16,6 @@ use App\Tests\DataFixtures\InvoiceFixtures;
use App\Tests\DataFixtures\TimesheetFixtures;
/**
* @coversDefaultClass \App\Controller\InvoiceController
* @group integration
*/
class InvoiceControllerTest extends ControllerBaseTest

View File

@@ -14,7 +14,6 @@ use App\Plugin\PluginManager;
use App\Tests\Plugin\Fixtures\TestPlugin;
/**
* @coversDefaultClass \App\Controller\PluginController
* @group integration
*/
class PluginControllerTest extends ControllerBaseTest

View File

@@ -17,7 +17,6 @@ use Symfony\Bundle\FrameworkBundle\Client;
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
/**
* @coversDefaultClass \App\Controller\ProfileController
* @group integration
*/
class ProfileControllerTest extends ControllerBaseTest

View File

@@ -16,7 +16,6 @@ use App\Tests\DataFixtures\ProjectFixtures;
use App\Tests\DataFixtures\TimesheetFixtures;
/**
* @coversDefaultClass \App\Controller\ProjectController
* @group integration
*/
class ProjectControllerTest extends ControllerBaseTest

View File

@@ -11,7 +11,7 @@ namespace App\Tests\Controller;
/**
* This test makes sure the login and registration work as expected.
* They live in the FOSUserBundle and are tested already, but we use a different layout.
* The logic is located in the FOSUserBundle and already tested, but we use a different layout.
*
* @group integration
*/

View File

@@ -13,7 +13,6 @@ use App\Configuration\SystemConfiguration;
use App\Entity\User;
/**
* @coversDefaultClass \App\Controller\SystemConfigurationController
* @group integration
*/
class SystemConfigurationControllerTest extends ControllerBaseTest

View File

@@ -13,7 +13,6 @@ use App\Entity\User;
use App\Tests\DataFixtures\TagFixtures;
/**
* @coversDefaultClass \App\Controller\TagController
* @group integration
*/
class TagControllerTest extends ControllerBaseTest

View File

@@ -15,7 +15,6 @@ use App\Form\Type\DateRangeType;
use App\Tests\DataFixtures\TimesheetFixtures;
/**
* @coversDefaultClass \App\Controller\TimesheetController
* @group integration
*/
class TimesheetControllerTest extends ControllerBaseTest

View File

@@ -15,7 +15,6 @@ use App\Form\Type\DateRangeType;
use App\Tests\DataFixtures\TimesheetFixtures;
/**
* @coversDefaultClass \App\Controller\TimesheetTeamController
* @group integration
*/
class TimesheetTeamControllerTest extends ControllerBaseTest

View File

@@ -14,7 +14,6 @@ use App\Entity\User;
use App\Tests\DataFixtures\TimesheetFixtures;
/**
* @coversDefaultClass \App\Controller\UserController
* @group integration
*/
class UserControllerTest extends ControllerBaseTest

View File

@@ -11,12 +11,35 @@ namespace App\Tests\Entity;
use App\Entity\User;
use App\Entity\UserPreference;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @covers \App\Entity\User
*/
class UserTest extends AbstractEntityTest
{
public function testDefaultValues()
{
$user = new User();
$this->assertInstanceOf(ArrayCollection::class, $user->getPreferences());
$this->assertNull($user->getTitle());
$this->assertNull($user->getAvatar());
$this->assertNull($user->getAlias());
$this->assertNull($user->getId());
$this->assertNull($user->getApiToken());
$this->assertNull($user->getPlainApiToken());
$this->assertEquals(User::DEFAULT_LANGUAGE, $user->getLocale());
$user->setAvatar('https://www.gravatar.com/avatar/00000000000000000000000000000000?d=retro&f=y');
$this->assertEquals('https://www.gravatar.com/avatar/00000000000000000000000000000000?d=retro&f=y', $user->getAvatar());
$user->setApiToken('nbvfdswe34567ujko098765rerfghbgvfcdsert');
$this->assertEquals('nbvfdswe34567ujko098765rerfghbgvfcdsert', $user->getApiToken());
$user->setPlainApiToken('https://www.gravatar.com/avatar/nbvfdswe34567ujko098765rerfghbgvfcdsert');
$this->assertEquals('https://www.gravatar.com/avatar/nbvfdswe34567ujko098765rerfghbgvfcdsert', $user->getPlainApiToken());
$user->setTitle('Mr. Code Blaster');
$this->assertEquals('Mr. Code Blaster', $user->getTitle());
}
public function getInvalidTestData()
{
return [

View File

@@ -0,0 +1,56 @@
<?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\EventSubscriber;
use App\Entity\User;
use App\Event\DashboardEvent;
use App\Event\ThemeEvent;
use App\Model\DashboardSection;
use PHPUnit\Framework\TestCase;
/**
* @covers \App\Event\ThemeEvent
*/
class ThemeEventTest extends TestCase
{
public function testDefaultValues()
{
$user = new User();
$user->setAlias('foo');
$sut = new ThemeEvent($user);
$this->assertEquals($user, $sut->getUser());
$this->assertNull($sut->getPayload());
$this->assertEquals('', $sut->getContent());
}
public function testGetterAndSetter()
{
$user = new User();
$user->setAlias('foo');
$payload = [null, '', 'test', new \stdClass()];
$sut = new ThemeEvent($user);
$sut->setPayload($payload);
$this->assertEquals($payload, $sut->getPayload());
$sut = new ThemeEvent($user, $payload);
$this->assertEquals($payload, $sut->getPayload());
$sut = new ThemeEvent($user);
$sut->addContent('foo');
$this->assertEquals('foo', $sut->getContent());
$sut->addContent('<script>');
$this->assertEquals('foo<script>', $sut->getContent());
}
}

View File

@@ -41,4 +41,14 @@ class ServiceExportTest extends TestCase
$this->assertEquals(1, count($sut->getRenderer()));
}
public function testAddViaConstruct()
{
$renderer = [new HtmlRenderer(
$this->getMockBuilder(Environment::class)->disableOriginalConstructor()->getMock()
)];
$sut = new ServiceExport($renderer);
$this->assertEquals(1, count($sut->getRenderer()));
}
}

View File

@@ -52,8 +52,8 @@ class TagArrayToStringTransformerTest extends AbstractRendererTest
$this->assertEquals([], $sut->reverseTransform(''));
$this->assertEquals([], $sut->reverseTransform(null));
$actual = $sut->reverseTransform('foo, bar');
$actual = $sut->reverseTransform('foo, bar, hello');
$this->assertEquals($results, $actual);
$this->assertEquals(array_merge($results, [(new Tag())->setName('hello')]), $actual);
}
}