Upgrade tests to PhpUnit 10 (#5252)

This commit is contained in:
Kevin Papst
2024-12-22 01:25:30 +01:00
committed by GitHub
parent 9bd37fb695
commit c7f0508707
377 changed files with 3308 additions and 3409 deletions

View File

@@ -90,7 +90,7 @@
"phpstan/phpstan-phpunit": "^2.0", "phpstan/phpstan-phpunit": "^2.0",
"phpstan/phpstan-strict-rules": "^2.0", "phpstan/phpstan-strict-rules": "^2.0",
"phpstan/phpstan-symfony": "^2.0", "phpstan/phpstan-symfony": "^2.0",
"phpunit/phpunit": "9.5.*", "phpunit/phpunit": "^10.0",
"symfony/browser-kit": "^6.0", "symfony/browser-kit": "^6.0",
"symfony/css-selector": "^6.0", "symfony/css-selector": "^6.0",
"symfony/debug-bundle": "^6.0", "symfony/debug-bundle": "^6.0",

864
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -3657,11 +3657,6 @@ parameters:
count: 2 count: 2
path: src/Project/ProjectStatisticService.php path: src/Project/ProjectStatisticService.php
-
message: "#^Parameter \\#1 \\$year of method App\\\\Reporting\\\\ProjectDetails\\\\ProjectDetailsModel\\:\\:addYearActivity\\(\\) expects string, int\\|string given\\.$#"
count: 1
path: src/Project/ProjectStatisticService.php
- -
message: "#^Parameter \\#2 \\$statistic of class App\\\\Event\\\\ProjectStatisticEvent constructor expects App\\\\Model\\\\ProjectStatistic, App\\\\Model\\\\ProjectStatistic\\|null given\\.$#" message: "#^Parameter \\#2 \\$statistic of class App\\\\Event\\\\ProjectStatisticEvent constructor expects App\\\\Model\\\\ProjectStatistic, App\\\\Model\\\\ProjectStatistic\\|null given\\.$#"
count: 1 count: 1

View File

@@ -1,9 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd"
backupGlobals="false" backupGlobals="false"
colors="true" colors="true"
bootstrap="tests/bootstrap.php"> bootstrap="tests/bootstrap.php"
cacheDirectory="var/cache/phpunit/">
<php> <php>
<ini name="error_reporting" value="-1"/> <ini name="error_reporting" value="-1"/>
<ini name="max_execution_time" value="-1"/> <ini name="max_execution_time" value="-1"/>
@@ -40,7 +41,7 @@
</testsuite> </testsuite>
</testsuites> </testsuites>
<coverage processUncoveredFiles="true"> <coverage>
<include> <include>
<directory suffix=".php">src/</directory> <directory suffix=".php">src/</directory>
<directory suffix=".php">templates/</directory> <directory suffix=".php">templates/</directory>
@@ -59,15 +60,8 @@
</exclude> </exclude>
</coverage> </coverage>
<!--
wrap tests inside database transactions, so tests can safely manipulate contents without
affecting other tests. @see https://github.com/dmaicher/doctrine-test-bundle
-->
<extensions> <extensions>
<extension class="DAMA\DoctrineTestBundle\PHPUnit\PHPUnitExtension"/> <bootstrap class="DAMA\DoctrineTestBundle\PHPUnit\PHPUnitExtension"/>
</extensions> </extensions>
<listeners>
<listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener"/>
</listeners>
</phpunit> </phpunit>

View File

@@ -242,6 +242,6 @@ final class WorkingTimeService
$durations[$row['day']] = (int) $row['duration']; $durations[$row['day']] = (int) $row['duration'];
} }
return $durations; // @phpstan-ignore-line return $durations;
} }
} }

View File

@@ -334,9 +334,6 @@
"sebastian/recursion-context": { "sebastian/recursion-context": {
"version": "3.0.0" "version": "3.0.0"
}, },
"sebastian/resource-operations": {
"version": "1.0.0"
},
"sebastian/type": { "sebastian/type": {
"version": "1.1.3" "version": "1.1.3"
}, },

View File

@@ -11,7 +11,7 @@ namespace App\Tests\API;
use App\DataFixtures\UserFixtures; use App\DataFixtures\UserFixtures;
use App\Entity\User; use App\Entity\User;
use App\Tests\Controller\ControllerBaseTest; use App\Tests\Controller\AbstractControllerBaseTestCase;
use PHPUnit\Framework\Constraint\IsType; use PHPUnit\Framework\Constraint\IsType;
use Symfony\Component\DomCrawler\Crawler; use Symfony\Component\DomCrawler\Crawler;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
@@ -20,7 +20,7 @@ use Symfony\Component\HttpKernel\HttpKernelBrowser;
/** /**
* Adds some useful functions for writing API integration tests. * Adds some useful functions for writing API integration tests.
*/ */
abstract class APIControllerBaseTest extends ControllerBaseTest abstract class APIControllerBaseTestCase extends AbstractControllerBaseTestCase
{ {
/** /**
* @return array<string, string> * @return array<string, string>
@@ -50,15 +50,15 @@ abstract class APIControllerBaseTest extends ControllerBaseTest
protected function assertPagination(Response $response, int $page, int $pageSize, int $totalPages, int $totalResults): void protected function assertPagination(Response $response, int $page, int $pageSize, int $totalPages, int $totalResults): void
{ {
$this->assertTrue($response->headers->has('X-Page'), 'Missing "X-Page" header'); self::assertTrue($response->headers->has('X-Page'), 'Missing "X-Page" header');
$this->assertTrue($response->headers->has('X-Total-Count'), 'Missing "X-Total-Count" header'); self::assertTrue($response->headers->has('X-Total-Count'), 'Missing "X-Total-Count" header');
$this->assertTrue($response->headers->has('X-Total-Pages'), 'Missing "X-Total-Pages" header'); self::assertTrue($response->headers->has('X-Total-Pages'), 'Missing "X-Total-Pages" header');
$this->assertTrue($response->headers->has('X-Per-Page'), 'Missing "X-Per-Page" header'); self::assertTrue($response->headers->has('X-Per-Page'), 'Missing "X-Per-Page" header');
$this->assertEquals($page, $response->headers->get('X-Page')); self::assertEquals($page, $response->headers->get('X-Page'));
$this->assertEquals($totalResults, $response->headers->get('X-Total-Count')); self::assertEquals($totalResults, $response->headers->get('X-Total-Count'));
$this->assertEquals($totalPages, $response->headers->get('X-Total-Pages')); self::assertEquals($totalPages, $response->headers->get('X-Total-Pages'));
$this->assertEquals($pageSize, $response->headers->get('X-Per-Page')); self::assertEquals($pageSize, $response->headers->get('X-Per-Page'));
} }
protected function assertRequestIsSecured(HttpKernelBrowser $client, string $url, string $method = 'GET'): void protected function assertRequestIsSecured(HttpKernelBrowser $client, string $url, string $method = 'GET'): void
@@ -242,7 +242,7 @@ abstract class APIControllerBaseTest extends ControllerBaseTest
if (\count($expectedFields) > 0) { if (\count($expectedFields) > 0) {
foreach ($expectedFields as $expectedField) { foreach ($expectedFields as $expectedField) {
$this->assertArrayHasKey($expectedField, $data, 'Expected field is missing: ' . $expectedField); self::assertArrayHasKey($expectedField, $data, 'Expected field is missing: ' . $expectedField);
} }
} }

View File

@@ -18,7 +18,7 @@ use App\Tests\DataFixtures\TimesheetFixtures;
/** /**
* @group integration * @group integration
*/ */
class ActionsControllerTest extends APIControllerBaseTest class ActionsControllerTest extends APIControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -58,7 +58,7 @@ class ActionsControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, \sprintf('/api/actions/timesheet/%s/%s/en', $items[0]->getId(), $view)); $this->assertAccessIsGranted($client, \sprintf('/api/actions/timesheet/%s/%s/en', $items[0]->getId(), $view));
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
foreach ($result as $item) { foreach ($result as $item) {
self::assertIsArray($item); self::assertIsArray($item);
self::assertApiResponseTypeStructure('PageActionItem', $item); self::assertApiResponseTypeStructure('PageActionItem', $item);
@@ -110,7 +110,7 @@ class ActionsControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, \sprintf('/api/actions/activity/%s/%s/en', $activities[0]->getId(), $view)); $this->assertAccessIsGranted($client, \sprintf('/api/actions/activity/%s/%s/en', $activities[0]->getId(), $view));
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
foreach ($result as $item) { foreach ($result as $item) {
self::assertIsArray($item); self::assertIsArray($item);
self::assertApiResponseTypeStructure('PageActionItem', $item); self::assertApiResponseTypeStructure('PageActionItem', $item);
@@ -161,7 +161,7 @@ class ActionsControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, \sprintf('/api/actions/project/%s/%s/en', $projects[0]->getId(), $view)); $this->assertAccessIsGranted($client, \sprintf('/api/actions/project/%s/%s/en', $projects[0]->getId(), $view));
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
foreach ($result as $item) { foreach ($result as $item) {
self::assertIsArray($item); self::assertIsArray($item);
self::assertApiResponseTypeStructure('PageActionItem', $item); self::assertApiResponseTypeStructure('PageActionItem', $item);
@@ -208,7 +208,7 @@ class ActionsControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, \sprintf('/api/actions/customer/%s/%s/en', $customers[0]->getId(), $view)); $this->assertAccessIsGranted($client, \sprintf('/api/actions/customer/%s/%s/en', $customers[0]->getId(), $view));
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
foreach ($result as $item) { foreach ($result as $item) {
self::assertIsArray($item); self::assertIsArray($item);
self::assertApiResponseTypeStructure('PageActionItem', $item); self::assertApiResponseTypeStructure('PageActionItem', $item);

View File

@@ -28,7 +28,7 @@ use Symfony\Component\HttpFoundation\Response;
/** /**
* @group integration * @group integration
*/ */
class ActivityControllerTest extends APIControllerBaseTest class ActivityControllerTest extends APIControllerBaseTestCase
{ {
use RateControllerTestTrait; use RateControllerTestTrait;
@@ -173,19 +173,19 @@ class ActivityControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, $url, 'GET', $parameters); $this->assertAccessIsGranted($client, $url, 'GET', $parameters);
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
$this->assertEquals(\count($expected), \count($result)); self::assertEquals(\count($expected), \count($result));
for ($i = 0; $i < \count($result); $i++) { for ($i = 0; $i < \count($result); $i++) {
$activity = $result[$i]; $activity = $result[$i];
$hasProject = $expected[$i][0]; $hasProject = $expected[$i][0];
self::assertIsArray($activity); self::assertIsArray($activity);
self::assertApiResponseTypeStructure('ActivityCollection', $activity); self::assertApiResponseTypeStructure('ActivityCollection', $activity);
if ($hasProject && $projectId !== null) { if ($hasProject && $projectId !== null) {
$this->assertEquals($projectId, $activity['project']); self::assertEquals($projectId, $activity['project']);
} }
} }
} }
@@ -193,7 +193,7 @@ class ActivityControllerTest extends APIControllerBaseTest
/** /**
* @return \Generator<array<mixed>> * @return \Generator<array<mixed>>
*/ */
public function getCollectionTestData(): iterable public static function getCollectionTestData(): iterable
{ {
yield ['/api/activities', null, [], [[false], [true, 2], [true, 2], [null], [true, 1]]]; yield ['/api/activities', null, [], [[false], [true, 2], [true, 2], [null], [true, 1]]];
//yield ['/api/activities', [], [[false], [false], [true, 2], [true, 1], [true, 2]]]; //yield ['/api/activities', [], [[false], [false], [true, 2], [true, 1], [true, 2]]];
@@ -217,17 +217,17 @@ class ActivityControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/activities', 'GET', $query); $this->assertAccessIsGranted($client, '/api/activities', 'GET', $query);
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
$this->assertEquals(5, \count($result)); self::assertEquals(5, \count($result));
self::assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('ActivityCollection', $result[0]); self::assertApiResponseTypeStructure('ActivityCollection', $result[0]);
$this->assertEquals($imports[0]->getId(), $result[4]['project']); self::assertEquals($imports[0]->getId(), $result[4]['project']);
$this->assertEquals($imports[1]->getId(), $result[3]['project']); self::assertEquals($imports[1]->getId(), $result[3]['project']);
$this->assertEquals($imports[1]->getId(), $result[2]['project']); self::assertEquals($imports[1]->getId(), $result[2]['project']);
} }
public function testGetEntityIsSecure(): void public function testGetEntityIsSecure(): void
@@ -241,10 +241,10 @@ class ActivityControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/activities/1'); $this->assertAccessIsGranted($client, '/api/activities/1');
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('ActivityEntity', $result); self::assertApiResponseTypeStructure('ActivityEntity', $result);
} }
@@ -264,15 +264,15 @@ class ActivityControllerTest extends APIControllerBaseTest
'timeBudget' => '7200', 'timeBudget' => '7200',
]; ];
$this->request($client, '/api/activities', 'POST', [], json_encode($data)); $this->request($client, '/api/activities', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('ActivityEntity', $result); self::assertApiResponseTypeStructure('ActivityEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
} }
public function testPostActionWithLeastFields(): void public function testPostActionWithLeastFields(): void
@@ -282,15 +282,15 @@ class ActivityControllerTest extends APIControllerBaseTest
'name' => 'foo', 'name' => 'foo',
]; ];
$this->request($client, '/api/activities', 'POST', [], json_encode($data)); $this->request($client, '/api/activities', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('ActivityEntity', $result); self::assertApiResponseTypeStructure('ActivityEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
} }
public function testPostActionWithInvalidUser(): void public function testPostActionWithInvalidUser(): void
@@ -331,15 +331,15 @@ class ActivityControllerTest extends APIControllerBaseTest
'timeBudget' => '7200', 'timeBudget' => '7200',
]; ];
$this->request($client, '/api/activities/1', 'PATCH', [], json_encode($data)); $this->request($client, '/api/activities/1', 'PATCH', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('ActivityEntity', $result); self::assertApiResponseTypeStructure('ActivityEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
} }
public function testPatchActionWithNonGlobalActivity(): void public function testPatchActionWithNonGlobalActivity(): void
@@ -356,16 +356,16 @@ class ActivityControllerTest extends APIControllerBaseTest
'timeBudget' => '7200', 'timeBudget' => '7200',
]; ];
$this->request($client, '/api/activities/' . $imports[2]->getId(), 'PATCH', [], json_encode($data)); $this->request($client, '/api/activities/' . $imports[2]->getId(), 'PATCH', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('ActivityEntity', $result); self::assertApiResponseTypeStructure('ActivityEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
$this->assertEquals($imports[1]->getId(), $result['project']); self::assertEquals($imports[1]->getId(), $result['project']);
} }
public function testPatchActionWithInvalidUser(): void public function testPatchActionWithInvalidUser(): void
@@ -398,7 +398,7 @@ class ActivityControllerTest extends APIControllerBaseTest
$this->request($client, '/api/activities/1', 'PATCH', [], json_encode($data)); $this->request($client, '/api/activities/1', 'PATCH', [], json_encode($data));
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertEquals(400, $response->getStatusCode()); self::assertEquals(400, $response->getStatusCode());
$this->assertApiCallValidationError($response, ['name']); $this->assertApiCallValidationError($response, ['name']);
} }
@@ -444,12 +444,12 @@ class ActivityControllerTest extends APIControllerBaseTest
]; ];
$this->request($client, '/api/activities/1/meta', 'PATCH', [], json_encode($data)); $this->request($client, '/api/activities/1/meta', 'PATCH', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Activity $activity */ /** @var Activity $activity */
$activity = $em->getRepository(Activity::class)->find(1); $activity = $em->getRepository(Activity::class)->find(1);
$this->assertEquals('another,testing,bar', $activity->getMetaField('metatestmock')->getValue()); self::assertEquals('another,testing,bar', $activity->getMetaField('metatestmock')->getValue());
} }
// ------------------------------- [DELETE] ------------------------------- // ------------------------------- [DELETE] -------------------------------
@@ -499,9 +499,9 @@ class ActivityControllerTest extends APIControllerBaseTest
$id = $result['id']; $id = $result['id'];
$this->request($client, '/api/activities/' . $id, Request::METHOD_DELETE); $this->request($client, '/api/activities/' . $id, Request::METHOD_DELETE);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
self::assertEquals(Response::HTTP_NO_CONTENT, $client->getResponse()->getStatusCode()); self::assertEquals(Response::HTTP_NO_CONTENT, $client->getResponse()->getStatusCode());
$this->assertEmpty($client->getResponse()->getContent()); self::assertEmpty($client->getResponse()->getContent());
$this->request($client, $getUrl); $this->request($client, $getUrl);
$this->assertApiException($client->getResponse(), [ $this->assertApiException($client->getResponse(), [

View File

@@ -10,12 +10,12 @@
namespace App\Tests\API; namespace App\Tests\API;
use App\Entity\User; use App\Entity\User;
use App\Tests\Controller\ControllerBaseTest; use App\Tests\Controller\AbstractControllerBaseTestCase;
/** /**
* @group integration * @group integration
*/ */
class ApiDocControllerTest extends ControllerBaseTest class ApiDocControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -26,7 +26,7 @@ class ApiDocControllerTest extends ControllerBaseTest
{ {
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER); $client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$this->assertAccessIsGranted($client, '/api/doc'); $this->assertAccessIsGranted($client, '/api/doc');
$this->assertStringContainsString('<title>Kimai', $client->getResponse()->getContent()); self::assertStringContainsString('<title>Kimai', $client->getResponse()->getContent());
$result = $client->getCrawler()->filter('script#swagger-data'); $result = $client->getCrawler()->filter('script#swagger-data');
$swaggerJson = json_decode($result->text(), true); $swaggerJson = json_decode($result->text(), true);
$tags = []; $tags = [];
@@ -104,25 +104,25 @@ class ApiDocControllerTest extends ControllerBaseTest
'/api/users/api-token/{id}', '/api/users/api-token/{id}',
]; ];
$this->assertArrayHasKey('openapi', $json); self::assertArrayHasKey('openapi', $json);
$this->assertEquals('3.0.0', $json['openapi']); self::assertEquals('3.0.0', $json['openapi']);
$this->assertArrayHasKey('info', $json); self::assertArrayHasKey('info', $json);
$this->assertStringStartsWith('Kimai', $json['info']['title']); self::assertStringStartsWith('Kimai', $json['info']['title']);
$this->assertEquals('1.0', $json['info']['version']); self::assertEquals('1.0', $json['info']['version']);
$this->assertArrayHasKey('paths', $json); self::assertArrayHasKey('paths', $json);
$this->assertEquals($paths, array_keys($json['paths'])); self::assertEquals($paths, array_keys($json['paths']));
$this->assertArrayHasKey('security', $json); self::assertArrayHasKey('security', $json);
$this->assertEquals(['bearer' => []], $json['security'][0]); self::assertEquals(['bearer' => []], $json['security'][0]);
$this->assertArrayHasKey('components', $json); self::assertArrayHasKey('components', $json);
$this->assertArrayHasKey('schemas', $json['components']); self::assertArrayHasKey('schemas', $json['components']);
$this->assertArrayHasKey('securitySchemes', $json['components']); self::assertArrayHasKey('securitySchemes', $json['components']);
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
} }
protected function createUrl(string $url): string protected function createUrl(string $url): string

View File

@@ -55,11 +55,11 @@ class AccessTokenHandlerTest extends TestCase
$user = new User(); $user = new User();
$user->setUserIdentifier('foo-bar'); $user->setUserIdentifier('foo-bar');
$accessToken = new AccessToken($user, 'Test'); $accessToken = new AccessToken($user, 'Test');
$this->assertNull($accessToken->getLastUsage()); self::assertNull($accessToken->getLastUsage());
$sut = $this->getSut($accessToken); $sut = $this->getSut($accessToken);
$badge = $sut->getUserBadgeFrom('foo'); $badge = $sut->getUserBadgeFrom('foo');
$this->assertNotNull($accessToken->getLastUsage()); self::assertNotNull($accessToken->getLastUsage());
$this->assertSame('foo-bar', $badge->getUserIdentifier()); self::assertSame('foo-bar', $badge->getUserIdentifier());
} }
} }

View File

@@ -19,7 +19,7 @@ use Symfony\Component\HttpFoundation\Response;
* @group legacy * @group legacy
* @group integration * @group integration
*/ */
class AuthenticationTest extends APIControllerBaseTest class AuthenticationTest extends APIControllerBaseTestCase
{ {
public function testPinIsSecure(): void public function testPinIsSecure(): void
{ {
@@ -31,11 +31,11 @@ class AuthenticationTest extends APIControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER); $client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$this->assertAccessIsGranted($client, '/api/ping'); $this->assertAccessIsGranted($client, '/api/ping');
$response = $client->getResponse()->getContent(); $response = $client->getResponse()->getContent();
$this->assertIsString($response); self::assertIsString($response);
$result = json_decode($response, true); $result = json_decode($response, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertEquals(['message' => 'pong'], $result); self::assertEquals(['message' => 'pong'], $result);
} }
public function testPingWithAuthTokenAndUsername(): void public function testPingWithAuthTokenAndUsername(): void
@@ -44,11 +44,11 @@ class AuthenticationTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/ping'); $this->assertAccessIsGranted($client, '/api/ping');
$response = $client->getResponse()->getContent(); $response = $client->getResponse()->getContent();
$this->assertIsString($response); self::assertIsString($response);
$result = json_decode($response, true); $result = json_decode($response, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertEquals(['message' => 'pong'], $result); self::assertEquals(['message' => 'pong'], $result);
} }
public function testPingWithInvalidAuthTokenAndUsername(): void public function testPingWithInvalidAuthTokenAndUsername(): void
@@ -64,15 +64,15 @@ class AuthenticationTest extends APIControllerBaseTest
'message' => 'Invalid credentials', 'message' => 'Invalid credentials',
]; ];
$this->assertIsString($response->getContent()); self::assertIsString($response->getContent());
$this->assertEquals( self::assertEquals(
$data, $data,
json_decode($response->getContent(), true), json_decode($response->getContent(), true),
\sprintf('The secure URL %s is not protected.', $url) \sprintf('The secure URL %s is not protected.', $url)
); );
$this->assertEquals( self::assertEquals(
Response::HTTP_FORBIDDEN, Response::HTTP_FORBIDDEN,
$response->getStatusCode(), $response->getStatusCode(),
\sprintf('The secure URL %s has the wrong status code %s.', $url, $response->getStatusCode()) \sprintf('The secure URL %s has the wrong status code %s.', $url, $response->getStatusCode())

View File

@@ -14,7 +14,7 @@ use App\Entity\User;
/** /**
* @group integration * @group integration
*/ */
class ConfigurationControllerTest extends APIControllerBaseTest class ConfigurationControllerTest extends APIControllerBaseTestCase
{ {
public function testIsTimesheetSecure(): void public function testIsTimesheetSecure(): void
{ {
@@ -26,18 +26,18 @@ class ConfigurationControllerTest extends APIControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER); $client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$this->assertAccessIsGranted($client, '/api/config/timesheet', 'GET'); $this->assertAccessIsGranted($client, '/api/config/timesheet', 'GET');
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
$expectedKeys = ['activeEntriesHardLimit', 'defaultBeginTime', 'isAllowFutureTimes', 'isAllowOverlapping', 'trackingMode']; $expectedKeys = ['activeEntriesHardLimit', 'defaultBeginTime', 'isAllowFutureTimes', 'isAllowOverlapping', 'trackingMode'];
$this->assertCount(\count($expectedKeys), $result); self::assertCount(\count($expectedKeys), $result);
$actual = array_keys($result); $actual = array_keys($result);
sort($actual); sort($actual);
sort($expectedKeys); sort($expectedKeys);
$this->assertEquals($expectedKeys, $actual, 'Config structure does not match'); self::assertEquals($expectedKeys, $actual, 'Config structure does not match');
} }
public function testIsColorsSecure(): void public function testIsColorsSecure(): void
@@ -50,11 +50,11 @@ class ConfigurationControllerTest extends APIControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER); $client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$this->assertAccessIsGranted($client, '/api/config/colors', 'GET'); $this->assertAccessIsGranted($client, '/api/config/colors', 'GET');
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$actual = json_decode($content, true); $actual = json_decode($content, true);
$this->assertIsArray($actual); self::assertIsArray($actual);
$this->assertNotEmpty($actual); self::assertNotEmpty($actual);
$expected = [ $expected = [
'Silver' => '#c0c0c0', 'Silver' => '#c0c0c0',
'Gray' => '#808080', 'Gray' => '#808080',
@@ -84,8 +84,8 @@ class ConfigurationControllerTest extends APIControllerBaseTest
'Rose' => '#ffe4e1', 'Rose' => '#ffe4e1',
'Lavender' => '#E6E6FA', 'Lavender' => '#E6E6FA',
]; ];
$this->assertCount(\count($expected), $actual); self::assertCount(\count($expected), $actual);
$this->assertEquals($expected, $actual, 'Color structure does not match'); self::assertEquals($expected, $actual, 'Color structure does not match');
} }
} }

View File

@@ -28,7 +28,7 @@ use Symfony\Component\HttpFoundation\Response;
/** /**
* @group integration * @group integration
*/ */
class CustomerControllerTest extends APIControllerBaseTest class CustomerControllerTest extends APIControllerBaseTestCase
{ {
use RateControllerTestTrait; use RateControllerTestTrait;
@@ -140,12 +140,12 @@ class CustomerControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/customers'); $this->assertAccessIsGranted($client, '/api/customers');
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
$this->assertEquals(1, \count($result)); self::assertEquals(1, \count($result));
self::assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('CustomerCollection', $result[0]); self::assertApiResponseTypeStructure('CustomerCollection', $result[0]);
} }
@@ -157,12 +157,12 @@ class CustomerControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/customers', 'GET', $query); $this->assertAccessIsGranted($client, '/api/customers', 'GET', $query);
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
$this->assertEquals(1, \count($result)); self::assertEquals(1, \count($result));
self::assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('CustomerCollection', $result[0]); self::assertApiResponseTypeStructure('CustomerCollection', $result[0]);
} }
@@ -178,10 +178,10 @@ class CustomerControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/customers/1'); $this->assertAccessIsGranted($client, '/api/customers/1');
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('CustomerEntity', $result); self::assertApiResponseTypeStructure('CustomerEntity', $result);
} }
@@ -225,10 +225,10 @@ class CustomerControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/customers/1'); $this->assertAccessIsGranted($client, '/api/customers/1');
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('CustomerEntity', $result); self::assertApiResponseTypeStructure('CustomerEntity', $result);
} }
@@ -250,15 +250,15 @@ class CustomerControllerTest extends APIControllerBaseTest
'timeBudget' => '7200', 'timeBudget' => '7200',
]; ];
$this->request($client, '/api/customers', 'POST', [], json_encode($data)); $this->request($client, '/api/customers', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('CustomerEntity', $result); self::assertApiResponseTypeStructure('CustomerEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
} }
public function testPostActionWithLeastFields(): void public function testPostActionWithLeastFields(): void
@@ -271,15 +271,15 @@ class CustomerControllerTest extends APIControllerBaseTest
'timezone' => 'Europe/Berlin', 'timezone' => 'Europe/Berlin',
]; ];
$this->request($client, '/api/customers', 'POST', [], json_encode($data)); $this->request($client, '/api/customers', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('CustomerEntity', $result); self::assertApiResponseTypeStructure('CustomerEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
} }
public function testPostActionWithInvalidUser(): void public function testPostActionWithInvalidUser(): void
@@ -327,15 +327,15 @@ class CustomerControllerTest extends APIControllerBaseTest
'timeBudget' => '7200', 'timeBudget' => '7200',
]; ];
$this->request($client, '/api/customers/1', 'PATCH', [], json_encode($data)); $this->request($client, '/api/customers/1', 'PATCH', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('CustomerEntity', $result); self::assertApiResponseTypeStructure('CustomerEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
} }
public function testPatchActionWithInvalidUser(): void public function testPatchActionWithInvalidUser(): void
@@ -373,7 +373,7 @@ class CustomerControllerTest extends APIControllerBaseTest
$this->request($client, '/api/customers/1', 'PATCH', [], json_encode($data)); $this->request($client, '/api/customers/1', 'PATCH', [], json_encode($data));
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertEquals(400, $response->getStatusCode()); self::assertEquals(400, $response->getStatusCode());
$this->assertApiCallValidationError($response, ['currency']); $this->assertApiCallValidationError($response, ['currency']);
} }
@@ -426,12 +426,12 @@ class CustomerControllerTest extends APIControllerBaseTest
]; ];
$this->request($client, '/api/customers/1/meta', 'PATCH', [], json_encode($data)); $this->request($client, '/api/customers/1/meta', 'PATCH', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Customer $customer */ /** @var Customer $customer */
$customer = $em->getRepository(Customer::class)->find(1); $customer = $em->getRepository(Customer::class)->find(1);
$this->assertEquals('another,testing,bar', $customer->getMetaField('metatestmock')->getValue()); self::assertEquals('another,testing,bar', $customer->getMetaField('metatestmock')->getValue());
} }
// ------------------------------- [DELETE] ------------------------------- // ------------------------------- [DELETE] -------------------------------
@@ -481,9 +481,9 @@ class CustomerControllerTest extends APIControllerBaseTest
$id = $result['id']; $id = $result['id'];
$this->request($client, '/api/customers/' . $id, Request::METHOD_DELETE); $this->request($client, '/api/customers/' . $id, Request::METHOD_DELETE);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
self::assertEquals(Response::HTTP_NO_CONTENT, $client->getResponse()->getStatusCode()); self::assertEquals(Response::HTTP_NO_CONTENT, $client->getResponse()->getStatusCode());
$this->assertEmpty($client->getResponse()->getContent()); self::assertEmpty($client->getResponse()->getContent());
$this->request($client, $getUrl); $this->request($client, $getUrl);
$this->assertApiException($client->getResponse(), [ $this->assertApiException($client->getResponse(), [

View File

@@ -16,7 +16,7 @@ use App\Tests\DataFixtures\InvoiceFixtures;
/** /**
* @group integration * @group integration
*/ */
class InvoiceControllerTest extends APIControllerBaseTest class InvoiceControllerTest extends APIControllerBaseTestCase
{ {
/** /**
* @return Invoice[] * @return Invoice[]
@@ -45,12 +45,12 @@ class InvoiceControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/invoices'); $this->assertAccessIsGranted($client, '/api/invoices');
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
$this->assertEquals(10, \count($result)); self::assertEquals(10, \count($result));
self::assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('InvoiceCollection', $result[0]); self::assertApiResponseTypeStructure('InvoiceCollection', $result[0]);
} }
@@ -67,12 +67,12 @@ class InvoiceControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/invoices', 'GET', $query); $this->assertAccessIsGranted($client, '/api/invoices', 'GET', $query);
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
$this->assertEquals(7, \count($result)); self::assertEquals(7, \count($result));
self::assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('InvoiceCollection', $result[0]); self::assertApiResponseTypeStructure('InvoiceCollection', $result[0]);
} }
@@ -86,12 +86,12 @@ class InvoiceControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/invoices', 'GET', $query); $this->assertAccessIsGranted($client, '/api/invoices', 'GET', $query);
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
$this->assertEquals(4, \count($result)); self::assertEquals(4, \count($result));
$this->assertPagination($client->getResponse(), 2, 4, 5, 20); $this->assertPagination($client->getResponse(), 2, 4, 5, 20);
self::assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('InvoiceCollection', $result[0]); self::assertApiResponseTypeStructure('InvoiceCollection', $result[0]);
@@ -113,10 +113,10 @@ class InvoiceControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/invoices/' . $invoices[0]->getId()); $this->assertAccessIsGranted($client, '/api/invoices/' . $invoices[0]->getId());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('Invoice', $result); self::assertApiResponseTypeStructure('Invoice', $result);
} }

View File

@@ -28,7 +28,7 @@ use Symfony\Component\HttpFoundation\Response;
/** /**
* @group integration * @group integration
*/ */
class ProjectControllerTest extends APIControllerBaseTest class ProjectControllerTest extends APIControllerBaseTestCase
{ {
use RateControllerTestTrait; use RateControllerTestTrait;
@@ -101,12 +101,12 @@ class ProjectControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/projects'); $this->assertAccessIsGranted($client, '/api/projects');
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
$this->assertEquals(1, \count($result)); self::assertEquals(1, \count($result));
self::assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('ProjectCollection', $result[0]); self::assertApiResponseTypeStructure('ProjectCollection', $result[0]);
} }
@@ -224,18 +224,18 @@ class ProjectControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, $url, 'GET', $parameters); $this->assertAccessIsGranted($client, $url, 'GET', $parameters);
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertEquals(\count($expected), \count($result), 'Found wrong amount of projects'); self::assertEquals(\count($expected), \count($result), 'Found wrong amount of projects');
for ($i = 0; $i < \count($expected); $i++) { for ($i = 0; $i < \count($expected); $i++) {
$project = $result[$i]; $project = $result[$i];
self::assertIsArray($project); self::assertIsArray($project);
self::assertApiResponseTypeStructure('ProjectCollection', $project); self::assertApiResponseTypeStructure('ProjectCollection', $project);
if ($customerId !== null) { if ($customerId !== null) {
$this->assertEquals($customerId, $project['customer']); self::assertEquals($customerId, $project['customer']);
} }
} }
} }
@@ -243,7 +243,7 @@ class ProjectControllerTest extends APIControllerBaseTest
/** /**
* @return \Generator<array<mixed>> * @return \Generator<array<mixed>>
*/ */
public function getCollectionTestData(): iterable public static function getCollectionTestData(): iterable
{ {
// if you wonder why: case-sensitive ordering feels strange ... "Title" > "fifth” // if you wonder why: case-sensitive ordering feels strange ... "Title" > "fifth”
yield ['/api/projects', null, [], [[true, 1], [false, 1], [false, 3]]]; yield ['/api/projects', null, [], [[true, 1], [false, 1], [false, 3]]];
@@ -273,10 +273,10 @@ class ProjectControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/projects/1'); $this->assertAccessIsGranted($client, '/api/projects/1');
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('ProjectEntity', $result); self::assertApiResponseTypeStructure('ProjectEntity', $result);
} }
@@ -308,10 +308,10 @@ class ProjectControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/projects/' . $project->getId()); $this->assertAccessIsGranted($client, '/api/projects/' . $project->getId());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('ProjectEntity', $result); self::assertApiResponseTypeStructure('ProjectEntity', $result);
$expected = [ $expected = [
@@ -357,15 +357,15 @@ class ProjectControllerTest extends APIControllerBaseTest
'orderNumber' => '1234567890/WXYZ/SUBPROJECT/1234/CONTRACT/EMPLOYEE1', 'orderNumber' => '1234567890/WXYZ/SUBPROJECT/1234/CONTRACT/EMPLOYEE1',
]; ];
$this->request($client, '/api/projects', 'POST', [], json_encode($data)); $this->request($client, '/api/projects', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('ProjectEntity', $result); self::assertApiResponseTypeStructure('ProjectEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
self::assertEquals('2018-04-17', $result['orderDate']); self::assertEquals('2018-04-17', $result['orderDate']);
self::assertEquals('2019-02-01', $result['start']); self::assertEquals('2019-02-01', $result['start']);
self::assertEquals('2020-02-08', $result['end']); self::assertEquals('2020-02-08', $result['end']);
@@ -386,15 +386,15 @@ class ProjectControllerTest extends APIControllerBaseTest
'visible' => '', 'visible' => '',
]; ];
$this->request($client, '/api/projects', 'POST', [], json_encode($data)); $this->request($client, '/api/projects', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('ProjectEntity', $result); self::assertApiResponseTypeStructure('ProjectEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
self::assertEquals('foo', $result['name']); self::assertEquals('foo', $result['name']);
self::assertTrue($result['globalActivities']); self::assertTrue($result['globalActivities']);
self::assertTrue($result['billable']); self::assertTrue($result['billable']);
@@ -412,15 +412,15 @@ class ProjectControllerTest extends APIControllerBaseTest
'visible' => false, 'visible' => false,
]; ];
$this->request($client, '/api/projects', 'POST', [], json_encode($data)); $this->request($client, '/api/projects', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('ProjectEntity', $result); self::assertApiResponseTypeStructure('ProjectEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
self::assertEquals('foo', $result['name']); self::assertEquals('foo', $result['name']);
self::assertFalse($result['globalActivities']); self::assertFalse($result['globalActivities']);
self::assertFalse($result['billable']); self::assertFalse($result['billable']);
@@ -438,15 +438,15 @@ class ProjectControllerTest extends APIControllerBaseTest
'visible' => true, 'visible' => true,
]; ];
$this->request($client, '/api/projects', 'POST', [], json_encode($data)); $this->request($client, '/api/projects', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('ProjectEntity', $result); self::assertApiResponseTypeStructure('ProjectEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
self::assertEquals('foo', $result['name']); self::assertEquals('foo', $result['name']);
self::assertTrue($result['globalActivities']); self::assertTrue($result['globalActivities']);
self::assertTrue($result['billable']); self::assertTrue($result['billable']);
@@ -461,15 +461,15 @@ class ProjectControllerTest extends APIControllerBaseTest
'customer' => 1 'customer' => 1
]; ];
$this->request($client, '/api/projects', 'POST', [], json_encode($data)); $this->request($client, '/api/projects', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('ProjectEntity', $result); self::assertApiResponseTypeStructure('ProjectEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
self::assertEquals('foo', $result['name']); self::assertEquals('foo', $result['name']);
self::assertFalse($result['globalActivities']); self::assertFalse($result['globalActivities']);
self::assertFalse($result['billable']); self::assertFalse($result['billable']);
@@ -515,15 +515,15 @@ class ProjectControllerTest extends APIControllerBaseTest
'timeBudget' => '7200', 'timeBudget' => '7200',
]; ];
$this->request($client, '/api/projects/1', 'PATCH', [], json_encode($data)); $this->request($client, '/api/projects/1', 'PATCH', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('ProjectEntity', $result); self::assertApiResponseTypeStructure('ProjectEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
} }
public function testPatchActionWithInvalidUser(): void public function testPatchActionWithInvalidUser(): void
@@ -557,7 +557,7 @@ class ProjectControllerTest extends APIControllerBaseTest
$this->request($client, '/api/projects/1', 'PATCH', [], json_encode($data)); $this->request($client, '/api/projects/1', 'PATCH', [], json_encode($data));
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertEquals(400, $response->getStatusCode()); self::assertEquals(400, $response->getStatusCode());
$this->assertApiCallValidationError($response, ['customer']); $this->assertApiCallValidationError($response, ['customer']);
} }
@@ -603,12 +603,12 @@ class ProjectControllerTest extends APIControllerBaseTest
]; ];
$this->request($client, '/api/projects/1/meta', 'PATCH', [], json_encode($data)); $this->request($client, '/api/projects/1/meta', 'PATCH', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Project $project */ /** @var Project $project */
$project = $em->getRepository(Project::class)->find(1); $project = $em->getRepository(Project::class)->find(1);
$this->assertEquals('another,testing,bar', $project->getMetaField('metatestmock')->getValue()); self::assertEquals('another,testing,bar', $project->getMetaField('metatestmock')->getValue());
} }
// ------------------------------- [DELETE] ------------------------------- // ------------------------------- [DELETE] -------------------------------
@@ -658,9 +658,9 @@ class ProjectControllerTest extends APIControllerBaseTest
$id = $result['id']; $id = $result['id'];
$this->request($client, '/api/projects/' . $id, Request::METHOD_DELETE); $this->request($client, '/api/projects/' . $id, Request::METHOD_DELETE);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
self::assertEquals(Response::HTTP_NO_CONTENT, $client->getResponse()->getStatusCode()); self::assertEquals(Response::HTTP_NO_CONTENT, $client->getResponse()->getStatusCode());
$this->assertEmpty($client->getResponse()->getContent()); self::assertEmpty($client->getResponse()->getContent());
$this->request($client, $getUrl); $this->request($client, $getUrl);
$this->assertApiException($client->getResponse(), [ $this->assertApiException($client->getResponse(), [

View File

@@ -53,7 +53,7 @@ trait RateControllerTestTrait
$this->request($client, $this->getRateUrl(), 'POST', [], json_encode($data)); $this->request($client, $this->getRateUrl(), 'POST', [], json_encode($data));
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertEquals(400, $response->getStatusCode()); self::assertEquals(400, $response->getStatusCode());
$this->assertApiCallValidationError($response, ['user']); $this->assertApiCallValidationError($response, ['user']);
} }
@@ -81,18 +81,18 @@ trait RateControllerTestTrait
'is_fixed' => false 'is_fixed' => false
]; ];
$this->request($client, $this->getRateUrl(), 'POST', [], json_encode($data)); $this->request($client, $this->getRateUrl(), 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertRateStructure($result, null); $this->assertRateStructure($result, null);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
$this->assertEquals(12.34, $result['rate']); self::assertEquals(12.34, $result['rate']);
$this->assertEquals(6.66, $result['internalRate']); self::assertEquals(6.66, $result['internalRate']);
$this->assertFalse($result['isFixed']); self::assertFalse($result['isFixed']);
} }
public function testAddFixedRateAction(): void public function testAddFixedRateAction(): void
@@ -105,32 +105,32 @@ trait RateControllerTestTrait
'is_fixed' => true 'is_fixed' => true
]; ];
$this->request($client, $this->getRateUrl(), 'POST', [], json_encode($data)); $this->request($client, $this->getRateUrl(), 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertRateStructure($result, 1); $this->assertRateStructure($result, 1);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
$this->assertEquals(12.34, $result['rate']); self::assertEquals(12.34, $result['rate']);
$this->assertEquals(6.66, $result['internalRate']); self::assertEquals(6.66, $result['internalRate']);
$this->assertTrue($result['isFixed']); self::assertTrue($result['isFixed']);
} }
public function testGetRatesEmptyResult(): void public function testGetRatesEmptyResult(): void
{ {
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$this->request($client, $this->getRateUrl(1)); $this->request($client, $this->getRateUrl(1));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertEmpty($result); self::assertEmpty($result);
} }
public function testGetRates(): void public function testGetRates(): void
@@ -139,22 +139,22 @@ trait RateControllerTestTrait
$expectedRates = $this->importTestRates(1); $expectedRates = $this->importTestRates(1);
$this->request($client, $this->getRateUrl(1)); $this->request($client, $this->getRateUrl(1));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
$this->assertEquals(\count($expectedRates), \count($result)); self::assertEquals(\count($expectedRates), \count($result));
foreach ($result as $rate) { foreach ($result as $rate) {
$this->assertIsArray($rate); self::assertIsArray($rate);
if ($rate['user'] === null) { if ($rate['user'] === null) {
$this->assertRateStructure($rate); $this->assertRateStructure($rate);
} else { } else {
$this->assertIsArray($rate['user']); self::assertIsArray($rate['user']);
$this->assertRateStructure($rate, $rate['user']['id']); $this->assertRateStructure($rate, $rate['user']['id']);
} }
} }
@@ -176,19 +176,19 @@ trait RateControllerTestTrait
$expectedRates = $this->importTestRates(1); $expectedRates = $this->importTestRates(1);
$this->request($client, $this->getRateUrlByRate($expectedRates[0], false), 'DELETE'); $this->request($client, $this->getRateUrlByRate($expectedRates[0], false), 'DELETE');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertEmpty($client->getResponse()->getContent()); self::assertEmpty($client->getResponse()->getContent());
// fetch rates to validate that one was removed // fetch rates to validate that one was removed
$this->request($client, $this->getRateUrlByRate($expectedRates[0], true)); $this->request($client, $this->getRateUrlByRate($expectedRates[0], true));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertEquals(\count($expectedRates) - 1, \count($result)); self::assertEquals(\count($expectedRates) - 1, \count($result));
} }
public function testDeleteRateEntityNotFound(): void public function testDeleteRateEntityNotFound(): void
@@ -234,7 +234,7 @@ trait RateControllerTestTrait
sort($actual); sort($actual);
sort($expectedKeys); sort($expectedKeys);
$this->assertEquals($expectedKeys, $actual, 'Rate structure does not match'); self::assertEquals($expectedKeys, $actual, 'Rate structure does not match');
if (null !== $user) { if (null !== $user) {
self::assertIsArray($result['user'], 'Rate user is not an array'); self::assertIsArray($result['user'], 'Rate user is not an array');

View File

@@ -15,7 +15,7 @@ use App\Entity\User;
/** /**
* @group integration * @group integration
*/ */
class StatusControllerTest extends APIControllerBaseTest class StatusControllerTest extends APIControllerBaseTestCase
{ {
public function testIsSecurePing(): void public function testIsSecurePing(): void
{ {
@@ -38,8 +38,8 @@ class StatusControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/ping'); $this->assertAccessIsGranted($client, '/api/ping');
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertEquals(['message' => 'pong'], $result); self::assertEquals(['message' => 'pong'], $result);
} }
public function testVersion(): void public function testVersion(): void
@@ -48,15 +48,15 @@ class StatusControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/version'); $this->assertAccessIsGranted($client, '/api/version');
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertArrayHasKey('version', $result); self::assertArrayHasKey('version', $result);
$this->assertArrayHasKey('versionId', $result); self::assertArrayHasKey('versionId', $result);
$this->assertArrayHasKey('copyright', $result); self::assertArrayHasKey('copyright', $result);
$this->assertSame(Constants::VERSION, $result['version']); self::assertSame(Constants::VERSION, $result['version']);
$this->assertSame(Constants::VERSION_ID, $result['versionId']); self::assertSame(Constants::VERSION_ID, $result['versionId']);
$this->assertEquals( self::assertEquals(
'Kimai ' . Constants::VERSION . ' by Kevin Papst.', 'Kimai ' . Constants::VERSION . ' by Kevin Papst.',
$result['copyright'] $result['copyright']
); );
@@ -68,7 +68,7 @@ class StatusControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/plugins'); $this->assertAccessIsGranted($client, '/api/plugins');
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
// no asserts, as plugins are disabled in tests // no asserts, as plugins are disabled in tests
} }
} }

View File

@@ -17,7 +17,7 @@ use Symfony\Component\HttpFoundation\Response;
/** /**
* @group integration * @group integration
*/ */
class TagControllerTest extends APIControllerBaseTest class TagControllerTest extends APIControllerBaseTestCase
{ {
/** /**
* @return Tag[] * @return Tag[]
@@ -45,13 +45,13 @@ class TagControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/tags'); $this->assertAccessIsGranted($client, '/api/tags');
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertNotFalse($content); self::assertNotFalse($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
$this->assertEquals(10, \count($result)); self::assertEquals(10, \count($result));
$this->assertEquals('Test', $result[9]); self::assertEquals('Test', $result[9]);
} }
public function testFindCollection(): void public function testFindCollection(): void
@@ -60,12 +60,12 @@ class TagControllerTest extends APIControllerBaseTest
$this->importTagFixtures(); $this->importTagFixtures();
$this->assertAccessIsGranted($client, '/api/tags/find', 'GET', ['name' => '2018']); $this->assertAccessIsGranted($client, '/api/tags/find', 'GET', ['name' => '2018']);
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertNotFalse($content); self::assertNotFalse($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
$this->assertEquals(3, \count($result)); self::assertEquals(3, \count($result));
self::assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('TagEntity', $result[0]); self::assertApiResponseTypeStructure('TagEntity', $result[0]);
} }
@@ -78,12 +78,12 @@ class TagControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/tags', 'GET', $query); $this->assertAccessIsGranted($client, '/api/tags', 'GET', $query);
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertNotFalse($content); self::assertNotFalse($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertEmpty($result); self::assertEmpty($result);
$this->assertEquals(0, \count($result)); self::assertEquals(0, \count($result));
} }
public function testPostAction(): void public function testPostAction(): void
@@ -95,15 +95,15 @@ class TagControllerTest extends APIControllerBaseTest
'color' => '#00ff00' 'color' => '#00ff00'
]; ];
$this->request($client, '/api/tags', 'POST', [], json_encode($data)); $this->request($client, '/api/tags', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertNotFalse($content); self::assertNotFalse($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TagEntity', $result); self::assertApiResponseTypeStructure('TagEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
self::assertEquals('#00ff00', $result['color']); self::assertEquals('#00ff00', $result['color']);
} }
@@ -117,7 +117,7 @@ class TagControllerTest extends APIControllerBaseTest
]; ];
$this->request($client, '/api/tags', 'POST', [], json_encode($data)); $this->request($client, '/api/tags', 'POST', [], json_encode($data));
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertEquals(400, $response->getStatusCode()); self::assertEquals(400, $response->getStatusCode());
$this->assertApiCallValidationError($response, ['name', 'color']); $this->assertApiCallValidationError($response, ['name', 'color']);
} }
@@ -129,15 +129,15 @@ class TagControllerTest extends APIControllerBaseTest
'name' => 'foo', 'name' => 'foo',
]; ];
$this->request($client, '/api/tags', 'POST', [], json_encode($data)); $this->request($client, '/api/tags', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertNotFalse($content); self::assertNotFalse($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TagEntity', $result); self::assertApiResponseTypeStructure('TagEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
self::assertEquals('foo', $result['name']); self::assertEquals('foo', $result['name']);
} }
@@ -149,16 +149,16 @@ class TagControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/tags', 'GET', $query); $this->assertAccessIsGranted($client, '/api/tags', 'GET', $query);
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertNotFalse($content); self::assertNotFalse($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
$this->assertEquals(3, \count($result)); self::assertEquals(3, \count($result));
$this->assertEquals('Administration', $result[0]); self::assertEquals('Administration', $result[0]);
$this->assertEquals('Bug Fixing', $result[1]); self::assertEquals('Bug Fixing', $result[1]);
$this->assertEquals('Marketing', $result[2]); self::assertEquals('Marketing', $result[2]);
} }
public function testDeleteAction(): void public function testDeleteAction(): void
@@ -168,17 +168,17 @@ class TagControllerTest extends APIControllerBaseTest
$id = $tags[0]->getId(); $id = $tags[0]->getId();
$this->request($client, '/api/tags/' . $id, 'DELETE'); $this->request($client, '/api/tags/' . $id, 'DELETE');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertEquals(Response::HTTP_NO_CONTENT, $client->getResponse()->getStatusCode()); self::assertEquals(Response::HTTP_NO_CONTENT, $client->getResponse()->getStatusCode());
$this->assertEmpty($client->getResponse()->getContent()); self::assertEmpty($client->getResponse()->getContent());
$this->assertAccessIsGranted($client, '/api/tags'); $this->assertAccessIsGranted($client, '/api/tags');
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertNotFalse($content); self::assertNotFalse($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertEquals(9, \count($result)); self::assertEquals(9, \count($result));
} }
public function testDeleteActionWithUnknownTimesheet(): void public function testDeleteActionWithUnknownTimesheet(): void

View File

@@ -18,7 +18,7 @@ use Symfony\Component\HttpFoundation\Response;
/** /**
* @group integration * @group integration
*/ */
class TeamControllerTest extends APIControllerBaseTest class TeamControllerTest extends APIControllerBaseTestCase
{ {
/** /**
* @return Team[] * @return Team[]
@@ -39,7 +39,7 @@ class TeamControllerTest extends APIControllerBaseTest
/** /**
* @return array<int, array<int, string>> * @return array<int, array<int, string>>
*/ */
public function getRoleTestData(): array public static function getRoleTestData(): array
{ {
return [ return [
[User::ROLE_USER], [User::ROLE_USER],
@@ -62,8 +62,8 @@ class TeamControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/teams'); $this->assertAccessIsGranted($client, '/api/teams');
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
self::assertEquals(2, \count($result)); self::assertEquals(2, \count($result));
self::assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('TeamCollection', $result[0]); self::assertApiResponseTypeStructure('TeamCollection', $result[0]);
@@ -78,7 +78,7 @@ class TeamControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/teams/' . $id); $this->assertAccessIsGranted($client, '/api/teams/' . $id);
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TeamEntity', $result); self::assertApiResponseTypeStructure('TeamEntity', $result);
} }
@@ -103,12 +103,12 @@ class TeamControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TeamEntity', $result); self::assertApiResponseTypeStructure('TeamEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
} }
public function testPostActionWithInvalidUser(): void public function testPostActionWithInvalidUser(): void
@@ -135,7 +135,7 @@ class TeamControllerTest extends APIControllerBaseTest
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertEquals(400, $response->getStatusCode()); self::assertEquals(400, $response->getStatusCode());
$this->assertApiCallValidationError($response, ['name', 'members.0.user']); $this->assertApiCallValidationError($response, ['name', 'members.0.user']);
} }
@@ -151,11 +151,11 @@ class TeamControllerTest extends APIControllerBaseTest
] ]
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$updateId = $result['id']; $updateId = $result['id'];
$this->assertIsNumeric($updateId); self::assertIsNumeric($updateId);
$data = [ $data = [
'name' => 'foo', 'name' => 'foo',
@@ -167,24 +167,24 @@ class TeamControllerTest extends APIControllerBaseTest
]; ];
$this->request($client, '/api/teams/' . $updateId, 'PATCH', [], json_encode($data)); $this->request($client, '/api/teams/' . $updateId, 'PATCH', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TeamEntity', $result); self::assertApiResponseTypeStructure('TeamEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
self::assertCount(3, $result['members']); self::assertCount(3, $result['members']);
$this->assertIsNumeric($updateId); self::assertIsNumeric($updateId);
$this->request($client, '/api/teams/' . $updateId); $this->request($client, '/api/teams/' . $updateId);
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TeamEntity', $result); self::assertApiResponseTypeStructure('TeamEntity', $result);
$this->assertIsArray($result['members']); self::assertIsArray($result['members']);
self::assertCount(3, $result['members']); self::assertCount(3, $result['members']);
$this->assertIsArray($result['members'][1]); self::assertIsArray($result['members'][1]);
self::assertFalse($result['members'][1]['teamlead']); self::assertFalse($result['members'][1]['teamlead']);
self::assertEquals(1, $result['members'][1]['user']['id']); self::assertEquals(1, $result['members'][1]['user']['id']);
self::assertEquals('clara_customer', $result['members'][1]['user']['username']); self::assertEquals('clara_customer', $result['members'][1]['user']['username']);
@@ -208,10 +208,10 @@ class TeamControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
$data = [ $data = [
'name' => '1', 'name' => '1',
@@ -222,7 +222,7 @@ class TeamControllerTest extends APIControllerBaseTest
$this->request($client, '/api/teams/' . $result['id'], 'PATCH', [], json_encode($data)); $this->request($client, '/api/teams/' . $result['id'], 'PATCH', [], json_encode($data));
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertEquals(400, $response->getStatusCode()); self::assertEquals(400, $response->getStatusCode());
$this->assertApiCallValidationError($response, ['name', 'members.0.user']); $this->assertApiCallValidationError($response, ['name', 'members.0.user']);
} }
@@ -234,16 +234,16 @@ class TeamControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/teams/' . $id); $this->assertAccessIsGranted($client, '/api/teams/' . $id);
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TeamEntity', $result); self::assertApiResponseTypeStructure('TeamEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
$id = $result['id']; $id = $result['id'];
$this->assertIsNumeric($id); self::assertIsNumeric($id);
$this->request($client, '/api/teams/' . $id, 'DELETE'); $this->request($client, '/api/teams/' . $id, 'DELETE');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
self::assertEquals(Response::HTTP_NO_CONTENT, $client->getResponse()->getStatusCode()); self::assertEquals(Response::HTTP_NO_CONTENT, $client->getResponse()->getStatusCode());
$this->assertEmpty($client->getResponse()->getContent()); self::assertEmpty($client->getResponse()->getContent());
} }
public function testPostMemberAction(): void public function testPostMemberAction(): void
@@ -256,20 +256,20 @@ class TeamControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsArray($result['members']); self::assertIsArray($result['members']);
self::assertCount(1, $result['members']); self::assertCount(1, $result['members']);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
$this->request($client, '/api/teams/' . $result['id'] . '/members/2', 'POST'); $this->request($client, '/api/teams/' . $result['id'] . '/members/2', 'POST');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TeamEntity', $result); self::assertApiResponseTypeStructure('TeamEntity', $result);
$this->assertIsArray($result['members']); self::assertIsArray($result['members']);
self::assertCount(2, $result['members']); self::assertCount(2, $result['members']);
} }
@@ -284,10 +284,10 @@ class TeamControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
// team not found // team not found
$this->assertEntityNotFoundForPost($client, '/api/teams/999/members/999'); $this->assertEntityNotFoundForPost($client, '/api/teams/999/members/999');
@@ -297,7 +297,7 @@ class TeamControllerTest extends APIControllerBaseTest
// add user // add user
$this->request($client, '/api/teams/' . $result['id'] . '/members/5', 'POST'); $this->request($client, '/api/teams/' . $result['id'] . '/members/5', 'POST');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
// cannot add existing member // cannot add existing member
$this->assertBadRequest($client, '/api/teams/' . $result['id'] . '/members/5', 'POST'); $this->assertBadRequest($client, '/api/teams/' . $result['id'] . '/members/5', 'POST');
@@ -316,20 +316,20 @@ class TeamControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
$this->assertIsArray($result['members']); self::assertIsArray($result['members']);
self::assertCount(4, $result['members']); self::assertCount(4, $result['members']);
$this->request($client, '/api/teams/' . $result['id'] . '/members/2', 'DELETE'); $this->request($client, '/api/teams/' . $result['id'] . '/members/2', 'DELETE');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TeamEntity', $result); self::assertApiResponseTypeStructure('TeamEntity', $result);
$this->assertIsArray($result['members']); self::assertIsArray($result['members']);
self::assertCount(3, $result['members']); self::assertCount(3, $result['members']);
} }
@@ -346,10 +346,10 @@ class TeamControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
// team not found // team not found
$this->assertNotFoundForDelete($client, '/api/teams/999/members/999'); $this->assertNotFoundForDelete($client, '/api/teams/999/members/999');
@@ -359,7 +359,7 @@ class TeamControllerTest extends APIControllerBaseTest
// remove user // remove user
$this->request($client, '/api/teams/' . $result['id'] . '/members/2', 'DELETE'); $this->request($client, '/api/teams/' . $result['id'] . '/members/2', 'DELETE');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
// cannot remove non-member // cannot remove non-member
$this->assertBadRequest($client, '/api/teams/' . $result['id'] . '/members/2', 'DELETE'); $this->assertBadRequest($client, '/api/teams/' . $result['id'] . '/members/2', 'DELETE');
@@ -378,21 +378,21 @@ class TeamControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
self::assertCount(0, $result['customers']); self::assertCount(0, $result['customers']);
$this->request($client, '/api/teams/' . $result['id'] . '/customers/1', 'POST'); $this->request($client, '/api/teams/' . $result['id'] . '/customers/1', 'POST');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TeamEntity', $result); self::assertApiResponseTypeStructure('TeamEntity', $result);
$this->assertIsArray($result['customers']); self::assertIsArray($result['customers']);
self::assertCount(1, $result['customers']); self::assertCount(1, $result['customers']);
$this->assertIsArray($result['customers'][0]); self::assertIsArray($result['customers'][0]);
self::assertEquals(1, $result['customers'][0]['id']); self::assertEquals(1, $result['customers'][0]['id']);
} }
@@ -407,10 +407,10 @@ class TeamControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
// team not found // team not found
$this->assertEntityNotFoundForPost($client, '/api/teams/999/customers/999'); $this->assertEntityNotFoundForPost($client, '/api/teams/999/customers/999');
@@ -420,10 +420,10 @@ class TeamControllerTest extends APIControllerBaseTest
// add customer // add customer
$this->request($client, '/api/teams/' . $result['id'] . '/customers/1', 'POST'); $this->request($client, '/api/teams/' . $result['id'] . '/customers/1', 'POST');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
self::assertCount(1, $result['customers']); self::assertCount(1, $result['customers']);
// cannot add existing customer // cannot add existing customer
@@ -443,29 +443,29 @@ class TeamControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
self::assertCount(0, $result['customers']); self::assertCount(0, $result['customers']);
// add customer // add customer
$this->request($client, '/api/teams/' . $result['id'] . '/customers/1', 'POST'); $this->request($client, '/api/teams/' . $result['id'] . '/customers/1', 'POST');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
self::assertCount(1, $result['customers']); self::assertCount(1, $result['customers']);
$this->request($client, '/api/teams/' . $result['id'] . '/customers/1', 'DELETE'); $this->request($client, '/api/teams/' . $result['id'] . '/customers/1', 'DELETE');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TeamEntity', $result); self::assertApiResponseTypeStructure('TeamEntity', $result);
$this->assertIsArray($result['customers']); self::assertIsArray($result['customers']);
self::assertCount(0, $result['customers']); self::assertCount(0, $result['customers']);
/** @var EntityManager $em */ /** @var EntityManager $em */
@@ -488,10 +488,10 @@ class TeamControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
// team not found // team not found
$this->assertNotFoundForDelete($client, '/api/teams/999/customers/999'); $this->assertNotFoundForDelete($client, '/api/teams/999/customers/999');
@@ -513,20 +513,20 @@ class TeamControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
self::assertCount(0, $result['projects']); self::assertCount(0, $result['projects']);
$this->request($client, '/api/teams/' . $result['id'] . '/projects/1', 'POST'); $this->request($client, '/api/teams/' . $result['id'] . '/projects/1', 'POST');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TeamEntity', $result); self::assertApiResponseTypeStructure('TeamEntity', $result);
$this->assertIsArray($result['projects']); self::assertIsArray($result['projects']);
self::assertCount(1, $result['projects']); self::assertCount(1, $result['projects']);
$this->assertIsArray($result['projects'][0]); self::assertIsArray($result['projects'][0]);
self::assertEquals(1, $result['projects'][0]['id']); self::assertEquals(1, $result['projects'][0]['id']);
} }
@@ -541,10 +541,10 @@ class TeamControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
// team not found // team not found
$this->assertEntityNotFoundForPost($client, '/api/teams/999/projects/999'); $this->assertEntityNotFoundForPost($client, '/api/teams/999/projects/999');
@@ -556,10 +556,10 @@ class TeamControllerTest extends APIControllerBaseTest
// add project // add project
$this->request($client, '/api/teams/' . $result['id'] . '/projects/1', 'POST'); $this->request($client, '/api/teams/' . $result['id'] . '/projects/1', 'POST');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
self::assertCount(1, $result['projects']); self::assertCount(1, $result['projects']);
// cannot add existing project // cannot add existing project
@@ -579,27 +579,27 @@ class TeamControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
self::assertCount(0, $result['projects']); self::assertCount(0, $result['projects']);
// add project // add project
$this->request($client, '/api/teams/' . $result['id'] . '/projects/1', 'POST'); $this->request($client, '/api/teams/' . $result['id'] . '/projects/1', 'POST');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsArray($result['projects']); self::assertIsArray($result['projects']);
self::assertCount(1, $result['projects']); self::assertCount(1, $result['projects']);
$this->request($client, '/api/teams/' . $result['id'] . '/projects/1', 'DELETE'); $this->request($client, '/api/teams/' . $result['id'] . '/projects/1', 'DELETE');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TeamEntity', $result); self::assertApiResponseTypeStructure('TeamEntity', $result);
$this->assertIsArray($result['projects']); self::assertIsArray($result['projects']);
self::assertCount(0, $result['projects']); self::assertCount(0, $result['projects']);
/** @var EntityManager $em */ /** @var EntityManager $em */
@@ -622,10 +622,10 @@ class TeamControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
// team not found // team not found
$this->assertNotFoundForDelete($client, '/api/teams/999/projects/999'); $this->assertNotFoundForDelete($client, '/api/teams/999/projects/999');
@@ -647,20 +647,20 @@ class TeamControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
self::assertCount(0, $result['activities']); self::assertCount(0, $result['activities']);
$this->request($client, '/api/teams/' . $result['id'] . '/activities/1', 'POST'); $this->request($client, '/api/teams/' . $result['id'] . '/activities/1', 'POST');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TeamEntity', $result); self::assertApiResponseTypeStructure('TeamEntity', $result);
$this->assertIsArray($result['activities']); self::assertIsArray($result['activities']);
self::assertCount(1, $result['activities']); self::assertCount(1, $result['activities']);
$this->assertIsArray($result['activities'][0]); self::assertIsArray($result['activities'][0]);
self::assertEquals(1, $result['activities'][0]['id']); self::assertEquals(1, $result['activities'][0]['id']);
} }
@@ -675,10 +675,10 @@ class TeamControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
// team not found // team not found
$this->assertEntityNotFoundForPost($client, '/api/teams/999/activities/999'); $this->assertEntityNotFoundForPost($client, '/api/teams/999/activities/999');
@@ -688,10 +688,10 @@ class TeamControllerTest extends APIControllerBaseTest
// add activity // add activity
$this->request($client, '/api/teams/' . $result['id'] . '/activities/1', 'POST'); $this->request($client, '/api/teams/' . $result['id'] . '/activities/1', 'POST');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
self::assertCount(1, $result['activities']); self::assertCount(1, $result['activities']);
// cannot add existing activity // cannot add existing activity
@@ -711,27 +711,27 @@ class TeamControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsArray($result['activities']); self::assertIsArray($result['activities']);
self::assertCount(0, $result['activities']); self::assertCount(0, $result['activities']);
// add activity // add activity
$this->request($client, '/api/teams/' . $result['id'] . '/activities/1', 'POST'); $this->request($client, '/api/teams/' . $result['id'] . '/activities/1', 'POST');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
self::assertCount(1, $result['activities']); self::assertCount(1, $result['activities']);
$this->request($client, '/api/teams/' . $result['id'] . '/activities/1', 'DELETE'); $this->request($client, '/api/teams/' . $result['id'] . '/activities/1', 'DELETE');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TeamEntity', $result); self::assertApiResponseTypeStructure('TeamEntity', $result);
$this->assertIsArray($result['activities']); self::assertIsArray($result['activities']);
self::assertCount(0, $result['activities']); self::assertCount(0, $result['activities']);
} }
@@ -748,10 +748,10 @@ class TeamControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/teams', 'POST', [], json_encode($data)); $this->request($client, '/api/teams', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true); $result = json_decode($client->getResponse()->getContent(), true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertIsNumeric($result['id']); self::assertIsNumeric($result['id']);
// team not found // team not found
$this->assertNotFoundForDelete($client, '/api/teams/999/activities/9999'); $this->assertNotFoundForDelete($client, '/api/teams/999/activities/9999');

View File

@@ -26,7 +26,7 @@ use Symfony\Component\HttpFoundation\Response;
/** /**
* @group integration * @group integration
*/ */
class TimesheetControllerTest extends APIControllerBaseTest class TimesheetControllerTest extends APIControllerBaseTestCase
{ {
public const DATE_FORMAT = 'Y-m-d H:i:s'; public const DATE_FORMAT = 'Y-m-d H:i:s';
public const DATE_FORMAT_HTML5 = 'Y-m-d\TH:i:s'; public const DATE_FORMAT_HTML5 = 'Y-m-d\TH:i:s';
@@ -64,7 +64,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertNotEmpty($result); self::assertNotEmpty($result);
self::assertEquals(10, \count($result)); self::assertEquals(10, \count($result));
$this->assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]); self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]);
} }
@@ -81,7 +81,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertNotEmpty($result); self::assertNotEmpty($result);
self::assertEquals(10, \count($result)); self::assertEquals(10, \count($result));
$this->assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('TimesheetCollectionFull', $result[0]); self::assertApiResponseTypeStructure('TimesheetCollectionFull', $result[0]);
} }
@@ -106,7 +106,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertNotEmpty($result); self::assertNotEmpty($result);
self::assertEquals(10, \count($result)); self::assertEquals(10, \count($result));
$this->assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]); self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]);
$query = ['users' => [2]]; $query = ['users' => [2]];
@@ -119,7 +119,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertNotEmpty($result); self::assertNotEmpty($result);
self::assertEquals(10, \count($result)); self::assertEquals(10, \count($result));
$this->assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]); self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]);
} }
@@ -167,7 +167,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertNotEmpty($result); self::assertNotEmpty($result);
self::assertEquals(10, \count($result)); self::assertEquals(10, \count($result));
$this->assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]); self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]);
} }
@@ -192,7 +192,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertNotEmpty($result); self::assertNotEmpty($result);
self::assertEquals(17, \count($result)); self::assertEquals(17, \count($result));
$this->assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]); self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]);
} }
@@ -207,7 +207,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
$result = json_decode($content, true); $result = json_decode($content, true);
self::assertIsArray($result); self::assertIsArray($result);
$this->assertEmpty($result); self::assertEmpty($result);
} }
public function testGetCollectionWithQuery(): void public function testGetCollectionWithQuery(): void
@@ -244,7 +244,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertNotEmpty($result); self::assertNotEmpty($result);
self::assertEquals(4, \count($result)); self::assertEquals(4, \count($result));
$this->assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]); self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]);
} }
@@ -297,7 +297,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertNotEmpty($result); self::assertNotEmpty($result);
self::assertEquals(5, \count($result)); self::assertEquals(5, \count($result));
$this->assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]); self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]);
} }
@@ -333,7 +333,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertNotEmpty($result); self::assertNotEmpty($result);
self::assertEquals(7, \count($result)); self::assertEquals(7, \count($result));
$this->assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]); self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]);
$query = [ $query = [
@@ -352,7 +352,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertNotEmpty($result); self::assertNotEmpty($result);
self::assertEquals(10, \count($result)); self::assertEquals(10, \count($result));
$this->assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]); self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]);
$query = [ $query = [
@@ -369,7 +369,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertNotEmpty($result); self::assertNotEmpty($result);
self::assertEquals(17, \count($result)); self::assertEquals(17, \count($result));
$this->assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]); self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]);
} }
@@ -440,7 +440,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER); $client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$this->importFixtureForUser(User::ROLE_USER); $this->importFixtureForUser(User::ROLE_USER);
$timesheets = $this->importFixtureForUser(User::ROLE_ADMIN); $timesheets = $this->importFixtureForUser(User::ROLE_ADMIN);
$this->assertCount(10, $timesheets); self::assertCount(10, $timesheets);
$this->assertApiAccessDenied($client, '/api/timesheets/' . $timesheets[0]->getId(), 'Access denied.'); $this->assertApiAccessDenied($client, '/api/timesheets/' . $timesheets[0]->getId(), 'Access denied.');
} }
@@ -480,7 +480,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
$json = json_encode($data); $json = json_encode($data);
self::assertIsString($json); self::assertIsString($json);
$this->request($client, '/api/timesheets', 'POST', [], $json); $this->request($client, '/api/timesheets', 'POST', [], $json);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
self::assertIsString($content); self::assertIsString($content);
@@ -489,9 +489,9 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TimesheetEntity', $result); self::assertApiResponseTypeStructure('TimesheetEntity', $result);
self::assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
$this->assertTrue($result['duration'] == 28800 || $result['duration'] == 28860); // 1 minute rounding might be applied self::assertTrue($result['duration'] == 28800 || $result['duration'] == 28860); // 1 minute rounding might be applied
self::assertEquals(2016, $result['rate']); self::assertEquals(2016, $result['rate']);
$this->assertFalse($result['billable']); self::assertFalse($result['billable']);
} }
public function testPostActionWithFullExpandedResponse(): void public function testPostActionWithFullExpandedResponse(): void
@@ -511,7 +511,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
$json = json_encode($data); $json = json_encode($data);
self::assertIsString($json); self::assertIsString($json);
$this->request($client, '/api/timesheets?full=true', 'POST', [], $json); $this->request($client, '/api/timesheets?full=true', 'POST', [], $json);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
self::assertIsString($content); self::assertIsString($content);
@@ -520,9 +520,9 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TimesheetExpanded', $result); self::assertApiResponseTypeStructure('TimesheetExpanded', $result);
self::assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
$this->assertTrue($result['duration'] == 28800 || $result['duration'] == 28860); // 1 minute rounding might be applied self::assertTrue($result['duration'] == 28800 || $result['duration'] == 28860); // 1 minute rounding might be applied
self::assertEquals(2016, $result['rate']); self::assertEquals(2016, $result['rate']);
$this->assertTrue($result['billable']); self::assertTrue($result['billable']);
} }
public function testPostActionForDifferentUser(): void public function testPostActionForDifferentUser(): void
@@ -545,7 +545,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
$json = json_encode($data); $json = json_encode($data);
self::assertIsString($json); self::assertIsString($json);
$this->request($client, '/api/timesheets', 'POST', [], $json); $this->request($client, '/api/timesheets', 'POST', [], $json);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
self::assertIsString($content); self::assertIsString($content);
@@ -556,7 +556,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
self::assertEquals($user->getId(), $result['user']); self::assertEquals($user->getId(), $result['user']);
$this->assertNotEquals($admin->getId(), $result['user']); $this->assertNotEquals($admin->getId(), $result['user']);
$this->assertTrue($result['billable']); self::assertTrue($result['billable']);
} }
// check for project, as this is a required field. It will not be included in the select, as it is // check for project, as this is a required field. It will not be included in the select, as it is
@@ -711,7 +711,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
$json = json_encode($data); $json = json_encode($data);
self::assertIsString($json); self::assertIsString($json);
$this->request($client, '/api/timesheets', 'POST', [], $json); $this->request($client, '/api/timesheets', 'POST', [], $json);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
self::assertIsString($content); self::assertIsString($content);
@@ -719,7 +719,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TimesheetEntity', $result); self::assertApiResponseTypeStructure('TimesheetEntity', $result);
$this->assertFalse($result['billable']); self::assertFalse($result['billable']);
} }
public function testPostActionWithNonBillableCustomerExplicit(): void public function testPostActionWithNonBillableCustomerExplicit(): void
@@ -752,7 +752,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
$json = json_encode($data); $json = json_encode($data);
self::assertIsString($json); self::assertIsString($json);
$this->request($client, '/api/timesheets', 'POST', [], $json); $this->request($client, '/api/timesheets', 'POST', [], $json);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
self::assertIsString($content); self::assertIsString($content);
@@ -761,10 +761,10 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TimesheetEntity', $result); self::assertApiResponseTypeStructure('TimesheetEntity', $result);
// explicit overwritten values win! // explicit overwritten values win!
$this->assertTrue($result['billable']); self::assertTrue($result['billable']);
} }
public function getTrackingModeTestData(): array public static function getTrackingModeTestData(): array
{ {
return [ return [
['duration_fixed_begin', User::ROLE_USER, false], ['duration_fixed_begin', User::ROLE_USER, false],
@@ -800,7 +800,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
$response = $client->getResponse(); $response = $client->getResponse();
if ($showTimes) { if ($showTimes) {
$this->assertTrue($response->isSuccessful()); self::assertTrue($response->isSuccessful());
} else { } else {
$this->assertApiCallValidationError($response, [], true, [], [], ['begin', 'end']); $this->assertApiCallValidationError($response, [], true, [], [], ['begin', 'end']);
} }
@@ -822,7 +822,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
$json = json_encode($data); $json = json_encode($data);
self::assertIsString($json); self::assertIsString($json);
$this->request($client, '/api/timesheets/' . $timesheets[0]->getId(), 'PATCH', [], $json); $this->request($client, '/api/timesheets/' . $timesheets[0]->getId(), 'PATCH', [], $json);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
self::assertIsString($content); self::assertIsString($content);
@@ -833,7 +833,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
self::assertEquals(25200, $result['duration']); self::assertEquals(25200, $result['duration']);
self::assertEquals('foo', $result['description']); self::assertEquals('foo', $result['description']);
$this->assertFalse($result['billable']); self::assertFalse($result['billable']);
} }
public function testPatchActionWithInvalidUser(): void public function testPatchActionWithInvalidUser(): void
@@ -912,9 +912,9 @@ class TimesheetControllerTest extends APIControllerBaseTest
$id = $result['id']; $id = $result['id'];
$this->request($client, '/api/timesheets/' . $id, 'DELETE'); $this->request($client, '/api/timesheets/' . $id, 'DELETE');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
self::assertEquals(Response::HTTP_NO_CONTENT, $client->getResponse()->getStatusCode()); self::assertEquals(Response::HTTP_NO_CONTENT, $client->getResponse()->getStatusCode());
$this->assertEmpty($client->getResponse()->getContent()); self::assertEmpty($client->getResponse()->getContent());
} }
public function testDeleteActionWithUnknownTimesheet(): void public function testDeleteActionWithUnknownTimesheet(): void
@@ -929,9 +929,9 @@ class TimesheetControllerTest extends APIControllerBaseTest
$timesheets = $this->importFixtureForUser(User::ROLE_USER); $timesheets = $this->importFixtureForUser(User::ROLE_USER);
$this->request($client, '/api/timesheets/' . $timesheets[0]->getId(), 'DELETE'); $this->request($client, '/api/timesheets/' . $timesheets[0]->getId(), 'DELETE');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
self::assertEquals(Response::HTTP_NO_CONTENT, $client->getResponse()->getStatusCode()); self::assertEquals(Response::HTTP_NO_CONTENT, $client->getResponse()->getStatusCode());
$this->assertEmpty($client->getResponse()->getContent()); self::assertEmpty($client->getResponse()->getContent());
} }
public function testDeleteActionWithoutAuthorization(): void public function testDeleteActionWithoutAuthorization(): void
@@ -979,7 +979,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
$em->flush(); $em->flush();
$this->request($client, '/api/timesheets/' . $id, 'DELETE'); $this->request($client, '/api/timesheets/' . $id, 'DELETE');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
} }
public function testGetRecentAction(): void public function testGetRecentAction(): void
@@ -1012,7 +1012,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertNotEmpty($result); self::assertNotEmpty($result);
self::assertEquals(1, \count($result)); self::assertEquals(1, \count($result));
$this->assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('TimesheetCollectionFull', $result[0]); self::assertApiResponseTypeStructure('TimesheetCollectionFull', $result[0]);
} }
@@ -1030,7 +1030,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$this->request($client, '/api/timesheets/active'); $this->request($client, '/api/timesheets/active');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
self::assertIsString($content); self::assertIsString($content);
@@ -1038,7 +1038,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertEquals(3, \count($result)); self::assertEquals(3, \count($result));
foreach ($result as $timesheet) { foreach ($result as $timesheet) {
$this->assertIsArray($timesheet); self::assertIsArray($timesheet);
self::assertApiResponseTypeStructure('TimesheetCollectionFull', $timesheet); self::assertApiResponseTypeStructure('TimesheetCollectionFull', $timesheet);
} }
} }
@@ -1063,7 +1063,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
$id = $timesheets[0]->getId(); $id = $timesheets[0]->getId();
$this->request($client, '/api/timesheets/' . $id . '/stop', 'PATCH'); $this->request($client, '/api/timesheets/' . $id . '/stop', 'PATCH');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
self::assertIsString($content); self::assertIsString($content);
@@ -1076,7 +1076,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
$timesheet = $em->getRepository(Timesheet::class)->find($id); $timesheet = $em->getRepository(Timesheet::class)->find($id);
$this->assertInstanceOf(\DateTime::class, $timesheet->getEnd()); self::assertInstanceOf(\DateTime::class, $timesheet->getEnd());
} }
public function testStopActionTriggersValidationOnLongRunning(): void public function testStopActionTriggersValidationOnLongRunning(): void
@@ -1157,7 +1157,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertNotEmpty($result); self::assertNotEmpty($result);
self::assertEquals(10, \count($result)); self::assertEquals(10, \count($result));
$this->assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]); self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]);
$query = ['tags' => ['Test', 'Admin']]; $query = ['tags' => ['Test', 'Admin']];
@@ -1170,7 +1170,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertNotEmpty($result); self::assertNotEmpty($result);
self::assertEquals(10, \count($result)); self::assertEquals(10, \count($result));
$this->assertIsArray($result[0]); self::assertIsArray($result[0]);
self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]); self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]);
$query = ['tags' => ['Nothing-2-see', 'not-existing-here']]; $query = ['tags' => ['Nothing-2-see', 'not-existing-here']];
@@ -1193,26 +1193,26 @@ class TimesheetControllerTest extends APIControllerBaseTest
$this->request($client, '/api/timesheets/' . $id, 'PATCH', [], $json); $this->request($client, '/api/timesheets/' . $id, 'PATCH', [], $json);
$this->request($client, '/api/timesheets/' . $id . '/restart', 'PATCH'); $this->request($client, '/api/timesheets/' . $id . '/restart', 'PATCH');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
self::assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TimesheetEntity', $result); self::assertApiResponseTypeStructure('TimesheetEntity', $result);
$this->assertEmpty($result['description']); self::assertEmpty($result['description']);
$this->assertEmpty($result['tags']); self::assertEmpty($result['tags']);
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
$timesheet = $em->getRepository(Timesheet::class)->find($result['id']); $timesheet = $em->getRepository(Timesheet::class)->find($result['id']);
$this->assertInstanceOf(\DateTime::class, $timesheet->getBegin()); self::assertInstanceOf(\DateTime::class, $timesheet->getBegin());
$this->assertNull($timesheet->getEnd()); self::assertNull($timesheet->getEnd());
self::assertEquals(1, $timesheet->getActivity()->getId()); self::assertEquals(1, $timesheet->getActivity()->getId());
self::assertEquals(1, $timesheet->getProject()->getId()); self::assertEquals(1, $timesheet->getProject()->getId());
$this->assertEmpty($timesheet->getDescription()); self::assertEmpty($timesheet->getDescription());
$this->assertEmpty($timesheet->getTags()); self::assertEmpty($timesheet->getTags());
} }
public function testRestartActionWithBegin(): void public function testRestartActionWithBegin(): void
@@ -1231,27 +1231,27 @@ class TimesheetControllerTest extends APIControllerBaseTest
$begin = new \DateTime('2019-11-27 13:55:00'); $begin = new \DateTime('2019-11-27 13:55:00');
$this->request($client, '/api/timesheets/' . $id . '/restart', 'PATCH', ['begin' => $begin->format(BaseApiController::DATE_FORMAT_PHP)]); $this->request($client, '/api/timesheets/' . $id . '/restart', 'PATCH', ['begin' => $begin->format(BaseApiController::DATE_FORMAT_PHP)]);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
self::assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TimesheetEntity', $result); self::assertApiResponseTypeStructure('TimesheetEntity', $result);
$this->assertEmpty($result['description']); self::assertEmpty($result['description']);
$this->assertEmpty($result['tags']); self::assertEmpty($result['tags']);
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
$timesheet = $em->getRepository(Timesheet::class)->find($result['id']); $timesheet = $em->getRepository(Timesheet::class)->find($result['id']);
$this->assertInstanceOf(\DateTime::class, $timesheet->getBegin()); self::assertInstanceOf(\DateTime::class, $timesheet->getBegin());
self::assertEquals($begin->format(BaseApiController::DATE_FORMAT_PHP), $timesheet->getBegin()->format(BaseApiController::DATE_FORMAT_PHP)); self::assertEquals($begin->format(BaseApiController::DATE_FORMAT_PHP), $timesheet->getBegin()->format(BaseApiController::DATE_FORMAT_PHP));
$this->assertNull($timesheet->getEnd()); self::assertNull($timesheet->getEnd());
self::assertEquals(1, $timesheet->getActivity()->getId()); self::assertEquals(1, $timesheet->getActivity()->getId());
self::assertEquals(1, $timesheet->getProject()->getId()); self::assertEquals(1, $timesheet->getProject()->getId());
$this->assertEmpty($timesheet->getDescription()); self::assertEmpty($timesheet->getDescription());
$this->assertEmpty($timesheet->getTags()); self::assertEmpty($timesheet->getTags());
} }
public function testRestartActionWithCopyData(): void public function testRestartActionWithCopyData(): void
@@ -1277,13 +1277,13 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertEquals('foo', $timesheet->getDescription()); self::assertEquals('foo', $timesheet->getDescription());
$this->request($client, '/api/timesheets/' . $id . '/restart', 'PATCH', ['copy' => 'all']); $this->request($client, '/api/timesheets/' . $id . '/restart', 'PATCH', ['copy' => 'all']);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
self::assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TimesheetEntity', $result); self::assertApiResponseTypeStructure('TimesheetEntity', $result);
self::assertEquals('foo', $result['description']); self::assertEquals('foo', $result['description']);
self::assertEquals([['name' => 'sdfsdf', 'value' => 'nnnnn'], ['name' => '1234567890', 'value' => '1234567890']], $result['metaFields']); self::assertEquals([['name' => 'sdfsdf', 'value' => 'nnnnn'], ['name' => '1234567890', 'value' => '1234567890']], $result['metaFields']);
@@ -1292,8 +1292,8 @@ class TimesheetControllerTest extends APIControllerBaseTest
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
$timesheet = $em->getRepository(Timesheet::class)->find($result['id']); $timesheet = $em->getRepository(Timesheet::class)->find($result['id']);
$this->assertInstanceOf(\DateTime::class, $timesheet->getBegin()); self::assertInstanceOf(\DateTime::class, $timesheet->getBegin());
$this->assertNull($timesheet->getEnd()); self::assertNull($timesheet->getEnd());
self::assertEquals(1, $timesheet->getActivity()->getId()); self::assertEquals(1, $timesheet->getActivity()->getId());
self::assertEquals(1, $timesheet->getProject()->getId()); self::assertEquals(1, $timesheet->getProject()->getId());
self::assertEquals('foo', $timesheet->getDescription()); self::assertEquals('foo', $timesheet->getDescription());
@@ -1343,7 +1343,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
$json = json_encode($data); $json = json_encode($data);
self::assertIsString($json); self::assertIsString($json);
$this->request($client, '/api/timesheets', 'POST', [], $json); $this->request($client, '/api/timesheets', 'POST', [], $json);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
self::assertIsString($content); self::assertIsString($content);
@@ -1352,12 +1352,12 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TimesheetEntity', $result); self::assertApiResponseTypeStructure('TimesheetEntity', $result);
self::assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
$this->assertTrue($result['duration'] == 28800 || $result['duration'] == 28860); // 1 minute rounding might be applied self::assertTrue($result['duration'] == 28800 || $result['duration'] == 28860); // 1 minute rounding might be applied
self::assertEquals(2016, $result['rate']); self::assertEquals(2016, $result['rate']);
$id = $result['id']; $id = $result['id'];
self::assertIsNumeric($id); self::assertIsNumeric($id);
$this->request($client, '/api/timesheets/' . $id . '/duplicate', 'PATCH'); $this->request($client, '/api/timesheets/' . $id . '/duplicate', 'PATCH');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
self::assertIsString($content); self::assertIsString($content);
@@ -1366,7 +1366,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TimesheetEntity', $result); self::assertApiResponseTypeStructure('TimesheetEntity', $result);
self::assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
$this->assertTrue($result['duration'] == 28800 || $result['duration'] == 28860); // 1 minute rounding might be applied self::assertTrue($result['duration'] == 28800 || $result['duration'] == 28860); // 1 minute rounding might be applied
self::assertEquals(2016, $result['rate']); self::assertEquals(2016, $result['rate']);
} }
@@ -1384,29 +1384,29 @@ class TimesheetControllerTest extends APIControllerBaseTest
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
$timesheet = $em->getRepository(Timesheet::class)->find($id); $timesheet = $em->getRepository(Timesheet::class)->find($id);
$this->assertFalse($timesheet->isExported()); self::assertFalse($timesheet->isExported());
$this->request($client, '/api/timesheets/' . $id . '/export', 'PATCH'); $this->request($client, '/api/timesheets/' . $id . '/export', 'PATCH');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
self::assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TimesheetEntity', $result); self::assertApiResponseTypeStructure('TimesheetEntity', $result);
$em->clear(); $em->clear();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
$timesheet = $em->getRepository(Timesheet::class)->find($id); $timesheet = $em->getRepository(Timesheet::class)->find($id);
$this->assertTrue($timesheet->isExported()); self::assertTrue($timesheet->isExported());
$this->request($client, '/api/timesheets/' . $id . '/export', 'PATCH'); $this->request($client, '/api/timesheets/' . $id . '/export', 'PATCH');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$em->clear(); $em->clear();
$timesheet = $em->getRepository(Timesheet::class)->find($id); $timesheet = $em->getRepository(Timesheet::class)->find($id);
$this->assertFalse($timesheet->isExported()); self::assertFalse($timesheet->isExported());
} }
public function testExportNotAllowedForUser(): void public function testExportNotAllowedForUser(): void
@@ -1482,13 +1482,13 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsString($json); self::assertIsString($json);
$this->request($client, '/api/timesheets/' . $id . '/meta', 'PATCH', [], $json); $this->request($client, '/api/timesheets/' . $id . '/meta', 'PATCH', [], $json);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
self::assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('TimesheetEntity', $result); self::assertApiResponseTypeStructure('TimesheetEntity', $result);
self::assertEquals(['name' => 'metatestmock', 'value' => 'another,testing,bar'], $result['metaFields'][0]); self::assertEquals(['name' => 'metatestmock', 'value' => 'another,testing,bar'], $result['metaFields'][0]);

View File

@@ -14,7 +14,7 @@ use App\Entity\User;
/** /**
* @group integration * @group integration
*/ */
class UserControllerTest extends APIControllerBaseTest class UserControllerTest extends APIControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -24,7 +24,7 @@ class UserControllerTest extends APIControllerBaseTest
/** /**
* @return array<array<string>> * @return array<array<string>>
*/ */
public function getRoleTestData(): array public static function getRoleTestData(): array
{ {
return [ return [
[User::ROLE_USER], [User::ROLE_USER],
@@ -46,14 +46,14 @@ class UserControllerTest extends APIControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN);
$this->assertAccessIsGranted($client, '/api/users'); $this->assertAccessIsGranted($client, '/api/users');
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
$this->assertEquals(7, \count($result)); self::assertEquals(7, \count($result));
foreach ($result as $user) { foreach ($result as $user) {
$this->assertIsArray($user); self::assertIsArray($user);
self::assertApiResponseTypeStructure('UserCollection', $user); self::assertApiResponseTypeStructure('UserCollection', $user);
} }
} }
@@ -64,14 +64,14 @@ class UserControllerTest extends APIControllerBaseTest
$this->assertAccessIsGranted($client, '/api/users?full=true'); $this->assertAccessIsGranted($client, '/api/users?full=true');
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
$this->assertEquals(7, \count($result)); self::assertEquals(7, \count($result));
foreach ($result as $user) { foreach ($result as $user) {
$this->assertIsArray($user); self::assertIsArray($user);
self::assertApiResponseTypeStructure('UserEntity', $user); self::assertApiResponseTypeStructure('UserEntity', $user);
} }
} }
@@ -81,14 +81,14 @@ class UserControllerTest extends APIControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN);
$this->assertAccessIsGranted($client, '/api/users', 'GET', ['visible' => 2, 'orderBy' => 'email', 'order' => 'DESC', 'term' => 'chris']); $this->assertAccessIsGranted($client, '/api/users', 'GET', ['visible' => 2, 'orderBy' => 'email', 'order' => 'DESC', 'term' => 'chris']);
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
$this->assertEquals(1, \count($result)); self::assertEquals(1, \count($result));
foreach ($result as $user) { foreach ($result as $user) {
$this->assertIsArray($user); self::assertIsArray($user);
self::assertApiResponseTypeStructure('UserCollection', $user); self::assertApiResponseTypeStructure('UserCollection', $user);
} }
} }
@@ -98,14 +98,14 @@ class UserControllerTest extends APIControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN);
$this->assertAccessIsGranted($client, '/api/users', 'GET', ['visible' => 3, 'orderBy' => 'email', 'order' => 'DESC']); $this->assertAccessIsGranted($client, '/api/users', 'GET', ['visible' => 3, 'orderBy' => 'email', 'order' => 'DESC']);
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
$this->assertNotEmpty($result); self::assertNotEmpty($result);
$this->assertEquals(8, \count($result)); self::assertEquals(8, \count($result));
foreach ($result as $user) { foreach ($result as $user) {
$this->assertIsArray($user); self::assertIsArray($user);
self::assertApiResponseTypeStructure('UserCollection', $user); self::assertApiResponseTypeStructure('UserCollection', $user);
} }
} }
@@ -115,10 +115,10 @@ class UserControllerTest extends APIControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN);
$this->assertAccessIsGranted($client, '/api/users/1'); $this->assertAccessIsGranted($client, '/api/users/1');
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('UserEntity', $result); self::assertApiResponseTypeStructure('UserEntity', $result);
self::assertEquals('1', $result['id']); self::assertEquals('1', $result['id']);
self::assertEquals('CFO', $result['title']); self::assertEquals('CFO', $result['title']);
@@ -130,10 +130,10 @@ class UserControllerTest extends APIControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN);
$this->assertAccessIsGranted($client, '/api/users/me'); $this->assertAccessIsGranted($client, '/api/users/me');
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('UserEntity', $result); self::assertApiResponseTypeStructure('UserEntity', $result);
self::assertEquals('6', $result['id']); self::assertEquals('6', $result['id']);
self::assertEquals('Super Administrator', $result['title']); self::assertEquals('Super Administrator', $result['title']);
@@ -156,10 +156,10 @@ class UserControllerTest extends APIControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER); $client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$this->assertAccessIsGranted($client, '/api/users/2'); $this->assertAccessIsGranted($client, '/api/users/2');
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('UserEntity', $result); self::assertApiResponseTypeStructure('UserEntity', $result);
} }
@@ -181,14 +181,14 @@ class UserControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/users', 'POST', [], json_encode($data)); $this->request($client, '/api/users', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('UserEntity', $result); self::assertApiResponseTypeStructure('UserEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
self::assertEquals('foo', $result['username']); self::assertEquals('foo', $result['username']);
self::assertEquals('asdfghjkl', $result['title']); self::assertEquals('asdfghjkl', $result['title']);
self::assertTrue($result['enabled']); self::assertTrue($result['enabled']);
@@ -216,7 +216,7 @@ class UserControllerTest extends APIControllerBaseTest
$this->request($client, '/api/users', 'POST', [], json_encode($data)); $this->request($client, '/api/users', 'POST', [], json_encode($data));
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertEquals(400, $response->getStatusCode()); self::assertEquals(400, $response->getStatusCode());
$this->assertApiCallValidationError($response, ['plainPassword']); $this->assertApiCallValidationError($response, ['plainPassword']);
} }
@@ -236,7 +236,7 @@ class UserControllerTest extends APIControllerBaseTest
$this->request($client, '/api/users', 'POST', [], json_encode($data)); $this->request($client, '/api/users', 'POST', [], json_encode($data));
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertEquals(400, $response->getStatusCode()); self::assertEquals(400, $response->getStatusCode());
$this->assertApiCallValidationError($response, ['username', 'email', 'plainPassword', 'language', 'timezone', 'roles']); $this->assertApiCallValidationError($response, ['username', 'email', 'plainPassword', 'language', 'timezone', 'roles']);
} }
@@ -272,9 +272,9 @@ class UserControllerTest extends APIControllerBaseTest
], ],
]; ];
$this->request($client, '/api/users', 'POST', [], json_encode($data)); $this->request($client, '/api/users', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
self::assertFalse($result['enabled']); self::assertFalse($result['enabled']);
@@ -290,14 +290,14 @@ class UserControllerTest extends APIControllerBaseTest
$id = $result['id']; $id = $result['id'];
self::assertIsNumeric($id); self::assertIsNumeric($id);
$this->request($client, '/api/users/' . $id, 'PATCH', [], json_encode($data)); $this->request($client, '/api/users/' . $id, 'PATCH', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertIsString($content); self::assertIsString($content);
$result = json_decode($content, true); $result = json_decode($content, true);
$this->assertIsArray($result); self::assertIsArray($result);
self::assertApiResponseTypeStructure('UserEntity', $result); self::assertApiResponseTypeStructure('UserEntity', $result);
$this->assertNotEmpty($result['id']); self::assertNotEmpty($result['id']);
self::assertEquals('foo', $result['username']); self::assertEquals('foo', $result['username']);
self::assertEquals('qwertzui', $result['title']); self::assertEquals('qwertzui', $result['title']);
self::assertTrue($result['enabled']); self::assertTrue($result['enabled']);
@@ -335,7 +335,7 @@ class UserControllerTest extends APIControllerBaseTest
$this->request($client, '/api/users/1', 'PATCH', [], json_encode($data)); $this->request($client, '/api/users/1', 'PATCH', [], json_encode($data));
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertEquals(400, $response->getStatusCode()); self::assertEquals(400, $response->getStatusCode());
$this->assertApiCallValidationError($response, ['email', 'language', 'timezone', 'roles'], true); $this->assertApiCallValidationError($response, ['email', 'language', 'timezone', 'roles'], true);
} }
} }

View File

@@ -25,17 +25,17 @@ class CalendarSourceTest extends TestCase
$sut->addOption('hello', false); $sut->addOption('hello', false);
$sut->addOption('world', 123); $sut->addOption('world', 123);
$this->assertEquals(CalendarSourceType::JSON, $sut->getType()); self::assertEquals(CalendarSourceType::JSON, $sut->getType());
$this->assertEquals('json', $sut->getTypeName()); self::assertEquals('json', $sut->getTypeName());
$this->assertEquals('0815', $sut->getId()); self::assertEquals('0815', $sut->getId());
$this->assertEquals('askdjfhlaksjdhflaksjhdflkjasdlkfjh', $sut->getUri()); self::assertEquals('askdjfhlaksjdhflaksjhdflkjasdlkfjh', $sut->getUri());
$this->assertEquals('#fffccc', $sut->getColor()); self::assertEquals('#fffccc', $sut->getColor());
$this->assertEquals(['foo' => 'bar', 'hello' => false, 'world' => 123], $sut->getOptions()); self::assertEquals(['foo' => 'bar', 'hello' => false, 'world' => 123], $sut->getOptions());
$sut = new CalendarSource(CalendarSourceType::TIMESHEET, '0815', 'askdjfhlaksjdhflaksjhdflkjasdlkfjh', null); $sut = new CalendarSource(CalendarSourceType::TIMESHEET, '0815', 'askdjfhlaksjdhflaksjhdflkjasdlkfjh', null);
$this->assertEquals('0815', $sut->getId()); self::assertEquals('0815', $sut->getId());
$this->assertEquals('askdjfhlaksjdhflaksjhdflkjasdlkfjh', $sut->getUri()); self::assertEquals('askdjfhlaksjdhflaksjhdflkjasdlkfjh', $sut->getUri());
$this->assertNull($sut->getColor()); self::assertNull($sut->getColor());
} }
} }

View File

@@ -21,14 +21,14 @@ class GoogleSourceTest extends TestCase
{ {
$sut = new GoogleSource('0815', 'askdjfhlaksjdhflaksjhdflkjasdlkfjh', '#fffccc'); $sut = new GoogleSource('0815', 'askdjfhlaksjdhflaksjhdflkjasdlkfjh', '#fffccc');
$this->assertEquals('0815', $sut->getId()); self::assertEquals('0815', $sut->getId());
$this->assertEquals('askdjfhlaksjdhflaksjhdflkjasdlkfjh', $sut->getUri()); self::assertEquals('askdjfhlaksjdhflaksjhdflkjasdlkfjh', $sut->getUri());
$this->assertEquals('#fffccc', $sut->getColor()); self::assertEquals('#fffccc', $sut->getColor());
$sut = new GoogleSource('0815', 'askdjfhlaksjdhflaksjhdflkjasdlkfjh', null); $sut = new GoogleSource('0815', 'askdjfhlaksjdhflaksjhdflkjasdlkfjh', null);
$this->assertEquals('0815', $sut->getId()); self::assertEquals('0815', $sut->getId());
$this->assertEquals('askdjfhlaksjdhflaksjhdflkjasdlkfjh', $sut->getUri()); self::assertEquals('askdjfhlaksjdhflaksjhdflkjasdlkfjh', $sut->getUri());
$this->assertNull($sut->getColor()); self::assertNull($sut->getColor());
} }
} }

View File

@@ -27,12 +27,12 @@ class GoogleTest extends TestCase
$sut = new Google('qwertzuiop1234567890'); $sut = new Google('qwertzuiop1234567890');
$this->assertEquals([], $sut->getSources()); self::assertEquals([], $sut->getSources());
$this->assertEquals('qwertzuiop1234567890', $sut->getApiKey()); self::assertEquals('qwertzuiop1234567890', $sut->getApiKey());
$sut = new Google('ewa6347865fg908ouhpoihui7f56', $sources); $sut = new Google('ewa6347865fg908ouhpoihui7f56', $sources);
$this->assertEquals($sources, $sut->getSources()); self::assertEquals($sources, $sut->getSources());
$this->assertEquals('ewa6347865fg908ouhpoihui7f56', $sut->getApiKey()); self::assertEquals('ewa6347865fg908ouhpoihui7f56', $sut->getApiKey());
} }
} }

View File

@@ -25,12 +25,12 @@ class RecentActivitiesSourceTest extends TestCase
$sut = new RecentActivitiesSource($entries); $sut = new RecentActivitiesSource($entries);
$this->assertEquals('calendar/drag-drop.html.twig', $sut->getBlockInclude()); self::assertEquals('calendar/drag-drop.html.twig', $sut->getBlockInclude());
$this->assertSame($entries, $sut->getEntries()); self::assertSame($entries, $sut->getEntries());
$this->assertEquals('POST', $sut->getMethod()); self::assertEquals('POST', $sut->getMethod());
$this->assertEquals('post_timesheet', $sut->getRoute()); self::assertEquals('post_timesheet', $sut->getRoute());
$this->assertEquals(['full' => 'true'], $sut->getRouteParams()); self::assertEquals(['full' => 'true'], $sut->getRouteParams());
$this->assertEquals([], $sut->getRouteReplacer()); self::assertEquals([], $sut->getRouteReplacer());
$this->assertEquals('recent.activities', $sut->getTitle()); self::assertEquals('recent.activities', $sut->getTitle());
} }
} }

View File

@@ -41,12 +41,12 @@ class TimesheetEntryTest extends TestCase
$sut = new TimesheetEntry($timesheet, '#cccccc'); $sut = new TimesheetEntry($timesheet, '#cccccc');
$this->assertEquals('a wonderful activity!!', $sut->getTitle()); self::assertEquals('a wonderful activity!!', $sut->getTitle());
$this->assertEquals('#cccccc', $sut->getColor()); self::assertEquals('#cccccc', $sut->getColor());
$this->assertSame($project, $sut->getProject()); self::assertSame($project, $sut->getProject());
$this->assertSame($activity, $sut->getActivity()); self::assertSame($activity, $sut->getActivity());
$this->assertEquals('dd_timesheet', $sut->getBlockName()); self::assertEquals('dd_timesheet', $sut->getBlockName());
$this->assertEquals($expectedData, $sut->getData()); self::assertEquals($expectedData, $sut->getData());
$expectedData = [ $expectedData = [
'activity' => null, 'activity' => null,
@@ -57,7 +57,7 @@ class TimesheetEntryTest extends TestCase
$sut = new TimesheetEntry($timesheet, '#cccccc', true); $sut = new TimesheetEntry($timesheet, '#cccccc', true);
$this->assertEquals($expectedData, $sut->getData()); self::assertEquals($expectedData, $sut->getData());
} }
public function testEmpty(): void public function testEmpty(): void
@@ -71,11 +71,11 @@ class TimesheetEntryTest extends TestCase
$sut = new TimesheetEntry($timesheet, '#ddd'); $sut = new TimesheetEntry($timesheet, '#ddd');
$this->assertEquals('', $sut->getTitle()); self::assertEquals('', $sut->getTitle());
$this->assertEquals('#ddd', $sut->getColor()); self::assertEquals('#ddd', $sut->getColor());
$this->assertNull($sut->getProject()); self::assertNull($sut->getProject());
$this->assertNull($sut->getActivity()); self::assertNull($sut->getActivity());
$this->assertEquals($expectedData, $sut->getData()); self::assertEquals($expectedData, $sut->getData());
} }
public function testGetTitle(): void public function testGetTitle(): void

View File

@@ -70,7 +70,7 @@ class ActivateUserCommandTest extends KernelTestCase
$commandTester = $this->callCommand('chris_user'); $commandTester = $this->callCommand('chris_user');
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[OK] User "chris_user" has been activated.', $output); self::assertStringContainsString('[OK] User "chris_user" has been activated.', $output);
$container = self::$kernel->getContainer(); $container = self::$kernel->getContainer();
/** @var Registry $doctrine */ /** @var Registry $doctrine */
@@ -87,7 +87,7 @@ class ActivateUserCommandTest extends KernelTestCase
$commandTester = $this->callCommand('susan_super'); $commandTester = $this->callCommand('susan_super');
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[WARNING] User "susan_super" is already active.', $output); self::assertStringContainsString('[WARNING] User "susan_super" is already active.', $output);
} }
public function testWithMissingUsername(): void public function testWithMissingUsername(): void

View File

@@ -86,7 +86,7 @@ class ChangePasswordCommandTest extends KernelTestCase
$commandTester = $this->callCommand('john_user', '0987654321'); $commandTester = $this->callCommand('john_user', '0987654321');
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[OK] Changed password for user "john_user".', $output); self::assertStringContainsString('[OK] Changed password for user "john_user".', $output);
/** @var Registry $doctrine */ /** @var Registry $doctrine */
$doctrine = self::getContainer()->get('doctrine'); $doctrine = self::getContainer()->get('doctrine');
@@ -105,7 +105,7 @@ class ChangePasswordCommandTest extends KernelTestCase
$commandTester = $this->callCommand('john_user', '1'); $commandTester = $this->callCommand('john_user', '1');
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[ERROR] plainPassword: This value is too short.', $output); self::assertStringContainsString('[ERROR] plainPassword: This value is too short.', $output);
} }
public function testWithMissingUsername(): void public function testWithMissingUsername(): void
@@ -120,6 +120,6 @@ class ChangePasswordCommandTest extends KernelTestCase
{ {
$commandTester = $this->callCommand('john_user', null); $commandTester = $this->callCommand('john_user', null);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[OK] Changed password for user "john_user".', $output); self::assertStringContainsString('[OK] Changed password for user "john_user".', $output);
} }
} }

View File

@@ -42,7 +42,7 @@ class CreateUserCommandTest extends KernelTestCase
$commandTester = $this->createUser('MyTestUser', 'user@example.com', 'ROLE_USER', 'foobar'); $commandTester = $this->createUser('MyTestUser', 'user@example.com', 'ROLE_USER', 'foobar');
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[ERROR] plainPassword: This value is too short.', $output); self::assertStringContainsString('[ERROR] plainPassword: This value is too short.', $output);
} }
public function testCreateUser(): void public function testCreateUser(): void
@@ -50,7 +50,7 @@ class CreateUserCommandTest extends KernelTestCase
$commandTester = $this->createUser('MyTestUser', 'user@example.com', 'ROLE_USER', 'foobar12'); $commandTester = $this->createUser('MyTestUser', 'user@example.com', 'ROLE_USER', 'foobar12');
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[OK] Success! Created user: MyTestUser', $output); self::assertStringContainsString('[OK] Success! Created user: MyTestUser', $output);
$container = self::$kernel->getContainer(); $container = self::$kernel->getContainer();
/** @var Registry $doctrine */ /** @var Registry $doctrine */
@@ -80,9 +80,9 @@ class CreateUserCommandTest extends KernelTestCase
{ {
$commandTester = $this->createUser('xx', '', 'ROLE_USER', ''); $commandTester = $this->createUser('xx', '', 'ROLE_USER', '');
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[ERROR] email: This value should not be blank', $output); self::assertStringContainsString('[ERROR] email: This value should not be blank', $output);
$this->assertStringContainsString('[ERROR] plainPassword: This value should not be blank', $output); self::assertStringContainsString('[ERROR] plainPassword: This value should not be blank', $output);
$this->assertStringContainsString('[ERROR] plainPassword: This value is too short.', $output); self::assertStringContainsString('[ERROR] plainPassword: This value is too short.', $output);
} }
public function testUserAlreadyExisting(): void public function testUserAlreadyExisting(): void
@@ -91,7 +91,7 @@ class CreateUserCommandTest extends KernelTestCase
$commandTester = $this->createUser('MyTestUser', 'user2@example.com', 'ROLE_USER', 'foobar123'); $commandTester = $this->createUser('MyTestUser', 'user2@example.com', 'ROLE_USER', 'foobar123');
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[ERROR] username: The username is already used.', $output); self::assertStringContainsString('[ERROR] username: The username is already used.', $output);
} }
public function testEmailAlreadyExisting(): void public function testEmailAlreadyExisting(): void
@@ -100,7 +100,7 @@ class CreateUserCommandTest extends KernelTestCase
$commandTester = $this->createUser('MyTestUser2', 'user@example.com', 'ROLE_USER', 'foobar'); $commandTester = $this->createUser('MyTestUser2', 'user@example.com', 'ROLE_USER', 'foobar');
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[ERROR] email: This e-mail address is already in use.', $output); self::assertStringContainsString('[ERROR] email: This e-mail address is already in use.', $output);
} }
public function testUserEmail(): void public function testUserEmail(): void
@@ -108,6 +108,6 @@ class CreateUserCommandTest extends KernelTestCase
$commandTester = $this->createUser('MyTestUser', 'ROLE_USER', 'ROLE_USER', 'foobar12'); $commandTester = $this->createUser('MyTestUser', 'ROLE_USER', 'ROLE_USER', 'foobar12');
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[ERROR] email: This value is not a valid email address', $output); self::assertStringContainsString('[ERROR] email: This value is not a valid email address', $output);
} }
} }

View File

@@ -69,7 +69,7 @@ class DeactivateUserCommandTest extends KernelTestCase
$commandTester = $this->callCommand('john_user'); $commandTester = $this->callCommand('john_user');
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[OK] User "john_user" has been deactivated.', $output); self::assertStringContainsString('[OK] User "john_user" has been deactivated.', $output);
$container = self::$kernel->getContainer(); $container = self::$kernel->getContainer();
/** @var Registry $doctrine */ /** @var Registry $doctrine */
@@ -86,7 +86,7 @@ class DeactivateUserCommandTest extends KernelTestCase
$commandTester = $this->callCommand('chris_user'); $commandTester = $this->callCommand('chris_user');
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[WARNING] User "chris_user" is already deactivated.', $output); self::assertStringContainsString('[WARNING] User "chris_user" is already deactivated.', $output);
} }
public function testWithMissingUsername(): void public function testWithMissingUsername(): void

View File

@@ -79,7 +79,7 @@ class DemoteUserCommandTest extends KernelTestCase
$commandTester = $this->callCommand('tony_teamlead', 'ROLE_TEAMLEAD'); $commandTester = $this->callCommand('tony_teamlead', 'ROLE_TEAMLEAD');
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[OK] Role "ROLE_TEAMLEAD" has been removed from user "tony_teamlead".', $output); self::assertStringContainsString('[OK] Role "ROLE_TEAMLEAD" has been removed from user "tony_teamlead".', $output);
$container = self::$kernel->getContainer(); $container = self::$kernel->getContainer();
/** @var Registry $doctrine */ /** @var Registry $doctrine */
@@ -96,7 +96,7 @@ class DemoteUserCommandTest extends KernelTestCase
$commandTester = $this->callCommand('susan_super', null, true); $commandTester = $this->callCommand('susan_super', null, true);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[OK] Super administrator role has been removed from the user "susan_super".', $output); self::assertStringContainsString('[OK] Super administrator role has been removed from the user "susan_super".', $output);
$container = self::$kernel->getContainer(); $container = self::$kernel->getContainer();
/** @var Registry $doctrine */ /** @var Registry $doctrine */
@@ -113,7 +113,7 @@ class DemoteUserCommandTest extends KernelTestCase
$commandTester = $this->callCommand('tony_teamlead', null, true); $commandTester = $this->callCommand('tony_teamlead', null, true);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[WARNING] User "tony_teamlead" doesn\'t have the super administrator role.', $output); self::assertStringContainsString('[WARNING] User "tony_teamlead" doesn\'t have the super administrator role.', $output);
} }
public function testDemoteAdminFailsOnTeamlead(): void public function testDemoteAdminFailsOnTeamlead(): void
@@ -121,7 +121,7 @@ class DemoteUserCommandTest extends KernelTestCase
$commandTester = $this->callCommand('tony_teamlead', 'ROLE_ADMIN', false); $commandTester = $this->callCommand('tony_teamlead', 'ROLE_ADMIN', false);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[WARNING] User "tony_teamlead" didn\'t have "ROLE_ADMIN" role.', $output); self::assertStringContainsString('[WARNING] User "tony_teamlead" didn\'t have "ROLE_ADMIN" role.', $output);
} }
public function testDemoteRoleAndSuperFails(): void public function testDemoteRoleAndSuperFails(): void

View File

@@ -122,7 +122,7 @@ class ExportCreateCommandTest extends KernelTestCase
$commandTester = $this->createExport($options); $commandTester = $this->createExport($options);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[ERROR] ' . $errorMessage, $output); self::assertStringContainsString('[ERROR] ' . $errorMessage, $output);
} }
protected function assertCommandResult(array $options = [], string $message = ''): void protected function assertCommandResult(array $options = [], string $message = ''): void
@@ -130,7 +130,7 @@ class ExportCreateCommandTest extends KernelTestCase
$commandTester = $this->createExport($options); $commandTester = $this->createExport($options);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[OK] ' . $message, $output); self::assertStringContainsString('[OK] ' . $message, $output);
} }
public function testCreateWithUnknownExportFilter(): void public function testCreateWithUnknownExportFilter(): void
@@ -179,7 +179,7 @@ class ExportCreateCommandTest extends KernelTestCase
$commandTester = $this->createExport($options); $commandTester = $this->createExport($options);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[OK] No entries found, skipping', $output); self::assertStringContainsString('[OK] No entries found, skipping', $output);
} }
/** /**
@@ -217,7 +217,7 @@ class ExportCreateCommandTest extends KernelTestCase
$commandTester = $this->createExport(['--template' => 'csv', '--customer' => [$data[0]->getId()], '--start' => $start->format('Y-m-d'), '--end' => $end->format('Y-m-d'), '--username' => UserFixtures::USERNAME_SUPER_ADMIN]); $commandTester = $this->createExport(['--template' => 'csv', '--customer' => [$data[0]->getId()], '--start' => $start->format('Y-m-d'), '--end' => $end->format('Y-m-d'), '--username' => UserFixtures::USERNAME_SUPER_ADMIN]);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('Saved export to: ', $output); self::assertStringContainsString('Saved export to: ', $output);
} }
public function testCreateExportByProject(): void public function testCreateExportByProject(): void
@@ -230,7 +230,7 @@ class ExportCreateCommandTest extends KernelTestCase
$commandTester = $this->createExport(['--template' => 'csv', '--project' => [$data[1][0]->getId()], '--start' => $start->format('Y-m-d'), '--end' => $end->format('Y-m-d')]); $commandTester = $this->createExport(['--template' => 'csv', '--project' => [$data[1][0]->getId()], '--start' => $start->format('Y-m-d'), '--end' => $end->format('Y-m-d')]);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('Saved export to: ', $output); self::assertStringContainsString('Saved export to: ', $output);
} }
public function testCreateExportWithEmail(): void public function testCreateExportWithEmail(): void
@@ -252,7 +252,7 @@ class ExportCreateCommandTest extends KernelTestCase
])); ]));
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('Send email with report to: foo@example.com', $output); self::assertStringContainsString('Send email with report to: foo@example.com', $output);
$this->assertStringContainsString('Send email with report to: foo2@example.com', $output); self::assertStringContainsString('Send email with report to: foo2@example.com', $output);
} }
} }

View File

@@ -108,7 +108,7 @@ class InvoiceCreateCommandTest extends KernelTestCase
$commandTester = $this->createInvoice($options); $commandTester = $this->createInvoice($options);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[ERROR] ' . $errorMessage, $output); self::assertStringContainsString('[ERROR] ' . $errorMessage, $output);
} }
public function testCreateWithUnknownExportFilter(): void public function testCreateWithUnknownExportFilter(): void
@@ -174,13 +174,13 @@ class InvoiceCreateCommandTest extends KernelTestCase
$commandTester = $this->createInvoice(['--user' => UserFixtures::USERNAME_SUPER_ADMIN, '--customer' => 1, '--template' => 'Invoice', '--start' => '2020-01-01', '--end' => '2020-03-01']); $commandTester = $this->createInvoice(['--user' => UserFixtures::USERNAME_SUPER_ADMIN, '--customer' => 1, '--template' => 'Invoice', '--start' => '2020-01-01', '--end' => '2020-03-01']);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('Created 1 invoice(s)', $output); self::assertStringContainsString('Created 1 invoice(s)', $output);
$this->assertStringContainsString('| ID', $output); self::assertStringContainsString('| ID', $output);
$this->assertStringContainsString('| Customer', $output); self::assertStringContainsString('| Customer', $output);
$this->assertStringContainsString('| Total', $output); self::assertStringContainsString('| Total', $output);
$this->assertStringContainsString('| Filename', $output); self::assertStringContainsString('| Filename', $output);
$this->assertStringContainsString('0 EUR', $output); self::assertStringContainsString('0 EUR', $output);
$this->assertStringContainsString('/tests/_data/invoices/' . ((new \DateTime())->format('Y')) . '-001-Test.html |', $output); self::assertStringContainsString('/tests/_data/invoices/' . ((new \DateTime())->format('Y')) . '-001-Test.html |', $output);
} }
/** /**
@@ -224,7 +224,7 @@ class InvoiceCreateCommandTest extends KernelTestCase
$commandTester = $this->createInvoice(['--user' => UserFixtures::USERNAME_SUPER_ADMIN, '--by-customer' => null, '--start' => $start->format('Y-m-d'), '--end' => $end->format('Y-m-d')]); $commandTester = $this->createInvoice(['--user' => UserFixtures::USERNAME_SUPER_ADMIN, '--by-customer' => null, '--start' => $start->format('Y-m-d'), '--end' => $end->format('Y-m-d')]);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('Created 1 invoice(s) ', $output); self::assertStringContainsString('Created 1 invoice(s) ', $output);
} }
public function testCreateInvoiceByCustomerId(): void public function testCreateInvoiceByCustomerId(): void
@@ -238,7 +238,7 @@ class InvoiceCreateCommandTest extends KernelTestCase
$commandTester = $this->createInvoice(['--user' => UserFixtures::USERNAME_SUPER_ADMIN, '--customer' => $customer . ',1', '--start' => $start->format('Y-m-d'), '--end' => $end->format('Y-m-d')]); $commandTester = $this->createInvoice(['--user' => UserFixtures::USERNAME_SUPER_ADMIN, '--customer' => $customer . ',1', '--start' => $start->format('Y-m-d'), '--end' => $end->format('Y-m-d')]);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('Created 1 invoice(s) ', $output); self::assertStringContainsString('Created 1 invoice(s) ', $output);
} }
public function testCreateInvoiceByProject(): void public function testCreateInvoiceByProject(): void
@@ -251,7 +251,7 @@ class InvoiceCreateCommandTest extends KernelTestCase
$commandTester = $this->createInvoice(['--user' => UserFixtures::USERNAME_SUPER_ADMIN, '--exported' => 'all', '--by-project' => null, '--start' => $start->format('Y-m-d'), '--end' => $end->format('Y-m-d')]); $commandTester = $this->createInvoice(['--user' => UserFixtures::USERNAME_SUPER_ADMIN, '--exported' => 'all', '--by-project' => null, '--start' => $start->format('Y-m-d'), '--end' => $end->format('Y-m-d')]);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('Created 1 invoice(s) ', $output); self::assertStringContainsString('Created 1 invoice(s) ', $output);
} }
public function testCreateInvoiceByProjectId(): void public function testCreateInvoiceByProjectId(): void
@@ -264,7 +264,7 @@ class InvoiceCreateCommandTest extends KernelTestCase
$commandTester = $this->createInvoice(['--user' => UserFixtures::USERNAME_SUPER_ADMIN, '--exported' => 'all', '--project' => '1', '--template' => 'Invoice', '--start' => $start->format('Y-m-d'), '--end' => $end->format('Y-m-d')]); $commandTester = $this->createInvoice(['--user' => UserFixtures::USERNAME_SUPER_ADMIN, '--exported' => 'all', '--project' => '1', '--template' => 'Invoice', '--start' => $start->format('Y-m-d'), '--end' => $end->format('Y-m-d')]);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('Created 1 invoice(s) ', $output); self::assertStringContainsString('Created 1 invoice(s) ', $output);
} }
public function testCreateInvoiceByProjectWithPreview(): void public function testCreateInvoiceByProjectWithPreview(): void
@@ -277,6 +277,6 @@ class InvoiceCreateCommandTest extends KernelTestCase
$commandTester = $this->createInvoice(['--user' => UserFixtures::USERNAME_SUPER_ADMIN, '--exported' => 'all', '--preview' => sys_get_temp_dir(), '--by-project' => null, '--start' => $start->format('Y-m-d'), '--end' => $end->format('Y-m-d')]); $commandTester = $this->createInvoice(['--user' => UserFixtures::USERNAME_SUPER_ADMIN, '--exported' => 'all', '--preview' => sys_get_temp_dir(), '--by-project' => null, '--start' => $start->format('Y-m-d'), '--end' => $end->format('Y-m-d')]);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('Created 1 invoice(s) ', $output); self::assertStringContainsString('Created 1 invoice(s) ', $output);
} }
} }

View File

@@ -25,8 +25,8 @@ class ListUserCommandTest extends KernelTestCase
{ {
$commandTester = $this->getCommandTester(); $commandTester = $this->getCommandTester();
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('Username Email Roles Active Authenticator', $output); self::assertStringContainsString('Username Email Roles Active Authenticator', $output);
$this->assertStringContainsString('---------- ------- ------- -------- -------------', $output); self::assertStringContainsString('---------- ------- ------- -------- -------------', $output);
} }
protected function getCommandTester(): CommandTester protected function getCommandTester(): CommandTester

View File

@@ -33,9 +33,9 @@ class PluginCommandTest extends KernelTestCase
$commandTester = $this->getCommandTester([$plugin1], []); $commandTester = $this->getCommandTester([$plugin1], []);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString(__DIR__, $output); self::assertStringContainsString(__DIR__, $output);
$this->assertStringContainsString('Plugin/Fixtures/TestPlugin', $output); self::assertStringContainsString('Plugin/Fixtures/TestPlugin', $output);
$this->assertStringContainsString('TestPlugin from composer.json', $output); self::assertStringContainsString('TestPlugin from composer.json', $output);
} }
private function getCommandTester(array $plugins, array $options = []): CommandTester private function getCommandTester(array $plugins, array $options = []): CommandTester

View File

@@ -36,7 +36,7 @@ class PromoteUserCommandTest extends KernelTestCase
$container = self::$kernel->getContainer(); $container = self::$kernel->getContainer();
$userService = $container->get(UserService::class); $userService = $container->get(UserService::class);
$this->assertInstanceOf(UserService::class, $userService); self::assertInstanceOf(UserService::class, $userService);
$this->application->add(new PromoteUserCommand($userService)); $this->application->add(new PromoteUserCommand($userService));
} }
@@ -79,7 +79,7 @@ class PromoteUserCommandTest extends KernelTestCase
$commandTester = $this->callCommand('john_user', 'ROLE_TEAMLEAD'); $commandTester = $this->callCommand('john_user', 'ROLE_TEAMLEAD');
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[OK] Role "ROLE_TEAMLEAD" has been added to user "john_user".', $output); self::assertStringContainsString('[OK] Role "ROLE_TEAMLEAD" has been added to user "john_user".', $output);
$container = self::$kernel->getContainer(); $container = self::$kernel->getContainer();
/** @var Registry $doctrine */ /** @var Registry $doctrine */
@@ -96,7 +96,7 @@ class PromoteUserCommandTest extends KernelTestCase
$commandTester = $this->callCommand('john_user', null, true); $commandTester = $this->callCommand('john_user', null, true);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[OK] User "john_user" has been promoted as a super administrator.', $output); self::assertStringContainsString('[OK] User "john_user" has been promoted as a super administrator.', $output);
$container = self::$kernel->getContainer(); $container = self::$kernel->getContainer();
/** @var Registry $doctrine */ /** @var Registry $doctrine */
@@ -113,7 +113,7 @@ class PromoteUserCommandTest extends KernelTestCase
$commandTester = $this->callCommand('susan_super', null, true); $commandTester = $this->callCommand('susan_super', null, true);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[WARNING] User "susan_super" does already have the super administrator role.', $output); self::assertStringContainsString('[WARNING] User "susan_super" does already have the super administrator role.', $output);
} }
public function testPromoteTeamleadFailsOnTeamlead(): void public function testPromoteTeamleadFailsOnTeamlead(): void
@@ -121,7 +121,7 @@ class PromoteUserCommandTest extends KernelTestCase
$commandTester = $this->callCommand('tony_teamlead', 'ROLE_TEAMLEAD', false); $commandTester = $this->callCommand('tony_teamlead', 'ROLE_TEAMLEAD', false);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertStringContainsString('[WARNING] User "tony_teamlead" did already have "ROLE_TEAMLEAD" role.', $output); self::assertStringContainsString('[WARNING] User "tony_teamlead" did already have "ROLE_TEAMLEAD" role.', $output);
} }
public function testPromoteRoleAndSuperFails(): void public function testPromoteRoleAndSuperFails(): void

View File

@@ -39,10 +39,10 @@ class VersionCommandTest extends KernelTestCase
{ {
$commandTester = $this->getCommandTester($options); $commandTester = $this->getCommandTester($options);
$output = $commandTester->getDisplay(); $output = $commandTester->getDisplay();
$this->assertEquals($result . PHP_EOL, $output); self::assertEquals($result . PHP_EOL, $output);
} }
public function getTestData(): array // @phpstan-ignore missingType.iterableValue public static function getTestData(): array // @phpstan-ignore missingType.iterableValue
{ {
return [ return [
[[], 'Kimai ' . Constants::VERSION . ' by Kevin Papst.'], [[], 'Kimai ' . Constants::VERSION . ' by Kevin Papst.'],

View File

@@ -45,18 +45,18 @@ class LdapConfigurationTest extends TestCase
public function testDefault(): void public function testDefault(): void
{ {
$sut = $this->getSut([]); $sut = $this->getSut([]);
$this->assertFalse($sut->isActivated()); self::assertFalse($sut->isActivated());
$this->assertEquals([], $sut->getUserParameters()); self::assertEquals([], $sut->getUserParameters());
$this->assertEquals([], $sut->getRoleParameters()); self::assertEquals([], $sut->getRoleParameters());
$this->assertEquals([], $sut->getConnectionParameters()); self::assertEquals([], $sut->getConnectionParameters());
} }
public function testMapping(): void public function testMapping(): void
{ {
$sut = $this->getSut($this->getDefaultSettings()); $sut = $this->getSut($this->getDefaultSettings());
$this->assertTrue($sut->isActivated()); self::assertTrue($sut->isActivated());
$this->assertEquals(['foo' => 'bar'], $sut->getUserParameters()); self::assertEquals(['foo' => 'bar'], $sut->getUserParameters());
$this->assertEquals(['bar' => 'foo'], $sut->getRoleParameters()); self::assertEquals(['bar' => 'foo'], $sut->getRoleParameters());
$this->assertEquals(['host' => '1.2.3.4'], $sut->getConnectionParameters()); self::assertEquals(['host' => '1.2.3.4'], $sut->getConnectionParameters());
} }
} }

View File

@@ -106,10 +106,10 @@ class LocaleServiceTest extends TestCase
public function testGetAllLocales(): void public function testGetAllLocales(): void
{ {
$sut = $this->getSut([]); $sut = $this->getSut([]);
$this->assertEquals([], $sut->getAllLocales()); self::assertEquals([], $sut->getAllLocales());
$sut = $this->getSut($this->getDefaultSettings()); $sut = $this->getSut($this->getDefaultSettings());
$this->assertEquals(['de', 'en', 'en_AU', 'pt_BR', 'it', 'fr', 'fr_BE', 'fr_CA', 'es', 'ru', 'ar', 'hu'], $sut->getAllLocales()); self::assertEquals(['de', 'en', 'en_AU', 'pt_BR', 'it', 'fr', 'fr_BE', 'fr_CA', 'es', 'ru', 'ar', 'hu'], $sut->getAllLocales());
} }
public function testInvalidLocaleWithGivenLocale(): void public function testInvalidLocaleWithGivenLocale(): void
@@ -124,26 +124,26 @@ class LocaleServiceTest extends TestCase
public function testGetDurationFormat(): void public function testGetDurationFormat(): void
{ {
$sut = $this->getSut($this->getDefaultSettings()); $sut = $this->getSut($this->getDefaultSettings());
$this->assertEquals('%h:%m', $sut->getDurationFormat('de')); self::assertEquals('%h:%m', $sut->getDurationFormat('de'));
} }
public function testGetDateFormat(): void public function testGetDateFormat(): void
{ {
$sut = $this->getSut($this->getDefaultSettings()); $sut = $this->getSut($this->getDefaultSettings());
$this->assertEquals('d.m.Y', $sut->getDateFormat('de')); self::assertEquals('d.m.Y', $sut->getDateFormat('de'));
} }
public function testGetDateTimeFormat(): void public function testGetDateTimeFormat(): void
{ {
$sut = $this->getSut($this->getDefaultSettings()); $sut = $this->getSut($this->getDefaultSettings());
$this->assertEquals('d.m.Y H:i', $sut->getDateTimeFormat('de')); self::assertEquals('d.m.Y H:i', $sut->getDateTimeFormat('de'));
} }
public function testGetTimeFormat(): void public function testGetTimeFormat(): void
{ {
$sut = $this->getSut($this->getDefaultSettings()); $sut = $this->getSut($this->getDefaultSettings());
$this->assertEquals('H:i', $sut->getTimeFormat('de')); self::assertEquals('H:i', $sut->getTimeFormat('de'));
$this->assertEquals('H:i:s', $sut->getTimeFormat('en')); self::assertEquals('H:i:s', $sut->getTimeFormat('en'));
} }
/** /**
@@ -153,13 +153,13 @@ class LocaleServiceTest extends TestCase
{ {
$sut = $this->getSut($this->getDefaultSettings()); $sut = $this->getSut($this->getDefaultSettings());
$actual = $sut->getNearestTranslationLocale($locale); $actual = $sut->getNearestTranslationLocale($locale);
$this->assertEquals($expected, $actual); self::assertEquals($expected, $actual);
} }
/** /**
* @return array<int, array<int, string>> * @return array<int, array<int, string>>
*/ */
public function getNearestTranslationLocaleData(): array public static function getNearestTranslationLocaleData(): array
{ {
return [ return [
['de', 'de'], // registered and translated: use it ['de', 'de'], // registered and translated: use it

View File

@@ -53,31 +53,31 @@ class SamlConfigurationTest extends TestCase
public function testDefault(): void public function testDefault(): void
{ {
$sut = $this->getSut([]); $sut = $this->getSut([]);
$this->assertFalse($sut->isActivated()); self::assertFalse($sut->isActivated());
$this->assertEquals('', $sut->getTitle()); self::assertEquals('', $sut->getTitle());
$this->assertEquals([], $sut->getConnection()); self::assertEquals([], $sut->getConnection());
$this->assertEquals([], $sut->getRolesMapping()); self::assertEquals([], $sut->getRolesMapping());
$this->assertEquals('', $sut->getRolesAttribute()); self::assertEquals('', $sut->getRolesAttribute());
$this->assertEquals([], $sut->getAttributeMapping()); self::assertEquals([], $sut->getAttributeMapping());
$this->assertFalse($sut->isRolesResetOnLogin()); self::assertFalse($sut->isRolesResetOnLogin());
} }
public function testDefaultSettings(): void public function testDefaultSettings(): void
{ {
$sut = $this->getSut($this->getDefaultSettings()); $sut = $this->getSut($this->getDefaultSettings());
$this->assertTrue($sut->isActivated()); self::assertTrue($sut->isActivated());
$this->assertTrue($sut->isRolesResetOnLogin()); self::assertTrue($sut->isRolesResetOnLogin());
$this->assertEquals('SAML title', $sut->getTitle()); self::assertEquals('SAML title', $sut->getTitle());
$this->assertEquals('google', $sut->getProvider()); self::assertEquals('google', $sut->getProvider());
$this->assertEquals([ self::assertEquals([
'host' => '1.2.3.4', 'host' => '1.2.3.4',
], $sut->getConnection()); ], $sut->getConnection());
$this->assertEquals([ self::assertEquals([
['saml' => 'Kimai - Admin', 'kimai' => 'ROLE_SUPER_ADMIN'], ['saml' => 'Kimai - Admin', 'kimai' => 'ROLE_SUPER_ADMIN'],
['saml' => 'Management', 'kimai' => 'ROLE_TEAMLEAD'], ['saml' => 'Management', 'kimai' => 'ROLE_TEAMLEAD'],
], $sut->getRolesMapping()); ], $sut->getRolesMapping());
$this->assertEquals('Roles', $sut->getRolesAttribute()); self::assertEquals('Roles', $sut->getRolesAttribute());
$this->assertEquals([ self::assertEquals([
['saml' => '$Email', 'kimai' => 'email'], ['saml' => '$Email', 'kimai' => 'email'],
['saml' => '$FirstName $LastName', 'kimai' => 'alias'], ['saml' => '$FirstName $LastName', 'kimai' => 'alias'],
], $sut->getAttributeMapping()); ], $sut->getAttributeMapping());

View File

@@ -132,22 +132,22 @@ class SystemConfigurationTest extends TestCase
public function testDefaultWithoutLoader(): void public function testDefaultWithoutLoader(): void
{ {
$sut = $this->getSut($this->getDefaultSettings(), []); $sut = $this->getSut($this->getDefaultSettings(), []);
$this->assertEquals('Europe/London', $sut->find('defaults.customer.timezone')); self::assertEquals('Europe/London', $sut->find('defaults.customer.timezone'));
$this->assertEquals('GBP', $sut->find('defaults.customer.currency')); self::assertEquals('GBP', $sut->find('defaults.customer.currency'));
$this->assertFalse($sut->find('timesheet.rules.allow_future_times')); self::assertFalse($sut->find('timesheet.rules.allow_future_times'));
$this->assertEquals(99, $sut->find('timesheet.active_entries.hard_limit')); self::assertEquals(99, $sut->find('timesheet.active_entries.hard_limit'));
$this->assertEquals('Maroon|#800000,Brown|#a52a2a,Red|#ff0000,Orange|#ffa500,#ffffff,,|#000000', $sut->getThemeColorChoices()); self::assertEquals('Maroon|#800000,Brown|#a52a2a,Red|#ff0000,Orange|#ffa500,#ffffff,,|#000000', $sut->getThemeColorChoices());
$this->assertEquals(['Maroon' => '#800000', 'Brown' => '#a52a2a', 'Red' => '#ff0000', 'Orange' => '#ffa500', '#ffffff' => '#ffffff', '#000000' => '#000000'], $sut->getThemeColors()); self::assertEquals(['Maroon' => '#800000', 'Brown' => '#a52a2a', 'Red' => '#ff0000', 'Orange' => '#ffa500', '#ffffff' => '#ffffff', '#000000' => '#000000'], $sut->getThemeColors());
} }
public function testDefaultWithLoader(): void public function testDefaultWithLoader(): void
{ {
$sut = $this->getSut($this->getDefaultSettings(), $this->getDefaultLoaderSettings()); $sut = $this->getSut($this->getDefaultSettings(), $this->getDefaultLoaderSettings());
$this->assertEquals('Russia/Moscov', $sut->find('defaults.customer.timezone')); self::assertEquals('Russia/Moscov', $sut->find('defaults.customer.timezone'));
$this->assertEquals('RUB', $sut->find('defaults.customer.currency')); self::assertEquals('RUB', $sut->find('defaults.customer.currency'));
$this->assertTrue($sut->find('timesheet.rules.allow_future_times')); self::assertTrue($sut->find('timesheet.rules.allow_future_times'));
$this->assertEquals(7, $sut->find('timesheet.active_entries.hard_limit')); self::assertEquals(7, $sut->find('timesheet.active_entries.hard_limit'));
$this->assertFalse($sut->isSamlActive()); self::assertFalse($sut->isSamlActive());
} }
public function testDefaultWithMixedConfigs(): void public function testDefaultWithMixedConfigs(): void
@@ -158,11 +158,11 @@ class SystemConfigurationTest extends TestCase
(new Configuration())->setName('theme.color_choices')->setValue(''), (new Configuration())->setName('theme.color_choices')->setValue(''),
(new Configuration())->setName('company.financial_year')->setValue('2020-03-27'), (new Configuration())->setName('company.financial_year')->setValue('2020-03-27'),
]); ]);
$this->assertFalse($sut->find('timesheet.rules.allow_future_times')); self::assertFalse($sut->find('timesheet.rules.allow_future_times'));
$this->assertTrue($sut->isSamlActive()); self::assertTrue($sut->isSamlActive());
$this->assertEquals('Silver|#c0c0c0', $sut->getThemeColorChoices()); self::assertEquals('Silver|#c0c0c0', $sut->getThemeColorChoices());
$this->assertEquals(['Silver' => '#c0c0c0'], $sut->getThemeColors()); self::assertEquals(['Silver' => '#c0c0c0'], $sut->getThemeColors());
$this->assertEquals('2020-03-27', $sut->getFinancialYearStart()); self::assertEquals('2020-03-27', $sut->getFinancialYearStart());
} }
public function testUnknownConfigs(): void public function testUnknownConfigs(): void
@@ -170,100 +170,100 @@ class SystemConfigurationTest extends TestCase
$sut = $this->getSut($this->getDefaultSettings(), [ $sut = $this->getSut($this->getDefaultSettings(), [
(new Configuration())->setName('timesheet.foo')->setValue('hello'), (new Configuration())->setName('timesheet.foo')->setValue('hello'),
]); ]);
$this->assertEquals('hello', $sut->find('timesheet.foo')); self::assertEquals('hello', $sut->find('timesheet.foo'));
$this->assertTrue($sut->has('timesheet.foo')); self::assertTrue($sut->has('timesheet.foo'));
$this->assertFalse($sut->has('timesheet.yyyyyyyyy')); self::assertFalse($sut->has('timesheet.yyyyyyyyy'));
$this->assertFalse($sut->has('xxxxxxxx.yyyyyyyyy')); self::assertFalse($sut->has('xxxxxxxx.yyyyyyyyy'));
$this->assertNull($sut->find('xxxxxxxx.yyyyyyyyy')); self::assertNull($sut->find('xxxxxxxx.yyyyyyyyy'));
$sut->set('xxxxxxxx.yyyyyyyyy', 'foooo-bar!'); $sut->set('xxxxxxxx.yyyyyyyyy', 'foooo-bar!');
$this->assertTrue($sut->has('xxxxxxxx.yyyyyyyyy')); self::assertTrue($sut->has('xxxxxxxx.yyyyyyyyy'));
$this->assertEquals('foooo-bar!', $sut->find('xxxxxxxx.yyyyyyyyy')); self::assertEquals('foooo-bar!', $sut->find('xxxxxxxx.yyyyyyyyy'));
} }
public function testCalendarWithoutLoader(): void public function testCalendarWithoutLoader(): void
{ {
$sut = $this->getSut($this->getDefaultSettings(), []); $sut = $this->getSut($this->getDefaultSettings(), []);
$this->assertEquals('07:49', $sut->getCalendarBusinessTimeBegin()); self::assertEquals('07:49', $sut->getCalendarBusinessTimeBegin());
$this->assertEquals('19:27', $sut->getCalendarBusinessTimeEnd()); self::assertEquals('19:27', $sut->getCalendarBusinessTimeEnd());
$this->assertEquals('06:00:00', $sut->getCalendarTimeframeBegin()); self::assertEquals('06:00:00', $sut->getCalendarTimeframeBegin());
$this->assertEquals('21:00:43', $sut->getCalendarTimeframeEnd()); self::assertEquals('21:00:43', $sut->getCalendarTimeframeEnd());
$this->assertEquals('01:11:00', $sut->getCalendarSlotDuration()); self::assertEquals('01:11:00', $sut->getCalendarSlotDuration());
$this->assertEquals(20, $sut->getCalendarDayLimit()); self::assertEquals(20, $sut->getCalendarDayLimit());
$this->assertFalse($sut->isCalendarShowWeekNumbers()); self::assertFalse($sut->isCalendarShowWeekNumbers());
$this->assertTrue($sut->isCalendarShowWeekends()); self::assertTrue($sut->isCalendarShowWeekends());
$this->assertEquals('wertwertwegsdfbdf243w567fg8ihuon', $sut->getCalendarGoogleApiKey()); self::assertEquals('wertwertwegsdfbdf243w567fg8ihuon', $sut->getCalendarGoogleApiKey());
$sources = $sut->getCalendarGoogleSources(); $sources = $sut->getCalendarGoogleSources();
$this->assertEquals(2, \count($sources)); self::assertEquals(2, \count($sources));
} }
public function testCalendarWithLoader(): void public function testCalendarWithLoader(): void
{ {
$sut = $this->getSut($this->getDefaultSettings(), $this->getDefaultLoaderSettings()); $sut = $this->getSut($this->getDefaultSettings(), $this->getDefaultLoaderSettings());
$this->assertEquals('00:30:00', $sut->getCalendarSlotDuration()); self::assertEquals('00:30:00', $sut->getCalendarSlotDuration());
$sources = $sut->getCalendarGoogleSources(); $sources = $sut->getCalendarGoogleSources();
$this->assertEquals(2, \count($sources)); self::assertEquals(2, \count($sources));
} }
public function testFormDefaultWithoutLoader(): void public function testFormDefaultWithoutLoader(): void
{ {
$sut = $this->getSut($this->getDefaultSettings(), []); $sut = $this->getSut($this->getDefaultSettings(), []);
$this->assertEquals('Europe/London', $sut->getCustomerDefaultTimezone()); self::assertEquals('Europe/London', $sut->getCustomerDefaultTimezone());
$this->assertEquals('GBP', $sut->getCustomerDefaultCurrency()); self::assertEquals('GBP', $sut->getCustomerDefaultCurrency());
$this->assertEquals('FR', $sut->getCustomerDefaultCountry()); self::assertEquals('FR', $sut->getCustomerDefaultCountry());
$this->assertEquals('foo/bar', $sut->getUserDefaultTimezone()); self::assertEquals('foo/bar', $sut->getUserDefaultTimezone());
$this->assertEquals('blue', $sut->getUserDefaultTheme()); self::assertEquals('blue', $sut->getUserDefaultTheme());
$this->assertEquals('IT', $sut->getUserDefaultLanguage()); self::assertEquals('IT', $sut->getUserDefaultLanguage());
$this->assertEquals('USD', $sut->getUserDefaultCurrency()); self::assertEquals('USD', $sut->getUserDefaultCurrency());
$this->assertNull($sut->getFinancialYearStart()); self::assertNull($sut->getFinancialYearStart());
} }
public function testFormDefaultWithLoader(): void public function testFormDefaultWithLoader(): void
{ {
$sut = $this->getSut($this->getDefaultSettings(), $this->getDefaultLoaderSettings()); $sut = $this->getSut($this->getDefaultSettings(), $this->getDefaultLoaderSettings());
$this->assertEquals('Russia/Moscov', $sut->getCustomerDefaultTimezone()); self::assertEquals('Russia/Moscov', $sut->getCustomerDefaultTimezone());
$this->assertEquals('RUB', $sut->getCustomerDefaultCurrency()); self::assertEquals('RUB', $sut->getCustomerDefaultCurrency());
$this->assertEquals('FR', $sut->getCustomerDefaultCountry()); self::assertEquals('FR', $sut->getCustomerDefaultCountry());
$this->assertEquals('foo/bar', $sut->getUserDefaultTimezone()); self::assertEquals('foo/bar', $sut->getUserDefaultTimezone());
$this->assertEquals('blue', $sut->getUserDefaultTheme()); self::assertEquals('blue', $sut->getUserDefaultTheme());
$this->assertEquals('IT', $sut->getUserDefaultLanguage()); self::assertEquals('IT', $sut->getUserDefaultLanguage());
$this->assertEquals('USD', $sut->getUserDefaultCurrency()); self::assertEquals('USD', $sut->getUserDefaultCurrency());
} }
public function testTimesheetWithoutLoader(): void public function testTimesheetWithoutLoader(): void
{ {
$sut = $this->getSut($this->getDefaultSettings(), []); $sut = $this->getSut($this->getDefaultSettings(), []);
$this->assertEquals(99, $sut->getTimesheetActiveEntriesHardLimit()); self::assertEquals(99, $sut->getTimesheetActiveEntriesHardLimit());
$this->assertFalse($sut->isTimesheetAllowFutureTimes()); self::assertFalse($sut->isTimesheetAllowFutureTimes());
$this->assertFalse($sut->isTimesheetMarkdownEnabled()); self::assertFalse($sut->isTimesheetMarkdownEnabled());
$this->assertEquals('punch', $sut->getTimesheetTrackingMode()); self::assertEquals('punch', $sut->getTimesheetTrackingMode());
$this->assertEquals('now', $sut->getTimesheetDefaultBeginTime()); self::assertEquals('now', $sut->getTimesheetDefaultBeginTime());
$this->assertEquals('', $sut->isTimesheetAllowOverlappingRecords()); self::assertEquals('', $sut->isTimesheetAllowOverlappingRecords());
$this->assertEquals('', $sut->getTimesheetDefaultRoundingDays()); self::assertEquals('', $sut->getTimesheetDefaultRoundingDays());
$this->assertEquals('', $sut->getTimesheetDefaultRoundingMode()); self::assertEquals('', $sut->getTimesheetDefaultRoundingMode());
$this->assertEquals(0, $sut->getTimesheetDefaultRoundingDuration()); self::assertEquals(0, $sut->getTimesheetDefaultRoundingDuration());
$this->assertEquals(0, $sut->getTimesheetDefaultRoundingEnd()); self::assertEquals(0, $sut->getTimesheetDefaultRoundingEnd());
$this->assertEquals(0, $sut->getTimesheetDefaultRoundingBegin()); self::assertEquals(0, $sut->getTimesheetDefaultRoundingBegin());
$this->assertEquals(10, $sut->getTimesheetIncrementDuration()); self::assertEquals(10, $sut->getTimesheetIncrementDuration());
$this->assertEquals(5, $sut->getTimesheetIncrementMinutes()); self::assertEquals(5, $sut->getTimesheetIncrementMinutes());
} }
public function testTimesheetWithLoader(): void public function testTimesheetWithLoader(): void
{ {
$sut = $this->getSut($this->getDefaultSettings(), $this->getDefaultLoaderSettings()); $sut = $this->getSut($this->getDefaultSettings(), $this->getDefaultLoaderSettings());
$this->assertEquals(7, $sut->getTimesheetActiveEntriesHardLimit()); self::assertEquals(7, $sut->getTimesheetActiveEntriesHardLimit());
$this->assertTrue($sut->isTimesheetAllowFutureTimes()); self::assertTrue($sut->isTimesheetAllowFutureTimes());
$this->assertTrue($sut->isTimesheetMarkdownEnabled()); self::assertTrue($sut->isTimesheetMarkdownEnabled());
$this->assertEquals('default', $sut->getTimesheetTrackingMode()); self::assertEquals('default', $sut->getTimesheetTrackingMode());
$this->assertEquals('07:00', $sut->getTimesheetDefaultBeginTime()); self::assertEquals('07:00', $sut->getTimesheetDefaultBeginTime());
$this->assertEquals('', $sut->isTimesheetAllowOverlappingRecords()); self::assertEquals('', $sut->isTimesheetAllowOverlappingRecords());
$this->assertEquals('', $sut->getTimesheetDefaultRoundingDays()); self::assertEquals('', $sut->getTimesheetDefaultRoundingDays());
$this->assertEquals('', $sut->getTimesheetDefaultRoundingMode()); self::assertEquals('', $sut->getTimesheetDefaultRoundingMode());
$this->assertEquals(0, $sut->getTimesheetDefaultRoundingDuration()); self::assertEquals(0, $sut->getTimesheetDefaultRoundingDuration());
$this->assertEquals(0, $sut->getTimesheetDefaultRoundingEnd()); self::assertEquals(0, $sut->getTimesheetDefaultRoundingEnd());
$this->assertEquals(0, $sut->getTimesheetDefaultRoundingBegin()); self::assertEquals(0, $sut->getTimesheetDefaultRoundingBegin());
$this->assertEquals(10, $sut->getTimesheetIncrementDuration()); self::assertEquals(10, $sut->getTimesheetIncrementDuration());
$this->assertEquals(5, $sut->getTimesheetIncrementMinutes()); self::assertEquals(5, $sut->getTimesheetIncrementMinutes());
} }
} }

View File

@@ -14,7 +14,7 @@ use App\Entity\User;
/** /**
* @group integration * @group integration
*/ */
class AboutControllerTest extends ControllerBaseTest class AboutControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIndexAction(): void public function testIndexAction(): void
{ {

View File

@@ -34,7 +34,7 @@ use Symfony\Component\Security\Csrf\CsrfTokenManager;
/** /**
* ControllerBaseTest adds some useful functions for writing integration tests. * ControllerBaseTest adds some useful functions for writing integration tests.
*/ */
abstract class ControllerBaseTest extends WebTestCase abstract class AbstractControllerBaseTestCase extends WebTestCase
{ {
use KernelTestTrait; use KernelTestTrait;
@@ -155,6 +155,9 @@ abstract class ControllerBaseTest extends WebTestCase
return $client; return $client;
} }
/**
* @return non-empty-string
*/
protected function createUrl(string $url): string protected function createUrl(string $url): string
{ {
$prefix = '/' . self::DEFAULT_LANGUAGE; $prefix = '/' . self::DEFAULT_LANGUAGE;
@@ -404,10 +407,6 @@ abstract class ControllerBaseTest extends WebTestCase
} }
} }
/**
* @param HttpKernelBrowser $client
* @param string $url
*/
protected function assertIsRedirect(HttpKernelBrowser $client, ?string $url = null, bool $endsWith = true): void protected function assertIsRedirect(HttpKernelBrowser $client, ?string $url = null, bool $endsWith = true): void
{ {
self::assertResponseRedirects(); self::assertResponseRedirects();
@@ -431,7 +430,7 @@ abstract class ControllerBaseTest extends WebTestCase
self::assertStringContainsString($expectedMeta, $client->getResponse()->getContent()); self::assertStringContainsString($expectedMeta, $client->getResponse()->getContent());
if ($url !== null) { if ($url !== null) {
if ($endsWith) { if ($endsWith && $url !== '') {
self::assertStringEndsWith($url, $location, 'Redirect URL does not match'); self::assertStringEndsWith($url, $location, 'Redirect URL does not match');
} else { } else {
self::assertStringContainsString($url, $location, 'Redirect URL does not match'); self::assertStringContainsString($url, $location, 'Redirect URL does not match');
@@ -447,7 +446,7 @@ abstract class ControllerBaseTest extends WebTestCase
$location = $client->getResponse()->headers->get('Location'); $location = $client->getResponse()->headers->get('Location');
self::assertNotNull($location); self::assertNotNull($location);
if ($endsWith) { if ($endsWith && $url !== '') {
self::assertStringEndsWith($url, $location, 'Redirect URL does not match'); self::assertStringEndsWith($url, $location, 'Redirect URL does not match');
} else { } else {
self::assertStringContainsString($url, $location, 'Redirect URL does not match'); self::assertStringContainsString($url, $location, 'Redirect URL does not match');

View File

@@ -26,7 +26,7 @@ use Symfony\Component\HttpKernel\HttpKernelBrowser;
/** /**
* @group integration * @group integration
*/ */
class ActivityControllerTest extends ControllerBaseTest class ActivityControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -88,7 +88,7 @@ class ActivityControllerTest extends ControllerBaseTest
'page' => 1, 'page' => 1,
]); ]);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasDataTable($client); $this->assertHasDataTable($client);
$this->assertDataTableRowCount($client, 'datatable_activity_admin', 5); $this->assertDataTableRowCount($client, 'datatable_activity_admin', 5);
} }
@@ -215,7 +215,7 @@ class ActivityControllerTest extends ControllerBaseTest
$this->request($client, '/admin/activity/' . $id . '/edit'); $this->request($client, '/admin/activity/' . $id . '/edit');
$editForm = $client->getCrawler()->filter('form[name=activity_edit_form]')->form(); $editForm = $client->getCrawler()->filter('form[name=activity_edit_form]')->form();
$this->assertEquals('An AcTiVitY Name', $editForm->get('activity_edit_form[name]')->getValue()); self::assertEquals('An AcTiVitY Name', $editForm->get('activity_edit_form[name]')->getValue());
} }
public function testCreateActionShowsMetaFields(): void public function testCreateActionShowsMetaFields(): void
@@ -225,12 +225,12 @@ class ActivityControllerTest extends ControllerBaseTest
static::assertInstanceOf(EventDispatcher::class, $eventDispatcher); static::assertInstanceOf(EventDispatcher::class, $eventDispatcher);
$eventDispatcher->addSubscriber(new ActivityTestMetaFieldSubscriberMock()); $eventDispatcher->addSubscriber(new ActivityTestMetaFieldSubscriberMock());
$this->assertAccessIsGranted($client, '/admin/activity/create'); $this->assertAccessIsGranted($client, '/admin/activity/create');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=activity_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=activity_edit_form]')->form();
$this->assertTrue($form->has('activity_edit_form[metaFields][metatestmock][value]')); self::assertTrue($form->has('activity_edit_form[metaFields][metatestmock][value]'));
$this->assertTrue($form->has('activity_edit_form[metaFields][foobar][value]')); self::assertTrue($form->has('activity_edit_form[metaFields][foobar][value]'));
$this->assertFalse($form->has('activity_edit_form[metaFields][0][value]')); self::assertFalse($form->has('activity_edit_form[metaFields][0][value]'));
} }
public function testEditAction(): void public function testEditAction(): void
@@ -238,7 +238,7 @@ class ActivityControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$this->assertAccessIsGranted($client, '/admin/activity/1/edit'); $this->assertAccessIsGranted($client, '/admin/activity/1/edit');
$form = $client->getCrawler()->filter('form[name=activity_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=activity_edit_form]')->form();
$this->assertEquals('Test', $form->get('activity_edit_form[name]')->getValue()); self::assertEquals('Test', $form->get('activity_edit_form[name]')->getValue());
$client->submit($form, [ $client->submit($form, [
'activity_edit_form' => ['name' => 'Test 2'] 'activity_edit_form' => ['name' => 'Test 2']
]); ]);
@@ -246,7 +246,7 @@ class ActivityControllerTest extends ControllerBaseTest
$client->followRedirect(); $client->followRedirect();
$this->request($client, '/admin/activity/1/edit'); $this->request($client, '/admin/activity/1/edit');
$editForm = $client->getCrawler()->filter('form[name=activity_edit_form]')->form(); $editForm = $client->getCrawler()->filter('form[name=activity_edit_form]')->form();
$this->assertEquals('Test 2', $editForm->get('activity_edit_form[name]')->getValue()); self::assertEquals('Test 2', $editForm->get('activity_edit_form[name]')->getValue());
} }
public function testEditActionForGlobalActivity(): void public function testEditActionForGlobalActivity(): void
@@ -254,7 +254,7 @@ class ActivityControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$this->assertAccessIsGranted($client, '/admin/activity/1/edit'); $this->assertAccessIsGranted($client, '/admin/activity/1/edit');
$form = $client->getCrawler()->filter('form[name=activity_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=activity_edit_form]')->form();
$this->assertEquals('Test', $form->get('activity_edit_form[name]')->getValue()); self::assertEquals('Test', $form->get('activity_edit_form[name]')->getValue());
$client->submit($form, [ $client->submit($form, [
'activity_edit_form' => ['name' => 'Test 2'] 'activity_edit_form' => ['name' => 'Test 2']
]); ]);
@@ -262,7 +262,7 @@ class ActivityControllerTest extends ControllerBaseTest
$client->followRedirect(); $client->followRedirect();
$this->request($client, '/admin/activity/1/edit'); $this->request($client, '/admin/activity/1/edit');
$editForm = $client->getCrawler()->filter('form[name=activity_edit_form]')->form(); $editForm = $client->getCrawler()->filter('form[name=activity_edit_form]')->form();
$this->assertEquals('Test 2', $editForm->get('activity_edit_form[name]')->getValue()); self::assertEquals('Test 2', $editForm->get('activity_edit_form[name]')->getValue());
} }
public function testTeamPermissionAction(): void public function testTeamPermissionAction(): void
@@ -317,13 +317,13 @@ class ActivityControllerTest extends ControllerBaseTest
{ {
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$this->request($client, '/admin/activity/1/edit'); $this->request($client, '/admin/activity/1/edit');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->request($client, '/admin/activity/1/delete'); $this->request($client, '/admin/activity/1/delete');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=form]')->form(); $form = $client->getCrawler()->filter('form[name=form]')->form();
$this->assertStringEndsWith($this->createUrl('/admin/activity/1/delete'), $form->getUri()); self::assertStringEndsWith($this->createUrl('/admin/activity/1/delete'), $form->getUri());
$client->submit($form); $client->submit($form);
$client->followRedirect(); $client->followRedirect();
@@ -331,7 +331,7 @@ class ActivityControllerTest extends ControllerBaseTest
$this->assertHasNoEntriesWithFilter($client); $this->assertHasNoEntriesWithFilter($client);
$this->request($client, '/admin/activity/1/edit'); $this->request($client, '/admin/activity/1/edit');
$this->assertFalse($client->getResponse()->isSuccessful()); self::assertFalse($client->getResponse()->isSuccessful());
} }
public function testDeleteActionWithTimesheetEntries(): void public function testDeleteActionWithTimesheetEntries(): void
@@ -347,18 +347,18 @@ class ActivityControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$timesheets = $em->getRepository(Timesheet::class)->findAll(); $timesheets = $em->getRepository(Timesheet::class)->findAll();
$this->assertEquals(10, \count($timesheets)); self::assertEquals(10, \count($timesheets));
/** @var Timesheet $entry */ /** @var Timesheet $entry */
foreach ($timesheets as $entry) { foreach ($timesheets as $entry) {
$this->assertEquals(1, $entry->getActivity()->getId()); self::assertEquals(1, $entry->getActivity()->getId());
} }
$this->request($client, '/admin/activity/1/delete'); $this->request($client, '/admin/activity/1/delete');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=form]')->form(); $form = $client->getCrawler()->filter('form[name=form]')->form();
$this->assertStringEndsWith($this->createUrl('/admin/activity/1/delete'), $form->getUri()); self::assertStringEndsWith($this->createUrl('/admin/activity/1/delete'), $form->getUri());
$client->submit($form); $client->submit($form);
$this->assertIsRedirect($client, $this->createUrl('/admin/activity/')); $this->assertIsRedirect($client, $this->createUrl('/admin/activity/'));
@@ -368,10 +368,10 @@ class ActivityControllerTest extends ControllerBaseTest
$em->clear(); $em->clear();
$timesheets = $em->getRepository(Timesheet::class)->findAll(); $timesheets = $em->getRepository(Timesheet::class)->findAll();
$this->assertEquals(0, \count($timesheets)); self::assertEquals(0, \count($timesheets));
$this->request($client, '/admin/activity/1/edit'); $this->request($client, '/admin/activity/1/edit');
$this->assertFalse($client->getResponse()->isSuccessful()); self::assertFalse($client->getResponse()->isSuccessful());
} }
public function testDeleteActionWithTimesheetEntriesAndReplacement(): void public function testDeleteActionWithTimesheetEntriesAndReplacement(): void
@@ -392,18 +392,18 @@ class ActivityControllerTest extends ControllerBaseTest
$id = $activity->getId(); $id = $activity->getId();
$timesheets = $em->getRepository(Timesheet::class)->findAll(); $timesheets = $em->getRepository(Timesheet::class)->findAll();
$this->assertEquals(10, \count($timesheets)); self::assertEquals(10, \count($timesheets));
/** @var Timesheet $entry */ /** @var Timesheet $entry */
foreach ($timesheets as $entry) { foreach ($timesheets as $entry) {
$this->assertEquals(1, $entry->getActivity()->getId()); self::assertEquals(1, $entry->getActivity()->getId());
} }
$this->request($client, '/admin/activity/1/delete'); $this->request($client, '/admin/activity/1/delete');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=form]')->form(); $form = $client->getCrawler()->filter('form[name=form]')->form();
$this->assertStringEndsWith($this->createUrl('/admin/activity/1/delete'), $form->getUri()); self::assertStringEndsWith($this->createUrl('/admin/activity/1/delete'), $form->getUri());
$client->submit($form, [ $client->submit($form, [
'form' => [ 'form' => [
'activity' => $id 'activity' => $id
@@ -416,15 +416,15 @@ class ActivityControllerTest extends ControllerBaseTest
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$timesheets = $em->getRepository(Timesheet::class)->findAll(); $timesheets = $em->getRepository(Timesheet::class)->findAll();
$this->assertEquals(10, \count($timesheets)); self::assertEquals(10, \count($timesheets));
/** @var Timesheet $entry */ /** @var Timesheet $entry */
foreach ($timesheets as $entry) { foreach ($timesheets as $entry) {
$this->assertEquals($id, $entry->getActivity()->getId()); self::assertEquals($id, $entry->getActivity()->getId());
} }
$this->request($client, '/admin/activity/1/edit'); $this->request($client, '/admin/activity/1/edit');
$this->assertFalse($client->getResponse()->isSuccessful()); self::assertFalse($client->getResponse()->isSuccessful());
} }
/** /**
@@ -441,7 +441,7 @@ class ActivityControllerTest extends ControllerBaseTest
); );
} }
public function getValidationTestData() public static function getValidationTestData()
{ {
return [ return [
[ [

View File

@@ -18,7 +18,7 @@ use App\Tests\Mocks\SystemConfigurationFactory;
/** /**
* @group integration * @group integration
*/ */
class CalendarControllerTest extends ControllerBaseTest class CalendarControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -33,13 +33,13 @@ class CalendarControllerTest extends ControllerBaseTest
$this->importFixture($fixtures); $this->importFixture($fixtures);
$this->request($client, '/calendar/'); $this->request($client, '/calendar/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$crawler = $client->getCrawler(); $crawler = $client->getCrawler();
$calendar = $crawler->filter('div#timesheet_calendar'); $calendar = $crawler->filter('div#timesheet_calendar');
$this->assertEquals(1, $calendar->count()); self::assertEquals(1, $calendar->count());
$dragAndDropBoxes = $crawler->filter('div.card-body.drag-and-drop-source'); $dragAndDropBoxes = $crawler->filter('div.card-body.drag-and-drop-source');
$this->assertEquals(1, $dragAndDropBoxes->count()); self::assertEquals(1, $dragAndDropBoxes->count());
} }
public function testCalendarActionAsSuperAdmin(): void public function testCalendarActionAsSuperAdmin(): void
@@ -60,13 +60,13 @@ class CalendarControllerTest extends ControllerBaseTest
$crawler = $client->getCrawler(); $crawler = $client->getCrawler();
$calendar = $crawler->filter('div#timesheet_calendar'); $calendar = $crawler->filter('div#timesheet_calendar');
$this->assertEquals(1, $calendar->count()); self::assertEquals(1, $calendar->count());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertStringContainsString("googleCalendarId: 'de.german#holiday@group.v.calendar.google.com',", $content); self::assertStringContainsString("googleCalendarId: 'de.german#holiday@group.v.calendar.google.com',", $content);
$this->assertStringContainsString("name: 'holidays'", $content); self::assertStringContainsString("name: 'holidays'", $content);
$this->assertStringContainsString("googleCalendarId: 'en.german#holiday@group.v.calendar.google.com',", $content); self::assertStringContainsString("googleCalendarId: 'en.german#holiday@group.v.calendar.google.com',", $content);
$this->assertStringContainsString("name: 'holidays_en'", $content); self::assertStringContainsString("name: 'holidays_en'", $content);
} }
protected function getDefaultSettings(): array protected function getDefaultSettings(): array

View File

@@ -14,7 +14,7 @@ use App\Entity\User;
/** /**
* @group integration * @group integration
*/ */
class ContractControllerTest extends ControllerBaseTest class ContractControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {

View File

@@ -27,7 +27,7 @@ use Symfony\Component\HttpKernel\HttpKernelBrowser;
/** /**
* @group integration * @group integration
*/ */
class CustomerControllerTest extends ControllerBaseTest class CustomerControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -91,7 +91,7 @@ class CustomerControllerTest extends ControllerBaseTest
'page' => 1, 'page' => 1,
]); ]);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasDataTable($client); $this->assertHasDataTable($client);
$this->assertDataTableRowCount($client, 'datatable_customer_admin', 5); $this->assertDataTableRowCount($client, 'datatable_customer_admin', 5);
} }
@@ -113,7 +113,7 @@ class CustomerControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_TEAMLEAD); $client = $this->getClientForAuthenticatedUser(User::ROLE_TEAMLEAD);
$this->request($client, '/admin/customer/'); $this->request($client, '/admin/customer/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form.searchform')->form(); $form = $client->getCrawler()->filter('form.searchform')->form();
$form->getFormNode()->setAttribute('action', $this->createUrl('/admin/customer/export')); $form->getFormNode()->setAttribute('action', $this->createUrl('/admin/customer/export'));
@@ -318,7 +318,7 @@ class CustomerControllerTest extends ControllerBaseTest
$form = $client->getCrawler()->filter('form[name=customer_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=customer_edit_form]')->form();
$editForm = $client->getCrawler()->filter('form[name=customer_edit_form]')->form(); $editForm = $client->getCrawler()->filter('form[name=customer_edit_form]')->form();
$this->assertEquals(date_default_timezone_get(), $editForm->get('customer_edit_form[timezone]')->getValue()); self::assertEquals(date_default_timezone_get(), $editForm->get('customer_edit_form[timezone]')->getValue());
$client->submit($form, [ $client->submit($form, [
'customer_edit_form' => [ 'customer_edit_form' => [
@@ -340,12 +340,12 @@ class CustomerControllerTest extends ControllerBaseTest
$dispatcher = self::getContainer()->get('event_dispatcher'); $dispatcher = self::getContainer()->get('event_dispatcher');
$dispatcher->addSubscriber(new CustomerTestMetaFieldSubscriberMock()); $dispatcher->addSubscriber(new CustomerTestMetaFieldSubscriberMock());
$this->assertAccessIsGranted($client, '/admin/customer/create'); $this->assertAccessIsGranted($client, '/admin/customer/create');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=customer_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=customer_edit_form]')->form();
$this->assertTrue($form->has('customer_edit_form[metaFields][metatestmock][value]')); self::assertTrue($form->has('customer_edit_form[metaFields][metatestmock][value]'));
$this->assertTrue($form->has('customer_edit_form[metaFields][foobar][value]')); self::assertTrue($form->has('customer_edit_form[metaFields][foobar][value]'));
$this->assertFalse($form->has('customer_edit_form[metaFields][0][value]')); self::assertFalse($form->has('customer_edit_form[metaFields][0][value]'));
} }
public function testEditAction(): void public function testEditAction(): void
@@ -353,7 +353,7 @@ class CustomerControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$this->assertAccessIsGranted($client, '/admin/customer/1/edit'); $this->assertAccessIsGranted($client, '/admin/customer/1/edit');
$form = $client->getCrawler()->filter('form[name=customer_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=customer_edit_form]')->form();
$this->assertEquals('Test', $form->get('customer_edit_form[name]')->getValue()); self::assertEquals('Test', $form->get('customer_edit_form[name]')->getValue());
$client->submit($form, [ $client->submit($form, [
'customer_edit_form' => [ 'customer_edit_form' => [
'name' => 'Test Customer 2' 'name' => 'Test Customer 2'
@@ -363,7 +363,7 @@ class CustomerControllerTest extends ControllerBaseTest
$client->followRedirect(); $client->followRedirect();
$this->request($client, '/admin/customer/1/edit'); $this->request($client, '/admin/customer/1/edit');
$editForm = $client->getCrawler()->filter('form[name=customer_edit_form]')->form(); $editForm = $client->getCrawler()->filter('form[name=customer_edit_form]')->form();
$this->assertEquals('Test Customer 2', $editForm->get('customer_edit_form[name]')->getValue()); self::assertEquals('Test Customer 2', $editForm->get('customer_edit_form[name]')->getValue());
} }
public function testTeamPermissionAction(): void public function testTeamPermissionAction(): void
@@ -408,12 +408,12 @@ class CustomerControllerTest extends ControllerBaseTest
$id = $customer->getId(); $id = $customer->getId();
$this->request($client, '/admin/customer/' . $id . '/edit'); $this->request($client, '/admin/customer/' . $id . '/edit');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->request($client, '/admin/customer/' . $id . '/delete'); $this->request($client, '/admin/customer/' . $id . '/delete');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=form]')->form(); $form = $client->getCrawler()->filter('form[name=form]')->form();
$this->assertStringEndsWith($this->createUrl('/admin/customer/' . $id . '/delete'), $form->getUri()); self::assertStringEndsWith($this->createUrl('/admin/customer/' . $id . '/delete'), $form->getUri());
$client->submit($form); $client->submit($form);
$client->followRedirect(); $client->followRedirect();
@@ -421,7 +421,7 @@ class CustomerControllerTest extends ControllerBaseTest
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$this->request($client, '/admin/customer/' . $id . '/edit'); $this->request($client, '/admin/customer/' . $id . '/edit');
$this->assertFalse($client->getResponse()->isSuccessful()); self::assertFalse($client->getResponse()->isSuccessful());
} }
public function testDeleteActionWithTimesheetEntries(): void public function testDeleteActionWithTimesheetEntries(): void
@@ -435,18 +435,18 @@ class CustomerControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$timesheets = $em->getRepository(Timesheet::class)->findAll(); $timesheets = $em->getRepository(Timesheet::class)->findAll();
$this->assertEquals(10, \count($timesheets)); self::assertEquals(10, \count($timesheets));
/** @var Timesheet $entry */ /** @var Timesheet $entry */
foreach ($timesheets as $entry) { foreach ($timesheets as $entry) {
$this->assertEquals(1, $entry->getActivity()->getId()); self::assertEquals(1, $entry->getActivity()->getId());
} }
$this->request($client, '/admin/customer/1/delete'); $this->request($client, '/admin/customer/1/delete');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=form]')->form(); $form = $client->getCrawler()->filter('form[name=form]')->form();
$this->assertStringEndsWith($this->createUrl('/admin/customer/1/delete'), $form->getUri()); self::assertStringEndsWith($this->createUrl('/admin/customer/1/delete'), $form->getUri());
$client->submit($form); $client->submit($form);
$this->assertIsRedirect($client, $this->createUrl('/admin/customer/')); $this->assertIsRedirect($client, $this->createUrl('/admin/customer/'));
@@ -456,10 +456,10 @@ class CustomerControllerTest extends ControllerBaseTest
$em->clear(); $em->clear();
$timesheets = $em->getRepository(Timesheet::class)->findAll(); $timesheets = $em->getRepository(Timesheet::class)->findAll();
$this->assertEquals(0, \count($timesheets)); self::assertEquals(0, \count($timesheets));
$this->request($client, '/admin/customer/1/edit'); $this->request($client, '/admin/customer/1/edit');
$this->assertFalse($client->getResponse()->isSuccessful()); self::assertFalse($client->getResponse()->isSuccessful());
} }
public function testDeleteActionWithTimesheetEntriesAndReplacement(): void public function testDeleteActionWithTimesheetEntriesAndReplacement(): void
@@ -478,18 +478,18 @@ class CustomerControllerTest extends ControllerBaseTest
$id = $customer->getId(); $id = $customer->getId();
$timesheets = $em->getRepository(Timesheet::class)->findAll(); $timesheets = $em->getRepository(Timesheet::class)->findAll();
$this->assertEquals(10, \count($timesheets)); self::assertEquals(10, \count($timesheets));
/** @var Timesheet $entry */ /** @var Timesheet $entry */
foreach ($timesheets as $entry) { foreach ($timesheets as $entry) {
$this->assertEquals(1, $entry->getProject()->getCustomer()->getId()); self::assertEquals(1, $entry->getProject()->getCustomer()->getId());
} }
$this->request($client, '/admin/customer/1/delete'); $this->request($client, '/admin/customer/1/delete');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=form]')->form(); $form = $client->getCrawler()->filter('form[name=form]')->form();
$this->assertStringEndsWith($this->createUrl('/admin/customer/1/delete'), $form->getUri()); self::assertStringEndsWith($this->createUrl('/admin/customer/1/delete'), $form->getUri());
$client->submit($form, [ $client->submit($form, [
'form' => [ 'form' => [
'customer' => $id 'customer' => $id
@@ -502,15 +502,15 @@ class CustomerControllerTest extends ControllerBaseTest
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$timesheets = $em->getRepository(Timesheet::class)->findAll(); $timesheets = $em->getRepository(Timesheet::class)->findAll();
$this->assertEquals(10, \count($timesheets)); self::assertEquals(10, \count($timesheets));
/** @var Timesheet $entry */ /** @var Timesheet $entry */
foreach ($timesheets as $entry) { foreach ($timesheets as $entry) {
$this->assertEquals($id, $entry->getProject()->getCustomer()->getId()); self::assertEquals($id, $entry->getProject()->getCustomer()->getId());
} }
$this->request($client, '/admin/customer/1/edit'); $this->request($client, '/admin/customer/1/edit');
$this->assertFalse($client->getResponse()->isSuccessful()); self::assertFalse($client->getResponse()->isSuccessful());
} }
/** /**
@@ -527,7 +527,7 @@ class CustomerControllerTest extends ControllerBaseTest
); );
} }
public function getValidationTestData() public static function getValidationTestData()
{ {
return [ return [
[ [

View File

@@ -12,7 +12,7 @@ namespace App\Tests\Controller;
/** /**
* @group integration * @group integration
*/ */
class DashboardControllerTest extends ControllerBaseTest class DashboardControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -23,7 +23,7 @@ class DashboardControllerTest extends ControllerBaseTest
{ {
$client = $this->getClientForAuthenticatedUser(); $client = $this->getClientForAuthenticatedUser();
$this->request($client, '/dashboard/'); $this->request($client, '/dashboard/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertMainContentClass($client, 'dashboard'); $this->assertMainContentClass($client, 'dashboard');
self::assertEquals(1, $client->getCrawler()->filter('div#PaginatedWorkingTimeChartBox canvas')->count()); self::assertEquals(1, $client->getCrawler()->filter('div#PaginatedWorkingTimeChartBox canvas')->count());
} }

View File

@@ -14,7 +14,7 @@ use App\Entity\User;
/** /**
* @group integration * @group integration
*/ */
class DoctorControllerTest extends ControllerBaseTest class DoctorControllerTest extends AbstractControllerBaseTestCase
{ {
public function testDoctorIsSecure(): void public function testDoctorIsSecure(): void
{ {

View File

@@ -18,7 +18,7 @@ use Doctrine\ORM\EntityManager;
/** /**
* @group integration * @group integration
*/ */
class ExportControllerTest extends ControllerBaseTest class ExportControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -35,7 +35,7 @@ class ExportControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_TEAMLEAD); $client = $this->getClientForAuthenticatedUser(User::ROLE_TEAMLEAD);
$this->request($client, '/export/?performSearch=performSearch'); $this->request($client, '/export/?performSearch=performSearch');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasNoEntriesWithFilter($client); $this->assertHasNoEntriesWithFilter($client);
} }
@@ -83,7 +83,7 @@ class ExportControllerTest extends ControllerBaseTest
$em->flush(); $em->flush();
$this->request($client, '/export/?performSearch=performSearch'); $this->request($client, '/export/?performSearch=performSearch');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
// make sure all existing records are displayed // make sure all existing records are displayed
$this->assertHasDataTable($client); $this->assertHasDataTable($client);
@@ -106,7 +106,7 @@ class ExportControllerTest extends ControllerBaseTest
$type = $button->getAttribute('data-type'); $type = $button->getAttribute('data-type');
unset($expected[$type]); unset($expected[$type]);
} }
$this->assertEmpty($expected); self::assertEmpty($expected);
} }
public function testIndexActionWithEntriesForTeamleadDoesNotShowUserWithoutTeam(): void public function testIndexActionWithEntriesForTeamleadDoesNotShowUserWithoutTeam(): void
@@ -126,7 +126,7 @@ class ExportControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$this->request($client, '/export/?performSearch=performSearch'); $this->request($client, '/export/?performSearch=performSearch');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
// make sure existing records are not displayed // make sure existing records are not displayed
$this->assertHasNoEntriesWithFilter($client); $this->assertHasNoEntriesWithFilter($client);
@@ -142,7 +142,7 @@ class ExportControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$this->request($client, '/export/?performSearch=performSearch'); $this->request($client, '/export/?performSearch=performSearch');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
// make sure all existing records are displayed // make sure all existing records are displayed
$this->assertHasDataTable($client); $this->assertHasDataTable($client);
@@ -165,7 +165,7 @@ class ExportControllerTest extends ControllerBaseTest
$type = $button->getAttribute('data-type'); $type = $button->getAttribute('data-type');
unset($expected[$type]); unset($expected[$type]);
} }
$this->assertEmpty($expected); self::assertEmpty($expected);
} }
public function testExportActionWithMissingRenderer(): void public function testExportActionWithMissingRenderer(): void
@@ -180,7 +180,7 @@ class ExportControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_TEAMLEAD); $client = $this->getClientForAuthenticatedUser(User::ROLE_TEAMLEAD);
$this->request($client, '/export/', 'GET'); $this->request($client, '/export/', 'GET');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('#export-form')->form(); $form = $client->getCrawler()->filter('#export-form')->form();
$node = $form->getFormNode(); $node = $form->getFormNode();
@@ -210,7 +210,7 @@ class ExportControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$this->request($client, '/export/'); $this->request($client, '/export/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('#export-form')->form(); $form = $client->getCrawler()->filter('#export-form')->form();
$node = $form->getFormNode(); $node = $form->getFormNode();
@@ -224,26 +224,26 @@ class ExportControllerTest extends ControllerBaseTest
]); ]);
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertTrue($response->isSuccessful()); self::assertTrue($response->isSuccessful());
$content = $response->getContent(); $content = $response->getContent();
$node = $client->getCrawler()->filter('body'); $node = $client->getCrawler()->filter('body');
$this->assertEquals(1, $node->count()); self::assertEquals(1, $node->count());
// poor mans assertions ;-) // poor mans assertions ;-)
/** @var \DOMElement $element */ /** @var \DOMElement $element */
$element = $node->getIterator()[0]; $element = $node->getIterator()[0];
$this->assertStringContainsString('export_print', $element->getAttribute('class')); self::assertStringContainsString('export_print', $element->getAttribute('class'));
$this->assertStringContainsString('<h2 id="doc-title" contenteditable="true"', $content); self::assertStringContainsString('<h2 id="doc-title" contenteditable="true"', $content);
$this->assertStringContainsString('<h3 class="card-title" id="doc-summary" contenteditable="true" data-original="Summary">Summary</h3>', $content); self::assertStringContainsString('<h3 class="card-title" id="doc-summary" contenteditable="true" data-original="Summary">Summary</h3>', $content);
$node = $client->getCrawler()->filter('section.export div#export-records table.dataTable tbody tr'); $node = $client->getCrawler()->filter('section.export div#export-records table.dataTable tbody tr');
// 20 rows + the summary footer // 20 rows + the summary footer
$this->assertEquals(21, $node->count()); self::assertEquals(21, $node->count());
$timesheets = $em->getRepository(Timesheet::class)->findAll(); $timesheets = $em->getRepository(Timesheet::class)->findAll();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
foreach ($timesheets as $timesheet) { foreach ($timesheets as $timesheet) {
$this->assertTrue($timesheet->isExported()); self::assertTrue($timesheet->isExported());
} }
} }
} }

View File

@@ -15,7 +15,7 @@ use App\Tests\DataFixtures\TimesheetFixtures;
/** /**
* @group integration * @group integration
*/ */
class FavoriteControllerTest extends ControllerBaseTest class FavoriteControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -35,7 +35,7 @@ class FavoriteControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$this->request($client, '/favorite/timesheet/'); $this->request($client, '/favorite/timesheet/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
self::assertNotFalse($content); self::assertNotFalse($content);

View File

@@ -14,7 +14,7 @@ use App\Entity\User;
/** /**
* @group integration * @group integration
*/ */
class HelpControllerTest extends ControllerBaseTest class HelpControllerTest extends AbstractControllerBaseTestCase
{ {
public function testHelpLocalesAction(): void public function testHelpLocalesAction(): void
{ {

View File

@@ -16,7 +16,7 @@ use App\Form\Type\InitialViewType;
/** /**
* @group integration * @group integration
*/ */
class HomepageControllerTest extends ControllerBaseTest class HomepageControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {

View File

@@ -20,7 +20,7 @@ use Symfony\Component\HttpFoundation\BinaryFileResponse;
/** /**
* @group integration * @group integration
*/ */
class InvoiceControllerTest extends ControllerBaseTest class InvoiceControllerTest extends AbstractControllerBaseTestCase
{ {
protected function setUp(): void protected function setUp(): void
{ {
@@ -76,7 +76,7 @@ class InvoiceControllerTest extends ControllerBaseTest
$id = $templates[0]->getId(); $id = $templates[0]->getId();
$this->request($client, '/invoice/?customers[]=1&template=' . $id); $this->request($client, '/invoice/?customers[]=1&template=' . $id);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasNoEntriesWithFilter($client); $this->assertHasNoEntriesWithFilter($client);
} }
@@ -90,7 +90,7 @@ class InvoiceControllerTest extends ControllerBaseTest
$this->request($client, '/invoice/template'); $this->request($client, '/invoice/template');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasDataTable($client); $this->assertHasDataTable($client);
} }
@@ -98,7 +98,7 @@ class InvoiceControllerTest extends ControllerBaseTest
{ {
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$this->request($client, '/invoice/template/create'); $this->request($client, '/invoice/template/create');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=invoice_template_form]')->form(); $form = $client->getCrawler()->filter('form[name=invoice_template_form]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -114,7 +114,7 @@ class InvoiceControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/invoice/template')); $this->assertIsRedirect($client, $this->createUrl('/invoice/template'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$template = $this->getEntityManager()->getRepository(InvoiceTemplate::class)->findAll()[0]; $template = $this->getEntityManager()->getRepository(InvoiceTemplate::class)->findAll()[0];
@@ -136,19 +136,19 @@ class InvoiceControllerTest extends ControllerBaseTest
$template = $templates[0]; $template = $templates[0];
$this->request($client, '/invoice/template/create/' . $template->getId()); $this->request($client, '/invoice/template/create/' . $template->getId());
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=invoice_template_form]')->form(); $form = $client->getCrawler()->filter('form[name=invoice_template_form]')->form();
$values = $form->getPhpValues()['invoice_template_form']; $values = $form->getPhpValues()['invoice_template_form'];
$this->assertEquals($template->getName() . ' (1)', $values['name']); self::assertEquals($template->getName() . ' (1)', $values['name']);
$this->assertEquals($template->getTitle(), $values['title']); self::assertEquals($template->getTitle(), $values['title']);
$this->assertEquals($template->getDueDays(), $values['dueDays']); self::assertEquals($template->getDueDays(), $values['dueDays']);
$this->assertEquals($template->getCalculator(), $values['calculator']); self::assertEquals($template->getCalculator(), $values['calculator']);
$this->assertEquals($template->getVat(), $values['vat']); self::assertEquals($template->getVat(), $values['vat']);
$this->assertEquals($template->getRenderer(), $values['renderer']); self::assertEquals($template->getRenderer(), $values['renderer']);
$this->assertEquals($template->getCompany(), $values['company']); self::assertEquals($template->getCompany(), $values['company']);
$this->assertEquals($template->getAddress(), $values['address']); self::assertEquals($template->getAddress(), $values['address']);
$this->assertEquals($template->getPaymentTerms(), $values['paymentTerms']); self::assertEquals($template->getPaymentTerms(), $values['paymentTerms']);
} }
public function testCreateAction(): void public function testCreateAction(): void
@@ -170,11 +170,11 @@ class InvoiceControllerTest extends ControllerBaseTest
; ;
$timesheets = $this->importFixture($fixture); $timesheets = $this->importFixture($fixture);
foreach ($timesheets as $timesheet) { foreach ($timesheets as $timesheet) {
$this->assertFalse($timesheet->isExported()); self::assertFalse($timesheet->isExported());
} }
$this->request($client, '/invoice/'); $this->request($client, '/invoice/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$dateRange = $this->formatDateRange($begin, $end); $dateRange = $this->formatDateRange($begin, $end);
@@ -188,11 +188,11 @@ class InvoiceControllerTest extends ControllerBaseTest
'customers' => [1], 'customers' => [1],
]); ]);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
// no warning should be displayed // no warning should be displayed
$node = $client->getCrawler()->filter('div.callout.callout-warning.lead'); $node = $client->getCrawler()->filter('div.callout.callout-warning.lead');
$this->assertEquals(0, $node->count()); self::assertEquals(0, $node->count());
// but the datatable with all timesheets // but the datatable with all timesheets
$this->assertDataTableRowCount($client, 'datatable_invoice_create', 20); $this->assertDataTableRowCount($client, 'datatable_invoice_create', 20);
@@ -208,16 +208,16 @@ class InvoiceControllerTest extends ControllerBaseTest
$this->request($client, $action); $this->request($client, $action);
$this->assertIsRedirect($client, '/invoice/show?id=', false); $this->assertIsRedirect($client, '/invoice/show?id=', false);
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertDataTableRowCount($client, 'datatable_invoices', 1); $this->assertDataTableRowCount($client, 'datatable_invoices', 1);
$em = $this->getEntityManager(); $em = $this->getEntityManager();
$em->clear(); $em->clear();
$timesheets = $em->getRepository(Timesheet::class)->findAll(); $timesheets = $em->getRepository(Timesheet::class)->findAll();
$this->assertCount(20, $timesheets); self::assertCount(20, $timesheets);
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
foreach ($timesheets as $timesheet) { foreach ($timesheets as $timesheet) {
$this->assertTrue($timesheet->isExported()); self::assertTrue($timesheet->isExported());
} }
} }
@@ -240,7 +240,7 @@ class InvoiceControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$this->request($client, '/invoice/'); $this->request($client, '/invoice/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$dateRange = $this->formatDateRange($begin, $end); $dateRange = $this->formatDateRange($begin, $end);
@@ -254,7 +254,7 @@ class InvoiceControllerTest extends ControllerBaseTest
'customers' => [1], 'customers' => [1],
]); ]);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$params = [ $params = [
'daterange' => $dateRange, 'daterange' => $dateRange,
@@ -267,13 +267,13 @@ class InvoiceControllerTest extends ControllerBaseTest
$action = '/invoice/preview/1/' . $token . '?' . http_build_query($params); $action = '/invoice/preview/1/' . $token . '?' . http_build_query($params);
$this->request($client, $action); $this->request($client, $action);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$node = $client->getCrawler()->filter('body'); $node = $client->getCrawler()->filter('body');
$this->assertEquals(1, $node->count()); self::assertEquals(1, $node->count());
/** @var \DOMElement $element */ /** @var \DOMElement $element */
$element = $node->getIterator()[0]; $element = $node->getIterator()[0];
$this->assertEquals('invoice_print', $element->getAttribute('class')); self::assertEquals('invoice_print', $element->getAttribute('class'));
} }
public function testCreateActionAsAdminWithDownloadAndStatusChange(): void public function testCreateActionAsAdminWithDownloadAndStatusChange(): void
@@ -295,7 +295,7 @@ class InvoiceControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$this->request($client, '/invoice/'); $this->request($client, '/invoice/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$dateRange = $this->formatDateRange($begin, $end); $dateRange = $this->formatDateRange($begin, $end);
@@ -309,11 +309,11 @@ class InvoiceControllerTest extends ControllerBaseTest
'customers' => [1], 'customers' => [1],
]); ]);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
// no warning should be displayed // no warning should be displayed
$node = $client->getCrawler()->filter('div.callout.callout-warning.lead'); $node = $client->getCrawler()->filter('div.callout.callout-warning.lead');
$this->assertEquals(0, $node->count()); self::assertEquals(0, $node->count());
// but the datatable with all timesheets // but the datatable with all timesheets
$this->assertDataTableRowCount($client, 'datatable_invoice_create', 20); $this->assertDataTableRowCount($client, 'datatable_invoice_create', 20);
@@ -331,7 +331,7 @@ class InvoiceControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, '/invoice/show?id=', false); $this->assertIsRedirect($client, '/invoice/show?id=', false);
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$invoices = $this->getEntityManager()->getRepository(Invoice::class)->findAll(); $invoices = $this->getEntityManager()->getRepository(Invoice::class)->findAll();
self::assertCount(1, $invoices); self::assertCount(1, $invoices);
@@ -345,23 +345,23 @@ class InvoiceControllerTest extends ControllerBaseTest
// make sure the invoice is saved // make sure the invoice is saved
$this->request($client, '/invoice/download/' . $id); $this->request($client, '/invoice/download/' . $id);
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertTrue($response->isSuccessful()); self::assertTrue($response->isSuccessful());
self::assertInstanceOf(BinaryFileResponse::class, $response); self::assertInstanceOf(BinaryFileResponse::class, $response);
self::assertFileExists($response->getFile()); self::assertFileExists($response->getFile());
$this->request($client, '/invoice/show'); $this->request($client, '/invoice/show');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$link = $client->getCrawler()->selectLink('Waiting for payment'); $link = $client->getCrawler()->selectLink('Waiting for payment');
$this->request($client, $link->attr('href')); $this->request($client, $link->attr('href'));
$this->assertIsRedirect($client, '/invoice/show'); $this->assertIsRedirect($client, '/invoice/show');
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$link = $client->getCrawler()->selectLink('Invoice paid'); $link = $client->getCrawler()->selectLink('Invoice paid');
$url = $link->attr('href'); $url = $link->attr('href');
$this->request($client, $url); $this->request($client, $url);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasValidationError( $this->assertHasValidationError(
$client, $client,
@@ -375,7 +375,7 @@ class InvoiceControllerTest extends ControllerBaseTest
['#invoice_edit_form_paymentDate'] ['#invoice_edit_form_paymentDate']
); );
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=invoice_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=invoice_edit_form]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -386,13 +386,13 @@ class InvoiceControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, '/invoice/show'); $this->assertIsRedirect($client, '/invoice/show');
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$token = $this->getCsrfToken($client, 'invoice.status'); $token = $this->getCsrfToken($client, 'invoice.status');
$this->request($client, '/invoice/change-status/' . $id . '/new/' . $token->getValue()); $this->request($client, '/invoice/change-status/' . $id . '/new/' . $token->getValue());
$this->assertIsRedirect($client, '/invoice/show'); $this->assertIsRedirect($client, '/invoice/show');
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
} }
public function testEditTemplateAction(): void public function testEditTemplateAction(): void
@@ -417,7 +417,7 @@ class InvoiceControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/invoice/template')); $this->assertIsRedirect($client, $this->createUrl('/invoice/template'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
} }
@@ -438,10 +438,10 @@ class InvoiceControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, '/invoice/template'); $this->assertIsRedirect($client, '/invoice/template');
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$this->assertEquals(0, $this->getEntityManager()->getRepository(InvoiceTemplate::class)->count([])); self::assertEquals(0, $this->getEntityManager()->getRepository(InvoiceTemplate::class)->count([]));
} }
public function testUploadDocumentAction(): void public function testUploadDocumentAction(): void
@@ -452,7 +452,7 @@ class InvoiceControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$this->request($client, '/invoice/document_upload'); $this->request($client, '/invoice/document_upload');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$node = $client->getCrawler()->filter('form[name=invoice_document_upload_form]'); $node = $client->getCrawler()->filter('form[name=invoice_document_upload_form]');
self::assertEquals(1, $node->count(), 'Could not find upload form'); self::assertEquals(1, $node->count(), 'Could not find upload form');

View File

@@ -15,7 +15,7 @@ use Symfony\Component\HttpKernel\HttpKernelBrowser;
/** /**
* @group integration * @group integration
*/ */
class LayoutControllerTest extends ControllerBaseTest class LayoutControllerTest extends AbstractControllerBaseTestCase
{ {
public function testNavigationMenus(): void public function testNavigationMenus(): void
{ {
@@ -24,7 +24,7 @@ class LayoutControllerTest extends ControllerBaseTest
$user = $this->getUserByRole(User::ROLE_USER); $user = $this->getUserByRole(User::ROLE_USER);
$this->request($client, '/dashboard/'); $this->request($client, '/dashboard/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasMainHeader($client, $user); $this->assertHasMainHeader($client, $user);
$this->assertHasNavigation($client); $this->assertHasNavigation($client);
@@ -34,22 +34,22 @@ class LayoutControllerTest extends ControllerBaseTest
{ {
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertStringContainsString('data-bs-toggle="dropdown" aria-label="Open personal menu"', $content); self::assertStringContainsString('data-bs-toggle="dropdown" aria-label="Open personal menu"', $content);
$this->assertStringContainsString('href="/en/profile/' . $user->getUserIdentifier() . '"', $content); self::assertStringContainsString('href="/en/profile/' . $user->getUserIdentifier() . '"', $content);
$this->assertStringContainsString('href="/en/profile/' . $user->getUserIdentifier() . '/edit"', $content); self::assertStringContainsString('href="/en/profile/' . $user->getUserIdentifier() . '/edit"', $content);
$this->assertStringContainsString('href="/en/profile/' . $user->getUserIdentifier() . '/prefs"', $content); self::assertStringContainsString('href="/en/profile/' . $user->getUserIdentifier() . '/prefs"', $content);
$this->assertStringContainsString('href="/en/logout', $content); self::assertStringContainsString('href="/en/logout', $content);
} }
protected function assertHasNavigation(HttpKernelBrowser $client): void protected function assertHasNavigation(HttpKernelBrowser $client): void
{ {
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertStringContainsString('href="/en/dashboard/"', $content); self::assertStringContainsString('href="/en/dashboard/"', $content);
$this->assertStringContainsString('href="/en/timesheet/"', $content); self::assertStringContainsString('href="/en/timesheet/"', $content);
$this->assertStringContainsString('My times', $content); self::assertStringContainsString('My times', $content);
$this->assertStringContainsString('href="/en/calendar/"', $content); self::assertStringContainsString('href="/en/calendar/"', $content);
$this->assertStringContainsString('Calendar', $content); self::assertStringContainsString('Calendar', $content);
} }
public function testActiveEntries(): void public function testActiveEntries(): void
@@ -57,10 +57,10 @@ class LayoutControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER); $client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$this->request($client, '/dashboard/'); $this->request($client, '/dashboard/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertStringContainsString('<a title="Start time-tracking" href="/en/timesheet/create" class="modal-ajax-form ticktac-start btn', $content); self::assertStringContainsString('<a title="Start time-tracking" href="/en/timesheet/create" class="modal-ajax-form ticktac-start btn', $content);
} }
} }

View File

@@ -17,7 +17,7 @@ use App\Entity\User;
/** /**
* @group integration * @group integration
*/ */
class PermissionControllerTest extends ControllerBaseTest class PermissionControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -135,10 +135,10 @@ class PermissionControllerTest extends ControllerBaseTest
]); ]);
$this->assertIsRedirect($client, $this->createUrl('/profile/' . urlencode(UserFixtures::USERNAME_USER) . '/roles')); $this->assertIsRedirect($client, $this->createUrl('/profile/' . urlencode(UserFixtures::USERNAME_USER) . '/roles'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$user = $this->getUserByName(UserFixtures::USERNAME_USER); $user = $this->getUserByName(UserFixtures::USERNAME_USER);
$this->assertEquals(['ROLE_TEAMLEAD', 'ROLE_SUPER_ADMIN', 'TEST_ROLE', 'ROLE_USER'], $user->getRoles()); self::assertEquals(['ROLE_TEAMLEAD', 'ROLE_SUPER_ADMIN', 'TEST_ROLE', 'ROLE_USER'], $user->getRoles());
$this->request($client, '/admin/permissions'); $this->request($client, '/admin/permissions');
$node = $client->getCrawler()->filter('div.card .card-title a.confirmation-link'); $node = $client->getCrawler()->filter('div.card .card-title a.confirmation-link');
@@ -154,7 +154,7 @@ class PermissionControllerTest extends ControllerBaseTest
// verify that role was removed from user // verify that role was removed from user
$user = $this->getUserByName(UserFixtures::USERNAME_USER); $user = $this->getUserByName(UserFixtures::USERNAME_USER);
$this->assertEquals(['ROLE_TEAMLEAD', 'ROLE_SUPER_ADMIN', 'ROLE_USER'], $user->getRoles()); self::assertEquals(['ROLE_TEAMLEAD', 'ROLE_SUPER_ADMIN', 'ROLE_USER'], $user->getRoles());
} }
public function testSavePermissionIsSecured(): void public function testSavePermissionIsSecured(): void
@@ -191,7 +191,7 @@ class PermissionControllerTest extends ControllerBaseTest
$em = $this->getEntityManager(); $em = $this->getEntityManager();
$rolePermissions = $em->getRepository(RolePermission::class)->findAll(); $rolePermissions = $em->getRepository(RolePermission::class)->findAll();
$this->assertEquals(0, \count($rolePermissions)); self::assertEquals(0, \count($rolePermissions));
$roles = $em->getRepository(Role::class)->findAll(); $roles = $em->getRepository(Role::class)->findAll();
$id = null; $id = null;
@@ -212,7 +212,7 @@ class PermissionControllerTest extends ControllerBaseTest
self::assertArrayHasKey('token', $result); self::assertArrayHasKey('token', $result);
$rolePermissions = $em->getRepository(RolePermission::class)->findAll(); $rolePermissions = $em->getRepository(RolePermission::class)->findAll();
$this->assertCount(1, $rolePermissions); self::assertCount(1, $rolePermissions);
$permission = $rolePermissions[0]; $permission = $rolePermissions[0];
self::assertInstanceOf(RolePermission::class, $permission); self::assertInstanceOf(RolePermission::class, $permission);
self::assertEquals('view_user', $permission->getPermission()); self::assertEquals('view_user', $permission->getPermission());
@@ -232,7 +232,7 @@ class PermissionControllerTest extends ControllerBaseTest
self::assertArrayHasKey('token', $result); self::assertArrayHasKey('token', $result);
$rolePermissions = $em->getRepository(RolePermission::class)->findAll(); $rolePermissions = $em->getRepository(RolePermission::class)->findAll();
$this->assertEquals(1, \count($rolePermissions)); self::assertEquals(1, \count($rolePermissions));
$permission = $rolePermissions[0]; $permission = $rolePermissions[0];
self::assertInstanceOf(RolePermission::class, $permission); self::assertInstanceOf(RolePermission::class, $permission);
self::assertEquals('view_user', $permission->getPermission()); self::assertEquals('view_user', $permission->getPermission());

View File

@@ -16,7 +16,7 @@ use App\Tests\Plugin\Fixtures\TestPlugin\TestPlugin;
/** /**
* @group integration * @group integration
*/ */
class PluginControllerTest extends ControllerBaseTest class PluginControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {

View File

@@ -22,7 +22,7 @@ use Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactoryInterface;
/** /**
* @group integration * @group integration
*/ */
class ProfileControllerTest extends ControllerBaseTest class ProfileControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -40,16 +40,16 @@ class ProfileControllerTest extends ControllerBaseTest
{ {
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER); $client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$this->request($client, '/profile/' . UserFixtures::USERNAME_USER); $this->request($client, '/profile/' . UserFixtures::USERNAME_USER);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasProfileBox($client, 'John Doe'); $this->assertHasProfileBox($client, 'John Doe');
$this->assertHasAboutMeBox($client, UserFixtures::USERNAME_USER); $this->assertHasAboutMeBox($client, UserFixtures::USERNAME_USER);
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$year = (new \DateTime())->format('Y'); $year = (new \DateTime())->format('Y');
$this->assertStringContainsString('<h3 class="card-title">' . $year, $content); self::assertStringContainsString('<h3 class="card-title">' . $year, $content);
$this->assertStringContainsString('new Chart(', $content); self::assertStringContainsString('new Chart(', $content);
$this->assertStringContainsString('<canvas id="userProfileChart' . $year . '"', $content); self::assertStringContainsString('<canvas id="userProfileChart' . $year . '"', $content);
} }
public function testIndexAction(): void public function testIndexAction(): void
@@ -70,13 +70,13 @@ class ProfileControllerTest extends ControllerBaseTest
} }
$this->request($client, '/profile/' . UserFixtures::USERNAME_USER); $this->request($client, '/profile/' . UserFixtures::USERNAME_USER);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
foreach ($dates as $start) { foreach ($dates as $start) {
$year = $start->format('Y'); $year = $start->format('Y');
$this->assertStringContainsString('<h3 class="card-title">' . $year, $content); self::assertStringContainsString('<h3 class="card-title">' . $year, $content);
$this->assertStringContainsString('<canvas id="userProfileChart' . $year . '"', $content); self::assertStringContainsString('<canvas id="userProfileChart' . $year . '"', $content);
} }
$this->assertHasProfileBox($client, 'John Doe'); $this->assertHasProfileBox($client, 'John Doe');
@@ -86,19 +86,19 @@ class ProfileControllerTest extends ControllerBaseTest
protected function assertHasProfileBox(HttpKernelBrowser $client, string $username): void protected function assertHasProfileBox(HttpKernelBrowser $client, string $username): void
{ {
$profileBox = $client->getCrawler()->filter('div.box-user-profile'); $profileBox = $client->getCrawler()->filter('div.box-user-profile');
$this->assertEquals(1, $profileBox->count()); self::assertEquals(1, $profileBox->count());
$profileAvatar = $profileBox->filter('span.avatar'); $profileAvatar = $profileBox->filter('span.avatar');
$this->assertEquals(1, $profileAvatar->count()); self::assertEquals(1, $profileAvatar->count());
} }
protected function assertHasAboutMeBox(HttpKernelBrowser $client, string $username): void protected function assertHasAboutMeBox(HttpKernelBrowser $client, string $username): void
{ {
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertStringContainsString('<div class="datagrid-content">' . $username . '</div>', $content); self::assertStringContainsString('<div class="datagrid-content">' . $username . '</div>', $content);
} }
public function getTabTestData(): array public static function getTabTestData(): array
{ {
return [ return [
[User::ROLE_USER, UserFixtures::USERNAME_USER], [User::ROLE_USER, UserFixtures::USERNAME_USER],
@@ -113,14 +113,14 @@ class ProfileControllerTest extends ControllerBaseTest
{ {
$client = $this->getClientForAuthenticatedUser($role); $client = $this->getClientForAuthenticatedUser($role);
$this->request($client, '/profile/' . $username . '/edit'); $this->request($client, '/profile/' . $username . '/edit');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
} }
public function testIndexActionWithDifferentUsername(): void public function testIndexActionWithDifferentUsername(): void
{ {
$client = $this->getClientForAuthenticatedUser(); $client = $this->getClientForAuthenticatedUser();
$this->request($client, '/profile/' . UserFixtures::USERNAME_TEAMLEAD); $this->request($client, '/profile/' . UserFixtures::USERNAME_TEAMLEAD);
$this->assertFalse($client->getResponse()->isSuccessful()); self::assertFalse($client->getResponse()->isSuccessful());
} }
public function testEditAction(): void public function testEditAction(): void
@@ -131,11 +131,11 @@ class ProfileControllerTest extends ControllerBaseTest
/** @var User $user */ /** @var User $user */
$user = $this->getUserByRole(User::ROLE_USER); $user = $this->getUserByRole(User::ROLE_USER);
$this->assertEquals(UserFixtures::USERNAME_USER, $user->getUserIdentifier()); self::assertEquals(UserFixtures::USERNAME_USER, $user->getUserIdentifier());
$this->assertEquals('John Doe', $user->getAlias()); self::assertEquals('John Doe', $user->getAlias());
$this->assertEquals('Developer', $user->getTitle()); self::assertEquals('Developer', $user->getTitle());
$this->assertEquals('john_user@example.com', $user->getEmail()); self::assertEquals('john_user@example.com', $user->getEmail());
$this->assertTrue($user->isEnabled()); self::assertTrue($user->isEnabled());
$form = $client->getCrawler()->filter('form[name=user_edit]')->form(); $form = $client->getCrawler()->filter('form[name=user_edit]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -148,17 +148,17 @@ class ProfileControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/profile/' . urlencode(UserFixtures::USERNAME_USER) . '/edit')); $this->assertIsRedirect($client, $this->createUrl('/profile/' . urlencode(UserFixtures::USERNAME_USER) . '/edit'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$user = $this->getUserByRole(User::ROLE_USER); $user = $this->getUserByRole(User::ROLE_USER);
$this->assertEquals(UserFixtures::USERNAME_USER, $user->getUserIdentifier()); self::assertEquals(UserFixtures::USERNAME_USER, $user->getUserIdentifier());
$this->assertEquals('Johnny', $user->getAlias()); self::assertEquals('Johnny', $user->getAlias());
$this->assertEquals('Code Monkey', $user->getTitle()); self::assertEquals('Code Monkey', $user->getTitle());
$this->assertEquals('updated@example.com', $user->getEmail()); self::assertEquals('updated@example.com', $user->getEmail());
$this->assertTrue($user->isEnabled()); self::assertTrue($user->isEnabled());
} }
public function testEditActionWithActiveFlag(): void public function testEditActionWithActiveFlag(): void
@@ -178,17 +178,17 @@ class ProfileControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/profile/' . urlencode(UserFixtures::USERNAME_USER) . '/edit')); $this->assertIsRedirect($client, $this->createUrl('/profile/' . urlencode(UserFixtures::USERNAME_USER) . '/edit'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$user = $this->getUserByRole(User::ROLE_USER); $user = $this->getUserByRole(User::ROLE_USER);
$this->assertEquals(UserFixtures::USERNAME_USER, $user->getUserIdentifier()); self::assertEquals(UserFixtures::USERNAME_USER, $user->getUserIdentifier());
$this->assertEquals('Johnny', $user->getAlias()); self::assertEquals('Johnny', $user->getAlias());
$this->assertEquals('Code Monkey', $user->getTitle()); self::assertEquals('Code Monkey', $user->getTitle());
$this->assertEquals('updated@example.com', $user->getEmail()); self::assertEquals('updated@example.com', $user->getEmail());
$this->assertFalse($user->isEnabled()); self::assertFalse($user->isEnabled());
} }
public function testPasswordAction(): void public function testPasswordAction(): void
@@ -202,9 +202,9 @@ class ProfileControllerTest extends ControllerBaseTest
/** @var PasswordHasherFactoryInterface $passwordEncoder */ /** @var PasswordHasherFactoryInterface $passwordEncoder */
$passwordEncoder = self::getContainer()->get('security.password_hasher_factory'); $passwordEncoder = self::getContainer()->get('security.password_hasher_factory');
$this->assertTrue($passwordEncoder->getPasswordHasher($user)->verify($user->getPassword(), UserFixtures::DEFAULT_PASSWORD)); self::assertTrue($passwordEncoder->getPasswordHasher($user)->verify($user->getPassword(), UserFixtures::DEFAULT_PASSWORD));
$this->assertFalse($passwordEncoder->getPasswordHasher($user)->verify($user->getPassword(), 'test123')); self::assertFalse($passwordEncoder->getPasswordHasher($user)->verify($user->getPassword(), 'test123'));
$this->assertEquals(UserFixtures::USERNAME_USER, $user->getUserIdentifier()); self::assertEquals(UserFixtures::USERNAME_USER, $user->getUserIdentifier());
$form = $client->getCrawler()->filter('form[name=user_password]')->form(); $form = $client->getCrawler()->filter('form[name=user_password]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -221,8 +221,8 @@ class ProfileControllerTest extends ControllerBaseTest
// are the old ones, so following the redirect would fail with "Unauthorized". // are the old ones, so following the redirect would fail with "Unauthorized".
$user = $this->getUserByRole(User::ROLE_USER); $user = $this->getUserByRole(User::ROLE_USER);
$this->assertFalse($passwordEncoder->getPasswordHasher($user)->verify($user->getPassword(), UserFixtures::DEFAULT_PASSWORD)); self::assertFalse($passwordEncoder->getPasswordHasher($user)->verify($user->getPassword(), UserFixtures::DEFAULT_PASSWORD));
$this->assertTrue($passwordEncoder->getPasswordHasher($user)->verify($user->getPassword(), 'test1234')); self::assertTrue($passwordEncoder->getPasswordHasher($user)->verify($user->getPassword(), 'test1234'));
} }
public function testPasswordActionFailsIfPasswordLengthToShort(): void public function testPasswordActionFailsIfPasswordLengthToShort(): void
@@ -256,9 +256,9 @@ class ProfileControllerTest extends ControllerBaseTest
/** @var PasswordHasherFactoryInterface $passwordEncoder */ /** @var PasswordHasherFactoryInterface $passwordEncoder */
$passwordEncoder = self::getContainer()->get('security.password_hasher_factory'); $passwordEncoder = self::getContainer()->get('security.password_hasher_factory');
$this->assertTrue($passwordEncoder->getPasswordHasher($user)->verify($user->getApiToken(), UserFixtures::DEFAULT_API_TOKEN)); self::assertTrue($passwordEncoder->getPasswordHasher($user)->verify($user->getApiToken(), UserFixtures::DEFAULT_API_TOKEN));
$this->assertFalse($passwordEncoder->getPasswordHasher($user)->verify($user->getApiToken(), 'test1234')); self::assertFalse($passwordEncoder->getPasswordHasher($user)->verify($user->getApiToken(), 'test1234'));
$this->assertEquals(UserFixtures::USERNAME_USER, $user->getUserIdentifier()); self::assertEquals(UserFixtures::USERNAME_USER, $user->getUserIdentifier());
$form = $client->getCrawler()->filter('form[name=user_api_password]')->form(); $form = $client->getCrawler()->filter('form[name=user_api_password]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -272,14 +272,14 @@ class ProfileControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/profile/' . urlencode(UserFixtures::USERNAME_USER) . '/api-token')); $this->assertIsRedirect($client, $this->createUrl('/profile/' . urlencode(UserFixtures::USERNAME_USER) . '/api-token'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$user = $this->getUserByRole(User::ROLE_USER); $user = $this->getUserByRole(User::ROLE_USER);
$this->assertFalse($passwordEncoder->getPasswordHasher($user)->verify($user->getApiToken(), UserFixtures::DEFAULT_API_TOKEN)); self::assertFalse($passwordEncoder->getPasswordHasher($user)->verify($user->getApiToken(), UserFixtures::DEFAULT_API_TOKEN));
$this->assertTrue($passwordEncoder->getPasswordHasher($user)->verify($user->getApiToken(), 'test1234')); self::assertTrue($passwordEncoder->getPasswordHasher($user)->verify($user->getApiToken(), 'test1234'));
} }
public function testApiTokenActionFailsIfPasswordLengthToShort(): void public function testApiTokenActionFailsIfPasswordLengthToShort(): void
@@ -304,7 +304,7 @@ class ProfileControllerTest extends ControllerBaseTest
{ {
$client = $this->getClientForAuthenticatedUser(User::ROLE_TEAMLEAD); $client = $this->getClientForAuthenticatedUser(User::ROLE_TEAMLEAD);
$this->request($client, '/profile/' . UserFixtures::USERNAME_USER . '/roles'); $this->request($client, '/profile/' . UserFixtures::USERNAME_USER . '/roles');
$this->assertFalse($client->getResponse()->isSuccessful()); self::assertFalse($client->getResponse()->isSuccessful());
} }
public function testRolesAction(): void public function testRolesAction(): void
@@ -315,7 +315,7 @@ class ProfileControllerTest extends ControllerBaseTest
/** @var User $user */ /** @var User $user */
$user = $this->getUserByRole(User::ROLE_USER); $user = $this->getUserByRole(User::ROLE_USER);
$this->assertEquals(['ROLE_USER'], $user->getRoles()); self::assertEquals(['ROLE_USER'], $user->getRoles());
$form = $client->getCrawler()->filter('form[name=user_roles]')->form(); $form = $client->getCrawler()->filter('form[name=user_roles]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -327,13 +327,13 @@ class ProfileControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/profile/' . urlencode(UserFixtures::USERNAME_USER) . '/roles')); $this->assertIsRedirect($client, $this->createUrl('/profile/' . urlencode(UserFixtures::USERNAME_USER) . '/roles'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$user = $this->getUserByRole(User::ROLE_USER); $user = $this->getUserByRole(User::ROLE_USER);
$this->assertEquals(['ROLE_TEAMLEAD', 'ROLE_SUPER_ADMIN', 'ROLE_USER'], $user->getRoles()); self::assertEquals(['ROLE_TEAMLEAD', 'ROLE_SUPER_ADMIN', 'ROLE_USER'], $user->getRoles());
} }
public function testTeamsActionIsSecured(): void public function testTeamsActionIsSecured(): void
@@ -364,7 +364,7 @@ class ProfileControllerTest extends ControllerBaseTest
/** @var User $user */ /** @var User $user */
$user = $this->getUserByRole(User::ROLE_USER); $user = $this->getUserByRole(User::ROLE_USER);
$this->assertEquals([], $user->getTeams()); self::assertEquals([], $user->getTeams());
$form = $client->getCrawler()->filter('form[name=user_teams]')->form(); $form = $client->getCrawler()->filter('form[name=user_teams]')->form();
/** @var ChoiceFormField $team */ /** @var ChoiceFormField $team */
@@ -375,16 +375,16 @@ class ProfileControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/profile/' . urlencode(UserFixtures::USERNAME_USER) . '/teams')); $this->assertIsRedirect($client, $this->createUrl('/profile/' . urlencode(UserFixtures::USERNAME_USER) . '/teams'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$user = $this->getUserByRole(User::ROLE_USER); $user = $this->getUserByRole(User::ROLE_USER);
$this->assertCount(1, $user->getTeams()); self::assertCount(1, $user->getTeams());
} }
public function getPreferencesTestData(): array public static function getPreferencesTestData(): array
{ {
return [ return [
// assert that the user doesn't have the "hourly-rate_own_profile" permission // assert that the user doesn't have the "hourly-rate_own_profile" permission
@@ -411,9 +411,9 @@ class ProfileControllerTest extends ControllerBaseTest
/** @var User $user */ /** @var User $user */
$user = $this->getUserByName($username); $user = $this->getUserByName($username);
$this->assertEquals($hourlyRateOriginal, $user->getPreferenceValue(UserPreference::HOURLY_RATE)); self::assertEquals($hourlyRateOriginal, $user->getPreferenceValue(UserPreference::HOURLY_RATE));
$this->assertNull($user->getPreferenceValue(UserPreference::INTERNAL_RATE)); self::assertNull($user->getPreferenceValue(UserPreference::INTERNAL_RATE));
$this->assertEquals('default', $user->getPreferenceValue(UserPreference::SKIN)); self::assertEquals('default', $user->getPreferenceValue(UserPreference::SKIN));
$data = [ $data = [
UserPreference::TIMEZONE => ['value' => 'America/Creston'], UserPreference::TIMEZONE => ['value' => 'America/Creston'],
@@ -439,23 +439,23 @@ class ProfileControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $targetUrl); $this->assertIsRedirect($client, $targetUrl);
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$user = $this->getUserByName($username); $user = $this->getUserByName($username);
$this->assertEquals($hourlyRate, $user->getPreferenceValue(UserPreference::HOURLY_RATE)); self::assertEquals($hourlyRate, $user->getPreferenceValue(UserPreference::HOURLY_RATE));
$this->assertEquals($expectedInternalRate, $user->getPreferenceValue(UserPreference::INTERNAL_RATE)); self::assertEquals($expectedInternalRate, $user->getPreferenceValue(UserPreference::INTERNAL_RATE));
$this->assertEquals('America/Creston', $user->getPreferenceValue(UserPreference::TIMEZONE)); self::assertEquals('America/Creston', $user->getPreferenceValue(UserPreference::TIMEZONE));
$this->assertEquals('America/Creston', $user->getTimezone()); self::assertEquals('America/Creston', $user->getTimezone());
$this->assertEquals('ar', $user->getPreferenceValue(UserPreference::LANGUAGE)); self::assertEquals('ar', $user->getPreferenceValue(UserPreference::LANGUAGE));
$this->assertEquals('ru', $user->getPreferenceValue(UserPreference::LOCALE)); self::assertEquals('ru', $user->getPreferenceValue(UserPreference::LOCALE));
$this->assertEquals('ru', $user->getLocale()); self::assertEquals('ru', $user->getLocale());
$this->assertEquals('ar', $user->getLanguage()); self::assertEquals('ar', $user->getLanguage());
$this->assertEquals('dark', $user->getPreferenceValue(UserPreference::SKIN)); self::assertEquals('dark', $user->getPreferenceValue(UserPreference::SKIN));
$this->assertEquals('sunday', $user->getPreferenceValue(UserPreference::FIRST_WEEKDAY)); self::assertEquals('sunday', $user->getPreferenceValue(UserPreference::FIRST_WEEKDAY));
$this->assertEquals('sunday', $user->getFirstDayOfWeek()); self::assertEquals('sunday', $user->getFirstDayOfWeek());
} }
public function testIsTwoFactorSecure(): void public function testIsTwoFactorSecure(): void
@@ -471,17 +471,17 @@ class ProfileControllerTest extends ControllerBaseTest
self::assertFalse($user->hasTotpSecret()); self::assertFalse($user->hasTotpSecret());
$this->request($client, '/profile/' . UserFixtures::USERNAME_USER . '/2fa'); $this->request($client, '/profile/' . UserFixtures::USERNAME_USER . '/2fa');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$user = $this->getUserByName(UserFixtures::USERNAME_USER); $user = $this->getUserByName(UserFixtures::USERNAME_USER);
self::assertTrue($user->hasTotpSecret()); self::assertTrue($user->hasTotpSecret());
$formUrl = $this->createUrl('/profile/' . UserFixtures::USERNAME_USER . '/2fa'); $formUrl = $this->createUrl('/profile/' . UserFixtures::USERNAME_USER . '/2fa');
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertNotFalse($content); self::assertNotFalse($content);
$this->assertStringContainsString(' data-toggle="tooltip" title="Click to show code" alt="TOTP QR Code" style="max-width: 200px; max-height: 200px;" src="', $content); self::assertStringContainsString(' data-toggle="tooltip" title="Click to show code" alt="TOTP QR Code" style="max-width: 200px; max-height: 200px;" src="', $content);
$this->assertStringContainsString('<form name="user_two_factor" method="post" action="' . $formUrl . '" id="user_two_factor_form">', $content); self::assertStringContainsString('<form name="user_two_factor" method="post" action="' . $formUrl . '" id="user_two_factor_form">', $content);
} }
public function testTwoFactorAsAdmin(): void public function testTwoFactorAsAdmin(): void
@@ -494,14 +494,14 @@ class ProfileControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN);
$this->request($client, '/profile/' . UserFixtures::USERNAME_USER . '/2fa'); $this->request($client, '/profile/' . UserFixtures::USERNAME_USER . '/2fa');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertNotFalse($content); self::assertNotFalse($content);
$formUrl = $this->createUrl('/profile/' . UserFixtures::USERNAME_USER . '/2fa'); $formUrl = $this->createUrl('/profile/' . UserFixtures::USERNAME_USER . '/2fa');
$this->assertStringContainsString(' data-toggle="tooltip" title="Click to show code" alt="TOTP QR Code" style="max-width: 200px; max-height: 200px;" src="', $content); self::assertStringContainsString(' data-toggle="tooltip" title="Click to show code" alt="TOTP QR Code" style="max-width: 200px; max-height: 200px;" src="', $content);
$this->assertStringContainsString('<form name="user_two_factor" method="post" action="' . $formUrl . '" id="user_two_factor_form">', $content); self::assertStringContainsString('<form name="user_two_factor" method="post" action="' . $formUrl . '" id="user_two_factor_form">', $content);
} }
public function testActivateTwoFactorWithEmptyToken(): void public function testActivateTwoFactorWithEmptyToken(): void
@@ -543,25 +543,25 @@ class ProfileControllerTest extends ControllerBaseTest
{ {
$client = $this->getClientForAuthenticatedUser(User::ROLE_TEAMLEAD); $client = $this->getClientForAuthenticatedUser(User::ROLE_TEAMLEAD);
$this->request($client, '/profile/' . UserFixtures::USERNAME_USER . '/contract'); $this->request($client, '/profile/' . UserFixtures::USERNAME_USER . '/contract');
$this->assertFalse($client->getResponse()->isSuccessful()); self::assertFalse($client->getResponse()->isSuccessful());
} }
public function testContractAction(): void public function testContractAction(): void
{ {
$client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN);
$this->request($client, '/profile/' . UserFixtures::USERNAME_USER . '/contract'); $this->request($client, '/profile/' . UserFixtures::USERNAME_USER . '/contract');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$user = $this->getUserByRole(User::ROLE_USER); $user = $this->getUserByRole(User::ROLE_USER);
$calculator = (new WorkingTimeModeDay())->getCalculator($user); $calculator = (new WorkingTimeModeDay())->getCalculator($user);
$this->assertEquals(0, $calculator->getWorkHoursForDay(new \DateTime('monday this week'))); self::assertEquals(0, $calculator->getWorkHoursForDay(new \DateTime('monday this week')));
$this->assertEquals(0, $calculator->getWorkHoursForDay(new \DateTime('tuesday this week'))); self::assertEquals(0, $calculator->getWorkHoursForDay(new \DateTime('tuesday this week')));
$this->assertEquals(0, $calculator->getWorkHoursForDay(new \DateTime('wednesday this week'))); self::assertEquals(0, $calculator->getWorkHoursForDay(new \DateTime('wednesday this week')));
$this->assertEquals(0, $calculator->getWorkHoursForDay(new \DateTime('thursday this week'))); self::assertEquals(0, $calculator->getWorkHoursForDay(new \DateTime('thursday this week')));
$this->assertEquals(0, $calculator->getWorkHoursForDay(new \DateTime('friday this week'))); self::assertEquals(0, $calculator->getWorkHoursForDay(new \DateTime('friday this week')));
$this->assertEquals(0, $calculator->getWorkHoursForDay(new \DateTime('saturday this week'))); self::assertEquals(0, $calculator->getWorkHoursForDay(new \DateTime('saturday this week')));
$this->assertEquals(0, $calculator->getWorkHoursForDay(new \DateTime('sunday this week'))); self::assertEquals(0, $calculator->getWorkHoursForDay(new \DateTime('sunday this week')));
$form = $client->getCrawler()->filter('form[name=user_contract]')->form(); $form = $client->getCrawler()->filter('form[name=user_contract]')->form();
@@ -577,19 +577,19 @@ class ProfileControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/profile/' . urlencode(UserFixtures::USERNAME_USER) . '/contract')); $this->assertIsRedirect($client, $this->createUrl('/profile/' . urlencode(UserFixtures::USERNAME_USER) . '/contract'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$user = $this->getUserByRole(User::ROLE_USER); $user = $this->getUserByRole(User::ROLE_USER);
$calculator = (new WorkingTimeModeDay())->getCalculator($user); $calculator = (new WorkingTimeModeDay())->getCalculator($user);
$this->assertEquals(3600, $calculator->getWorkHoursForDay(new \DateTime('monday this week'))); self::assertEquals(3600, $calculator->getWorkHoursForDay(new \DateTime('monday this week')));
$this->assertEquals(7200, $calculator->getWorkHoursForDay(new \DateTime('tuesday this week'))); self::assertEquals(7200, $calculator->getWorkHoursForDay(new \DateTime('tuesday this week')));
$this->assertEquals(10800, $calculator->getWorkHoursForDay(new \DateTime('wednesday this week'))); self::assertEquals(10800, $calculator->getWorkHoursForDay(new \DateTime('wednesday this week')));
$this->assertEquals(16200, $calculator->getWorkHoursForDay(new \DateTime('thursday this week'))); self::assertEquals(16200, $calculator->getWorkHoursForDay(new \DateTime('thursday this week')));
$this->assertEquals(18720, $calculator->getWorkHoursForDay(new \DateTime('friday this week'))); self::assertEquals(18720, $calculator->getWorkHoursForDay(new \DateTime('friday this week')));
$this->assertEquals(25140, $calculator->getWorkHoursForDay(new \DateTime('saturday this week'))); self::assertEquals(25140, $calculator->getWorkHoursForDay(new \DateTime('saturday this week')));
$this->assertEquals(60, $calculator->getWorkHoursForDay(new \DateTime('sunday this week'))); self::assertEquals(60, $calculator->getWorkHoursForDay(new \DateTime('sunday this week')));
} }
} }

View File

@@ -31,7 +31,7 @@ use Symfony\Component\HttpKernel\HttpKernelBrowser;
/** /**
* @group integration * @group integration
*/ */
class ProjectControllerTest extends ControllerBaseTest class ProjectControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -96,7 +96,7 @@ class ProjectControllerTest extends ControllerBaseTest
'page' => 1, 'page' => 1,
]); ]);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasDataTable($client); $this->assertHasDataTable($client);
$this->assertDataTableRowCount($client, 'datatable_project_admin', 5); $this->assertDataTableRowCount($client, 'datatable_project_admin', 5);
} }
@@ -411,12 +411,12 @@ class ProjectControllerTest extends ControllerBaseTest
$dispatcher = self::getContainer()->get('event_dispatcher'); $dispatcher = self::getContainer()->get('event_dispatcher');
$dispatcher->addSubscriber(new ProjectTestMetaFieldSubscriberMock()); $dispatcher->addSubscriber(new ProjectTestMetaFieldSubscriberMock());
$this->assertAccessIsGranted($client, '/admin/project/create'); $this->assertAccessIsGranted($client, '/admin/project/create');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=project_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=project_edit_form]')->form();
$this->assertTrue($form->has('project_edit_form[metaFields][metatestmock][value]')); self::assertTrue($form->has('project_edit_form[metaFields][metatestmock][value]'));
$this->assertTrue($form->has('project_edit_form[metaFields][foobar][value]')); self::assertTrue($form->has('project_edit_form[metaFields][foobar][value]'));
$this->assertFalse($form->has('project_edit_form[metaFields][0][value]')); self::assertFalse($form->has('project_edit_form[metaFields][0][value]'));
} }
public function testEditAction(): void public function testEditAction(): void
@@ -424,7 +424,7 @@ class ProjectControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$this->assertAccessIsGranted($client, '/admin/project/1/edit'); $this->assertAccessIsGranted($client, '/admin/project/1/edit');
$form = $client->getCrawler()->filter('form[name=project_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=project_edit_form]')->form();
$this->assertEquals('Test', $form->get('project_edit_form[name]')->getValue()); self::assertEquals('Test', $form->get('project_edit_form[name]')->getValue());
$client->submit($form, [ $client->submit($form, [
'project_edit_form' => ['name' => 'Test 2'] 'project_edit_form' => ['name' => 'Test 2']
]); ]);
@@ -432,7 +432,7 @@ class ProjectControllerTest extends ControllerBaseTest
$client->followRedirect(); $client->followRedirect();
$this->request($client, '/admin/project/1/edit'); $this->request($client, '/admin/project/1/edit');
$editForm = $client->getCrawler()->filter('form[name=project_edit_form]')->form(); $editForm = $client->getCrawler()->filter('form[name=project_edit_form]')->form();
$this->assertEquals('Test 2', $editForm->get('project_edit_form[name]')->getValue()); self::assertEquals('Test 2', $editForm->get('project_edit_form[name]')->getValue());
} }
public function testTeamPermissionAction(): void public function testTeamPermissionAction(): void
@@ -477,12 +477,12 @@ class ProjectControllerTest extends ControllerBaseTest
$id = $projects[0]->getId(); $id = $projects[0]->getId();
$this->request($client, '/admin/project/' . $id . '/edit'); $this->request($client, '/admin/project/' . $id . '/edit');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->request($client, '/admin/project/' . $id . '/delete'); $this->request($client, '/admin/project/' . $id . '/delete');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=form]')->form(); $form = $client->getCrawler()->filter('form[name=form]')->form();
$this->assertStringEndsWith($this->createUrl('/admin/project/' . $id . '/delete'), $form->getUri()); self::assertStringEndsWith($this->createUrl('/admin/project/' . $id . '/delete'), $form->getUri());
$client->submit($form); $client->submit($form);
$client->followRedirect(); $client->followRedirect();
@@ -490,7 +490,7 @@ class ProjectControllerTest extends ControllerBaseTest
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$this->request($client, '/admin/project/' . $id . '/edit'); $this->request($client, '/admin/project/' . $id . '/edit');
$this->assertFalse($client->getResponse()->isSuccessful()); self::assertFalse($client->getResponse()->isSuccessful());
} }
public function testDeleteActionWithTimesheetEntries(): void public function testDeleteActionWithTimesheetEntries(): void
@@ -504,18 +504,18 @@ class ProjectControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$timesheets = $em->getRepository(Timesheet::class)->findAll(); $timesheets = $em->getRepository(Timesheet::class)->findAll();
$this->assertEquals(10, \count($timesheets)); self::assertEquals(10, \count($timesheets));
/** @var Timesheet $entry */ /** @var Timesheet $entry */
foreach ($timesheets as $entry) { foreach ($timesheets as $entry) {
$this->assertEquals(1, $entry->getActivity()->getId()); self::assertEquals(1, $entry->getActivity()->getId());
} }
$this->request($client, '/admin/project/1/delete'); $this->request($client, '/admin/project/1/delete');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=form]')->form(); $form = $client->getCrawler()->filter('form[name=form]')->form();
$this->assertStringEndsWith($this->createUrl('/admin/project/1/delete'), $form->getUri()); self::assertStringEndsWith($this->createUrl('/admin/project/1/delete'), $form->getUri());
$client->submit($form); $client->submit($form);
$this->assertIsRedirect($client, $this->createUrl('/admin/project/')); $this->assertIsRedirect($client, $this->createUrl('/admin/project/'));
@@ -525,10 +525,10 @@ class ProjectControllerTest extends ControllerBaseTest
$em->clear(); $em->clear();
$timesheets = $em->getRepository(Timesheet::class)->findAll(); $timesheets = $em->getRepository(Timesheet::class)->findAll();
$this->assertEquals(0, \count($timesheets)); self::assertEquals(0, \count($timesheets));
$this->request($client, '/admin/project/1/edit'); $this->request($client, '/admin/project/1/edit');
$this->assertFalse($client->getResponse()->isSuccessful()); self::assertFalse($client->getResponse()->isSuccessful());
} }
public function testDeleteActionWithTimesheetEntriesAndReplacement(): void public function testDeleteActionWithTimesheetEntriesAndReplacement(): void
@@ -546,18 +546,18 @@ class ProjectControllerTest extends ControllerBaseTest
$id = $projects[0]->getId(); $id = $projects[0]->getId();
$timesheets = $em->getRepository(Timesheet::class)->findAll(); $timesheets = $em->getRepository(Timesheet::class)->findAll();
$this->assertEquals(10, \count($timesheets)); self::assertEquals(10, \count($timesheets));
/** @var Timesheet $entry */ /** @var Timesheet $entry */
foreach ($timesheets as $entry) { foreach ($timesheets as $entry) {
$this->assertEquals(1, $entry->getProject()->getId()); self::assertEquals(1, $entry->getProject()->getId());
} }
$this->request($client, '/admin/project/1/delete'); $this->request($client, '/admin/project/1/delete');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=form]')->form(); $form = $client->getCrawler()->filter('form[name=form]')->form();
$this->assertStringEndsWith($this->createUrl('/admin/project/1/delete'), $form->getUri()); self::assertStringEndsWith($this->createUrl('/admin/project/1/delete'), $form->getUri());
$client->submit($form, [ $client->submit($form, [
'form' => [ 'form' => [
'project' => $id 'project' => $id
@@ -570,15 +570,15 @@ class ProjectControllerTest extends ControllerBaseTest
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$timesheets = $em->getRepository(Timesheet::class)->findAll(); $timesheets = $em->getRepository(Timesheet::class)->findAll();
$this->assertEquals(10, \count($timesheets)); self::assertEquals(10, \count($timesheets));
/** @var Timesheet $entry */ /** @var Timesheet $entry */
foreach ($timesheets as $entry) { foreach ($timesheets as $entry) {
$this->assertEquals($id, $entry->getProject()->getId()); self::assertEquals($id, $entry->getProject()->getId());
} }
$this->request($client, '/admin/project/1/edit'); $this->request($client, '/admin/project/1/edit');
$this->assertFalse($client->getResponse()->isSuccessful()); self::assertFalse($client->getResponse()->isSuccessful());
} }
/** /**
@@ -595,7 +595,7 @@ class ProjectControllerTest extends ControllerBaseTest
); );
} }
public function getValidationTestData() public static function getValidationTestData()
{ {
return [ return [
[ [

View File

@@ -14,7 +14,7 @@ use App\Tests\DataFixtures\TimesheetFixtures;
/** /**
* @group integration * @group integration
*/ */
class QuickEntryControllerTest extends ControllerBaseTest class QuickEntryControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -25,7 +25,7 @@ class QuickEntryControllerTest extends ControllerBaseTest
{ {
$client = $this->getClientForAuthenticatedUser(); $client = $this->getClientForAuthenticatedUser();
$this->request($client, '/quick_entry/'); $this->request($client, '/quick_entry/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$node = $client->getCrawler()->filter('form[name=quick_entry_weekrange_form]'); $node = $client->getCrawler()->filter('form[name=quick_entry_weekrange_form]');
self::assertEquals(1, $node->filter('div.btn-group.week-picker-btn-group')->count()); self::assertEquals(1, $node->filter('div.btn-group.week-picker-btn-group')->count());
@@ -65,7 +65,7 @@ class QuickEntryControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$this->request($client, '/quick_entry/'); $this->request($client, '/quick_entry/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$node = $client->getCrawler()->filter('form[name=quick_entry_form]'); $node = $client->getCrawler()->filter('form[name=quick_entry_form]');
self::assertEquals(1, $node->filter('input.btn-primary[type=submit]')->count()); self::assertEquals(1, $node->filter('input.btn-primary[type=submit]')->count());

View File

@@ -10,13 +10,13 @@
namespace App\Tests\Controller\Reporting; namespace App\Tests\Controller\Reporting;
use App\Entity\User; use App\Entity\User;
use App\Tests\Controller\ControllerBaseTest; use App\Tests\Controller\AbstractControllerBaseTestCase;
use App\Tests\DataFixtures\TimesheetFixtures; use App\Tests\DataFixtures\TimesheetFixtures;
/** /**
* @group integration * @group integration
*/ */
abstract class AbstractUserPeriodControllerTest extends ControllerBaseTest abstract class AbstractUserPeriodControllerTestCase extends AbstractControllerBaseTestCase
{ {
protected function importReportingFixture(string $role): void protected function importReportingFixture(string $role): void
{ {
@@ -37,7 +37,7 @@ abstract class AbstractUserPeriodControllerTest extends ControllerBaseTest
$this->assertUrlIsSecured($this->getReportUrl()); $this->assertUrlIsSecured($this->getReportUrl());
} }
public function getTestData(): array public static function getTestData(): array
{ {
return [ return [
[4, 'duration', 'Working hours total'], [4, 'duration', 'Working hours total'],

View File

@@ -10,16 +10,16 @@
namespace App\Tests\Controller\Reporting; namespace App\Tests\Controller\Reporting;
use App\Entity\User; use App\Entity\User;
use App\Tests\Controller\ControllerBaseTest; use App\Tests\Controller\AbstractControllerBaseTestCase;
use App\Tests\DataFixtures\TimesheetFixtures; use App\Tests\DataFixtures\TimesheetFixtures;
use Symfony\Component\HttpFoundation\BinaryFileResponse; use Symfony\Component\HttpFoundation\BinaryFileResponse;
/** /**
* @group integration * @group integration
*/ */
abstract class AbstractUsersPeriodControllerTest extends ControllerBaseTest abstract class AbstractUsersPeriodControllerTestCase extends AbstractControllerBaseTestCase
{ {
protected function importReportingFixture(string $role) protected function importReportingFixture(string $role): void
{ {
$fixture = new TimesheetFixtures(); $fixture = new TimesheetFixtures();
$fixture->setAmount(50); $fixture->setAmount(50);
@@ -40,7 +40,7 @@ abstract class AbstractUsersPeriodControllerTest extends ControllerBaseTest
$this->assertUrlIsSecured($this->getReportUrl()); $this->assertUrlIsSecured($this->getReportUrl());
} }
public function getTestData(): array public static function getTestData(): array
{ {
return [ return [
['duration', 'Working hours total'], ['duration', 'Working hours total'],
@@ -86,7 +86,7 @@ abstract class AbstractUsersPeriodControllerTest extends ControllerBaseTest
$this->importReportingFixture(User::ROLE_SUPER_ADMIN); $this->importReportingFixture(User::ROLE_SUPER_ADMIN);
$this->request($client, \sprintf('%s?date=12999119191&sumType=%s', $this->getReportExportUrl(), $dataType)); $this->request($client, \sprintf('%s?date=12999119191&sumType=%s', $this->getReportExportUrl(), $dataType));
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertTrue($response->isSuccessful()); self::assertTrue($response->isSuccessful());
self::assertInstanceOf(BinaryFileResponse::class, $response); self::assertInstanceOf(BinaryFileResponse::class, $response);
self::assertEquals('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', $response->headers->get('Content-Type')); self::assertEquals('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', $response->headers->get('Content-Type'));
self::assertStringContainsString('attachment; filename=kimai-export-users-', $response->headers->get('Content-Disposition')); self::assertStringContainsString('attachment; filename=kimai-export-users-', $response->headers->get('Content-Disposition'));

View File

@@ -11,7 +11,7 @@ namespace App\Tests\Controller\Reporting;
use App\Entity\Project; use App\Entity\Project;
use App\Entity\User; use App\Entity\User;
use App\Tests\Controller\ControllerBaseTest; use App\Tests\Controller\AbstractControllerBaseTestCase;
use App\Tests\DataFixtures\ActivityFixtures; use App\Tests\DataFixtures\ActivityFixtures;
use App\Tests\DataFixtures\CustomerFixtures; use App\Tests\DataFixtures\CustomerFixtures;
use App\Tests\DataFixtures\ProjectFixtures; use App\Tests\DataFixtures\ProjectFixtures;
@@ -22,7 +22,7 @@ use Symfony\Component\HttpKernel\HttpKernelBrowser;
/** /**
* @group integration * @group integration
*/ */
class CustomerMonthlyProjectsControllerTest extends ControllerBaseTest class CustomerMonthlyProjectsControllerTest extends AbstractControllerBaseTestCase
{ {
public function testReportIsSecure(): void public function testReportIsSecure(): void
{ {
@@ -90,14 +90,14 @@ class CustomerMonthlyProjectsControllerTest extends ControllerBaseTest
$this->assertAccessIsGranted($client, '/reporting/customer/monthly_projects/export'); $this->assertAccessIsGranted($client, '/reporting/customer/monthly_projects/export');
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertTrue($response->isSuccessful()); self::assertTrue($response->isSuccessful());
self::assertInstanceOf(BinaryFileResponse::class, $response); self::assertInstanceOf(BinaryFileResponse::class, $response);
// temporary file! // temporary file!
$file = $response->getFile(); $file = $response->getFile();
self::assertFileDoesNotExist($response->getFile()); self::assertFileDoesNotExist($response->getFile());
$this->assertEquals('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', $response->headers->get('Content-Type')); self::assertEquals('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', $response->headers->get('Content-Type'));
$this->assertStringContainsString('attachment; filename=kimai-export-users-', $response->headers->get('Content-Disposition')); self::assertStringContainsString('attachment; filename=kimai-export-users-', $response->headers->get('Content-Disposition'));
} }
} }

View File

@@ -11,7 +11,7 @@ namespace App\Tests\Controller\Reporting;
use App\Entity\Project; use App\Entity\Project;
use App\Entity\User; use App\Entity\User;
use App\Tests\Controller\ControllerBaseTest; use App\Tests\Controller\AbstractControllerBaseTestCase;
use App\Tests\DataFixtures\ActivityFixtures; use App\Tests\DataFixtures\ActivityFixtures;
use App\Tests\DataFixtures\CustomerFixtures; use App\Tests\DataFixtures\CustomerFixtures;
use App\Tests\DataFixtures\ProjectFixtures; use App\Tests\DataFixtures\ProjectFixtures;
@@ -21,7 +21,7 @@ use App\Timesheet\DateTimeFactory;
/** /**
* @group integration * @group integration
*/ */
class ProjectDateRangeControllerTest extends ControllerBaseTest class ProjectDateRangeControllerTest extends AbstractControllerBaseTestCase
{ {
public function testReportIsSecure(): void public function testReportIsSecure(): void
{ {

View File

@@ -10,7 +10,7 @@
namespace App\Tests\Controller\Reporting; namespace App\Tests\Controller\Reporting;
use App\Entity\User; use App\Entity\User;
use App\Tests\Controller\ControllerBaseTest; use App\Tests\Controller\AbstractControllerBaseTestCase;
use App\Tests\DataFixtures\ActivityFixtures; use App\Tests\DataFixtures\ActivityFixtures;
use App\Tests\DataFixtures\CustomerFixtures; use App\Tests\DataFixtures\CustomerFixtures;
use App\Tests\DataFixtures\ProjectFixtures; use App\Tests\DataFixtures\ProjectFixtures;
@@ -19,7 +19,7 @@ use App\Tests\DataFixtures\TimesheetFixtures;
/** /**
* @group integration * @group integration
*/ */
class ProjectDetailsControllerTest extends ControllerBaseTest class ProjectDetailsControllerTest extends AbstractControllerBaseTestCase
{ {
public function testReportIsSecure(): void public function testReportIsSecure(): void
{ {

View File

@@ -10,7 +10,7 @@
namespace App\Tests\Controller\Reporting; namespace App\Tests\Controller\Reporting;
use App\Entity\User; use App\Entity\User;
use App\Tests\Controller\ControllerBaseTest; use App\Tests\Controller\AbstractControllerBaseTestCase;
use App\Tests\DataFixtures\ActivityFixtures; use App\Tests\DataFixtures\ActivityFixtures;
use App\Tests\DataFixtures\CustomerFixtures; use App\Tests\DataFixtures\CustomerFixtures;
use App\Tests\DataFixtures\ProjectFixtures; use App\Tests\DataFixtures\ProjectFixtures;
@@ -19,7 +19,7 @@ use App\Tests\DataFixtures\TimesheetFixtures;
/** /**
* @group integration * @group integration
*/ */
class ProjectInactiveControllerTest extends ControllerBaseTest class ProjectInactiveControllerTest extends AbstractControllerBaseTestCase
{ {
public function testReportIsSecure(): void public function testReportIsSecure(): void
{ {

View File

@@ -10,7 +10,7 @@
namespace App\Tests\Controller\Reporting; namespace App\Tests\Controller\Reporting;
use App\Entity\User; use App\Entity\User;
use App\Tests\Controller\ControllerBaseTest; use App\Tests\Controller\AbstractControllerBaseTestCase;
use App\Tests\DataFixtures\ActivityFixtures; use App\Tests\DataFixtures\ActivityFixtures;
use App\Tests\DataFixtures\CustomerFixtures; use App\Tests\DataFixtures\CustomerFixtures;
use App\Tests\DataFixtures\ProjectFixtures; use App\Tests\DataFixtures\ProjectFixtures;
@@ -20,7 +20,7 @@ use Symfony\Component\HttpFoundation\BinaryFileResponse;
/** /**
* @group integration * @group integration
*/ */
class ProjectViewControllerTest extends ControllerBaseTest class ProjectViewControllerTest extends AbstractControllerBaseTestCase
{ {
public function testReportIsSecure(): void public function testReportIsSecure(): void
{ {
@@ -87,7 +87,7 @@ class ProjectViewControllerTest extends ControllerBaseTest
$this->assertAccessIsGranted($client, '/reporting/project_view/export'); $this->assertAccessIsGranted($client, '/reporting/project_view/export');
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertTrue($response->isSuccessful()); self::assertTrue($response->isSuccessful());
self::assertInstanceOf(BinaryFileResponse::class, $response); self::assertInstanceOf(BinaryFileResponse::class, $response);
self::assertNotNull($response->headers->get('Content-Type')); self::assertNotNull($response->headers->get('Content-Type'));
self::assertEquals('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', $response->headers->get('Content-Type')); self::assertEquals('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', $response->headers->get('Content-Type'));

View File

@@ -12,7 +12,7 @@ namespace App\Tests\Controller\Reporting;
/** /**
* @group integration * @group integration
*/ */
class ReportUsersMonthControllerTest extends AbstractUsersPeriodControllerTest class ReportUsersMonthControllerTest extends AbstractUsersPeriodControllerTestCase
{ {
protected function getReportUrl(): string protected function getReportUrl(): string
{ {

View File

@@ -12,7 +12,7 @@ namespace App\Tests\Controller\Reporting;
/** /**
* @group integration * @group integration
*/ */
class ReportUsersWeekControllerTest extends AbstractUsersPeriodControllerTest class ReportUsersWeekControllerTest extends AbstractUsersPeriodControllerTestCase
{ {
protected function getReportUrl(): string protected function getReportUrl(): string
{ {

View File

@@ -12,7 +12,7 @@ namespace App\Tests\Controller\Reporting;
/** /**
* @group integration * @group integration
*/ */
class ReportUsersYearControllerTest extends AbstractUsersPeriodControllerTest class ReportUsersYearControllerTest extends AbstractUsersPeriodControllerTestCase
{ {
protected function getReportUrl(): string protected function getReportUrl(): string
{ {

View File

@@ -12,7 +12,7 @@ namespace App\Tests\Controller\Reporting;
/** /**
* @group integration * @group integration
*/ */
class UserMonthControllerTest extends AbstractUserPeriodControllerTest class UserMonthControllerTest extends AbstractUserPeriodControllerTestCase
{ {
protected function getReportUrl(): string protected function getReportUrl(): string
{ {

View File

@@ -12,7 +12,7 @@ namespace App\Tests\Controller\Reporting;
/** /**
* @group integration * @group integration
*/ */
class UserWeekControllerTest extends AbstractUserPeriodControllerTest class UserWeekControllerTest extends AbstractUserPeriodControllerTestCase
{ {
protected function getReportUrl(): string protected function getReportUrl(): string
{ {

View File

@@ -12,7 +12,7 @@ namespace App\Tests\Controller\Reporting;
/** /**
* @group integration * @group integration
*/ */
class UserYearControllerTest extends AbstractUserPeriodControllerTest class UserYearControllerTest extends AbstractUserPeriodControllerTestCase
{ {
protected function getReportUrl(): string protected function getReportUrl(): string
{ {

View File

@@ -14,7 +14,7 @@ use App\Entity\User;
/** /**
* @group integration * @group integration
*/ */
class ReportingControllerTest extends ControllerBaseTest class ReportingControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -26,7 +26,7 @@ class ReportingControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$this->request($client, '/reporting/'); $this->request($client, '/reporting/');
$nodes = $client->getCrawler()->filter('section.content div.row-cards a.card-link'); $nodes = $client->getCrawler()->filter('section.content div.row-cards a.card-link');
$this->assertCount(11, $nodes); self::assertCount(11, $nodes);
} }
public function testAllReports(): void public function testAllReports(): void
@@ -34,7 +34,7 @@ class ReportingControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN);
$this->request($client, '/reporting/'); $this->request($client, '/reporting/');
$nodes = $client->getCrawler()->filter('section.content div.row-cards a.card-link'); $nodes = $client->getCrawler()->filter('section.content div.row-cards a.card-link');
$this->assertCount(11, $nodes); self::assertCount(11, $nodes);
foreach ($nodes as $node) { foreach ($nodes as $node) {
self::assertNotNull($node->attributes); self::assertNotNull($node->attributes);
$link = $node->attributes->getNamedItem('href'); $link = $node->attributes->getNamedItem('href');
@@ -52,6 +52,6 @@ class ReportingControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER); $client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$this->request($client, '/reporting/'); $this->request($client, '/reporting/');
$nodes = $client->getCrawler()->filter('section.content div.row-cards a.card-link'); $nodes = $client->getCrawler()->filter('section.content div.row-cards a.card-link');
$this->assertCount(3, $nodes); self::assertCount(3, $nodes);
} }
} }

View File

@@ -9,12 +9,12 @@
namespace App\Tests\Controller\Security; namespace App\Tests\Controller\Security;
use App\Tests\Controller\ControllerBaseTest; use App\Tests\Controller\AbstractControllerBaseTestCase;
/** /**
* @group integration * @group integration
*/ */
class PasswordResetControllerTest extends ControllerBaseTest class PasswordResetControllerTest extends AbstractControllerBaseTestCase
{ {
private function testResetActionWithDeactivatedFeature(string $route, string $method = 'GET'): void private function testResetActionWithDeactivatedFeature(string $route, string $method = 'GET'): void
{ {
@@ -47,16 +47,16 @@ class PasswordResetControllerTest extends ControllerBaseTest
$this->request($client, '/resetting/request'); $this->request($client, '/resetting/request');
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertTrue($response->isSuccessful()); self::assertTrue($response->isSuccessful());
$content = $response->getContent(); $content = $response->getContent();
$this->assertNotFalse($content); self::assertNotFalse($content);
$this->assertStringContainsString('<title>Kimai – Time Tracking</title>', $content); self::assertStringContainsString('<title>Kimai – Time Tracking</title>', $content);
$this->assertStringContainsString('Reset your password', $content); self::assertStringContainsString('Reset your password', $content);
$this->assertStringContainsString('<form class="card-body security-password-reset" action="/en/resetting/send-email" method="post" autocomplete="off">', $content); self::assertStringContainsString('<form class="card-body security-password-reset" action="/en/resetting/send-email" method="post" autocomplete="off">', $content);
$this->assertStringContainsString('<input autocomplete="username" type="text"', $content); self::assertStringContainsString('<input autocomplete="username" type="text"', $content);
$this->assertStringContainsString('id="username" name="username" required="required"', $content); self::assertStringContainsString('id="username" name="username" required="required"', $content);
$this->assertStringContainsString('Reset your password', $content); self::assertStringContainsString('Reset your password', $content);
$form = $client->getCrawler()->filter('form')->form(); $form = $client->getCrawler()->filter('form')->form();
$client->submit($form, [ $client->submit($form, [
@@ -65,12 +65,12 @@ class PasswordResetControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/resetting/check-email')); $this->assertIsRedirect($client, $this->createUrl('/resetting/check-email'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
// TODO test the actual email and provided login link // TODO test the actual email and provided login link
$user = $this->loadUserFromDatabase('john_user'); $user = $this->loadUserFromDatabase('john_user');
$this->assertTrue($user->requiresPasswordReset()); self::assertTrue($user->requiresPasswordReset());
} }
public function testRequestAsLoggedInUserRedirects(): void public function testRequestAsLoggedInUserRedirects(): void
@@ -93,11 +93,11 @@ class PasswordResetControllerTest extends ControllerBaseTest
$this->request($client, '/resetting/send-email', 'POST'); $this->request($client, '/resetting/send-email', 'POST');
$this->assertIsRedirect($client, $this->createUrl('/resetting/check-email')); $this->assertIsRedirect($client, $this->createUrl('/resetting/check-email'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertNotFalse($content); self::assertNotFalse($content);
$this->assertStringContainsString('An email has been sent with a link to reset your password.', $content); self::assertStringContainsString('An email has been sent with a link to reset your password.', $content);
$this->assertStringContainsString('Note: You can only request a new password once every 1:00 hours.', $content); self::assertStringContainsString('Note: You can only request a new password once every 1:00 hours.', $content);
} }
public function testResetWithEmptyUsername(): void public function testResetWithEmptyUsername(): void
@@ -106,11 +106,11 @@ class PasswordResetControllerTest extends ControllerBaseTest
$this->request($client, '/resetting/send-email', 'POST', ['username' => '']); $this->request($client, '/resetting/send-email', 'POST', ['username' => '']);
$this->assertIsRedirect($client, $this->createUrl('/resetting/check-email')); $this->assertIsRedirect($client, $this->createUrl('/resetting/check-email'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertNotFalse($content); self::assertNotFalse($content);
$this->assertStringContainsString('An email has been sent with a link to reset your password.', $content); self::assertStringContainsString('An email has been sent with a link to reset your password.', $content);
$this->assertStringContainsString('Note: You can only request a new password once every 1:00 hours.', $content); self::assertStringContainsString('Note: You can only request a new password once every 1:00 hours.', $content);
} }
public function testResetWithUnknownUsername(): void public function testResetWithUnknownUsername(): void
@@ -119,11 +119,11 @@ class PasswordResetControllerTest extends ControllerBaseTest
$this->request($client, '/resetting/send-email', 'POST', ['username' => 'foobar']); $this->request($client, '/resetting/send-email', 'POST', ['username' => 'foobar']);
$this->assertIsRedirect($client, $this->createUrl('/resetting/check-email')); $this->assertIsRedirect($client, $this->createUrl('/resetting/check-email'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertNotFalse($content); self::assertNotFalse($content);
$this->assertStringContainsString('An email has been sent with a link to reset your password.', $content); self::assertStringContainsString('An email has been sent with a link to reset your password.', $content);
$this->assertStringContainsString('Note: You can only request a new password once every 1:00 hours.', $content); self::assertStringContainsString('Note: You can only request a new password once every 1:00 hours.', $content);
} }
public function testResetWithKnownUsername(): void public function testResetWithKnownUsername(): void
@@ -131,10 +131,10 @@ class PasswordResetControllerTest extends ControllerBaseTest
$client = self::createClient(); $client = self::createClient();
$user = $this->loadUserFromDatabase('john_user'); $user = $this->loadUserFromDatabase('john_user');
$this->assertFalse($user->requiresPasswordReset()); self::assertFalse($user->requiresPasswordReset());
$this->request($client, '/resetting/request'); $this->request($client, '/resetting/request');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form')->form(); $form = $client->getCrawler()->filter('form')->form();
$client->submit($form, [ $client->submit($form, [
'username' => 'john_user', 'username' => 'john_user',
@@ -142,15 +142,15 @@ class PasswordResetControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/resetting/check-email')); $this->assertIsRedirect($client, $this->createUrl('/resetting/check-email'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertNotFalse($content); self::assertNotFalse($content);
$this->assertStringContainsString('An email has been sent with a link to reset your password.', $content); self::assertStringContainsString('An email has been sent with a link to reset your password.', $content);
$this->assertStringContainsString('Note: You can only request a new password once every 1:00 hours.', $content); self::assertStringContainsString('Note: You can only request a new password once every 1:00 hours.', $content);
// TODO test the actual email and provided login link // TODO test the actual email and provided login link
$user = $this->loadUserFromDatabase('john_user'); $user = $this->loadUserFromDatabase('john_user');
$this->assertTrue($user->requiresPasswordReset()); self::assertTrue($user->requiresPasswordReset());
} }
} }

View File

@@ -15,7 +15,7 @@ use App\Controller\Security\SecurityController;
use App\DataFixtures\UserFixtures; use App\DataFixtures\UserFixtures;
use App\Entity\User; use App\Entity\User;
use App\Tests\Configuration\TestConfigLoader; use App\Tests\Configuration\TestConfigLoader;
use App\Tests\Controller\ControllerBaseTest; use App\Tests\Controller\AbstractControllerBaseTestCase;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface; use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
/** /**
@@ -24,7 +24,7 @@ use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
* *
* @group integration * @group integration
*/ */
class SecurityControllerTest extends ControllerBaseTest class SecurityControllerTest extends AbstractControllerBaseTestCase
{ {
public function testRootUrlIsRedirectedToLogin(): void public function testRootUrlIsRedirectedToLogin(): void
{ {
@@ -42,17 +42,17 @@ class SecurityControllerTest extends ControllerBaseTest
$this->request($client, '/login'); $this->request($client, '/login');
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $response->getContent(); $content = $response->getContent();
$this->assertStringContainsString('<title>Kimai – Time Tracking</title>', $content); self::assertStringContainsString('<title>Kimai – Time Tracking</title>', $content);
$this->assertStringContainsString('<form action="/en/login_check" method="post"', $content); self::assertStringContainsString('<form action="/en/login_check" method="post"', $content);
$this->assertStringContainsString('<input autocomplete="username" type="text" id="username" name="_username"', $content); self::assertStringContainsString('<input autocomplete="username" type="text" id="username" name="_username"', $content);
$this->assertStringContainsString('<input autocomplete="new-password" id="password" name="_password" type="password"', $content); self::assertStringContainsString('<input autocomplete="new-password" id="password" name="_password" type="password"', $content);
$this->assertStringContainsString('">Log in</button>', $content); self::assertStringContainsString('">Log in</button>', $content);
$this->assertStringContainsString('<input type="hidden" name="_csrf_token" value="', $content); self::assertStringContainsString('<input type="hidden" name="_csrf_token" value="', $content);
$this->assertStringNotContainsString('<a href="/en/register/"', $content); self::assertStringNotContainsString('<a href="/en/register/"', $content);
$this->assertStringNotContainsString('Register a new account', $content); self::assertStringNotContainsString('Register a new account', $content);
} }
public function testLoginPositive(): void public function testLoginPositive(): void
@@ -60,7 +60,7 @@ class SecurityControllerTest extends ControllerBaseTest
$client = self::createClient(); $client = self::createClient();
$this->request($client, '/login'); $this->request($client, '/login');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('body form')->form(); $form = $client->getCrawler()->filter('body form')->form();
$client->submit($form, [ $client->submit($form, [
@@ -77,7 +77,7 @@ class SecurityControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, '/timesheet/'); // redirect to configured start page $this->assertIsRedirect($client, '/timesheet/'); // redirect to configured start page
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
} }
public function testLoginAlreadyLoggedIn(): void public function testLoginAlreadyLoggedIn(): void
@@ -92,7 +92,7 @@ class SecurityControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, '/timesheet/'); // redirect to configured start page $this->assertIsRedirect($client, '/timesheet/'); // redirect to configured start page
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
} }
public function testLoginNegative(): void public function testLoginNegative(): void
@@ -100,7 +100,7 @@ class SecurityControllerTest extends ControllerBaseTest
$client = self::createClient(); $client = self::createClient();
$this->request($client, '/login'); $this->request($client, '/login');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('body form')->form(); $form = $client->getCrawler()->filter('body form')->form();
$client->submit($form, [ $client->submit($form, [
@@ -111,7 +111,7 @@ class SecurityControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client); // redirect to root URL $this->assertIsRedirect($client); // redirect to root URL
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
self::assertStringContainsString('<div class="alert alert-important alert-danger">Invalid credentials.</div>', $client->getResponse()->getContent()); self::assertStringContainsString('<div class="alert alert-important alert-danger">Invalid credentials.</div>', $client->getResponse()->getContent());
} }

View File

@@ -10,13 +10,13 @@
namespace App\Tests\Controller\Security; namespace App\Tests\Controller\Security;
use App\Entity\User; use App\Entity\User;
use App\Tests\Controller\ControllerBaseTest; use App\Tests\Controller\AbstractControllerBaseTestCase;
use Symfony\Bundle\FrameworkBundle\KernelBrowser; use Symfony\Bundle\FrameworkBundle\KernelBrowser;
/** /**
* @group integration * @group integration
*/ */
class SelfRegistrationControllerTest extends ControllerBaseTest class SelfRegistrationControllerTest extends AbstractControllerBaseTestCase
{ {
private function assertRegisterActionWithDeactivatedFeature(string $route): void private function assertRegisterActionWithDeactivatedFeature(string $route): void
{ {
@@ -53,22 +53,22 @@ class SelfRegistrationControllerTest extends ControllerBaseTest
$this->request($client, '/register/'); $this->request($client, '/register/');
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertTrue($response->isSuccessful()); self::assertTrue($response->isSuccessful());
$content = $response->getContent(); $content = $response->getContent();
$this->assertStringContainsString('<title>Kimai – Time Tracking</title>', $content); self::assertStringContainsString('<title>Kimai – Time Tracking</title>', $content);
$this->assertStringContainsString('Register a new account', $content); self::assertStringContainsString('Register a new account', $content);
$this->assertStringContainsString('<form name="user_registration_form" method="post" action="/en/register/"', $content); self::assertStringContainsString('<form name="user_registration_form" method="post" action="/en/register/"', $content);
$this->assertStringContainsString('<input type="email"', $content); self::assertStringContainsString('<input type="email"', $content);
$this->assertStringContainsString('id="user_registration_form_email" name="user_registration_form[email]" required="required"', $content); self::assertStringContainsString('id="user_registration_form_email" name="user_registration_form[email]" required="required"', $content);
$this->assertStringContainsString('<input type="text"', $content); self::assertStringContainsString('<input type="text"', $content);
$this->assertStringContainsString('id="user_registration_form_username" name="user_registration_form[username]" required="required" maxlength="64" pattern="', $content); self::assertStringContainsString('id="user_registration_form_username" name="user_registration_form[username]" required="required" maxlength="64" pattern="', $content);
$this->assertStringContainsString('<input type="password"', $content); self::assertStringContainsString('<input type="password"', $content);
$this->assertStringContainsString('id="user_registration_form_plainPassword_first" name="user_registration_form[plainPassword][first]" required="required"', $content); self::assertStringContainsString('id="user_registration_form_plainPassword_first" name="user_registration_form[plainPassword][first]" required="required"', $content);
$this->assertStringContainsString('id="user_registration_form_plainPassword_second" name="user_registration_form[plainPassword][second]" required="required"', $content); self::assertStringContainsString('id="user_registration_form_plainPassword_second" name="user_registration_form[plainPassword][second]" required="required"', $content);
$this->assertStringContainsString('<input type="hidden"', $content); self::assertStringContainsString('<input type="hidden"', $content);
$this->assertStringContainsString('id="user_registration_form__token" name="user_registration_form[_token]"', $content); self::assertStringContainsString('id="user_registration_form__token" name="user_registration_form[_token]"', $content);
$this->assertStringContainsString('>Register</button>', $content); self::assertStringContainsString('>Register</button>', $content);
} }
private function createUser(KernelBrowser $client, string $username, string $email, string $password): User private function createUser(KernelBrowser $client, string $username, string $email, string $password): User
@@ -77,7 +77,7 @@ class SelfRegistrationControllerTest extends ControllerBaseTest
$this->request($client, '/register/'); $this->request($client, '/register/');
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertTrue($response->isSuccessful()); self::assertTrue($response->isSuccessful());
$form = $client->getCrawler()->filter('form[name=user_registration_form]')->form(); $form = $client->getCrawler()->filter('form[name=user_registration_form]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -93,7 +93,7 @@ class SelfRegistrationControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/register/check-email')); $this->assertIsRedirect($client, $this->createUrl('/register/check-email'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
return $this->loadUserFromDatabase($username); return $this->loadUserFromDatabase($username);
} }
@@ -106,7 +106,7 @@ class SelfRegistrationControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/register/')); $this->assertIsRedirect($client, $this->createUrl('/register/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
} }
public function testRegisterAccount(): void public function testRegisterAccount(): void
@@ -115,9 +115,9 @@ class SelfRegistrationControllerTest extends ControllerBaseTest
$this->createUser($client, 'example', 'register@example.com', 'test1234'); $this->createUser($client, 'example', 'register@example.com', 'test1234');
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertStringContainsString('<title>Kimai – Time Tracking</title>', $content); self::assertStringContainsString('<title>Kimai – Time Tracking</title>', $content);
$this->assertStringContainsString('An e-mail has been sent to register@example.com. It contains a link you must click to activate your account.', $content); self::assertStringContainsString('An e-mail has been sent to register@example.com. It contains a link you must click to activate your account.', $content);
$this->assertStringContainsString('<a href="/en/login">', $content); self::assertStringContainsString('<a href="/en/login">', $content);
} }
public function testConfirmWithInvalidToken(): void public function testConfirmWithInvalidToken(): void
@@ -128,7 +128,7 @@ class SelfRegistrationControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/login')); $this->assertIsRedirect($client, $this->createUrl('/login'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
} }
public function testConfirmAccount(): void public function testConfirmAccount(): void
@@ -143,9 +143,9 @@ class SelfRegistrationControllerTest extends ControllerBaseTest
$this->request($client, '/register/confirm/' . $token); $this->request($client, '/register/confirm/' . $token);
$this->assertIsRedirect($client, $this->createUrl('/register/confirmed')); $this->assertIsRedirect($client, $this->createUrl('/register/confirmed'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertStringContainsString('Congratulations example, your account is now activated.', $content); self::assertStringContainsString('Congratulations example, your account is now activated.', $content);
$user = $this->loadUserFromDatabase('example'); $user = $this->loadUserFromDatabase('example');
self::assertTrue($user->isEnabled()); self::assertTrue($user->isEnabled());
@@ -160,7 +160,7 @@ class SelfRegistrationControllerTest extends ControllerBaseTest
// AccessDeniedException redirects to login // AccessDeniedException redirects to login
$this->assertIsRedirect($client, $this->createUrl('/login')); $this->assertIsRedirect($client, $this->createUrl('/login'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
} }
/** /**
@@ -174,7 +174,7 @@ class SelfRegistrationControllerTest extends ControllerBaseTest
$this->assertHasValidationError($client, '/register/', 'form[name=user_registration_form]', $formData, $validationFields); $this->assertHasValidationError($client, '/register/', 'form[name=user_registration_form]', $formData, $validationFields);
} }
public function getValidationTestData(): array // @phpstan-ignore missingType.iterableValue public static function getValidationTestData(): array // @phpstan-ignore missingType.iterableValue
{ {
return [ return [
[ [

View File

@@ -15,7 +15,7 @@ use App\Entity\User;
/** /**
* @group integration * @group integration
*/ */
class SystemConfigurationControllerTest extends ControllerBaseTest class SystemConfigurationControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -41,17 +41,17 @@ class SystemConfigurationControllerTest extends ControllerBaseTest
$expectedCount = \count($expectedForms) + 1; // the menu is another card $expectedCount = \count($expectedForms) + 1; // the menu is another card
$result = $client->getCrawler()->filter('section.content div.card'); $result = $client->getCrawler()->filter('section.content div.card');
$this->assertEquals($expectedCount, \count($result)); self::assertEquals($expectedCount, \count($result));
$result = $client->getCrawler()->filter('section.content div.card form'); $result = $client->getCrawler()->filter('section.content div.card form');
$this->assertEquals(\count($expectedForms), \count($result)); self::assertEquals(\count($expectedForms), \count($result));
foreach ($expectedForms as $formConfig) { foreach ($expectedForms as $formConfig) {
$result = $client->getCrawler()->filter($formConfig[0]); $result = $client->getCrawler()->filter($formConfig[0]);
$this->assertEquals(1, \count($result)); self::assertEquals(1, \count($result));
$form = $result->form(); $form = $result->form();
$this->assertStringEndsWith($formConfig[1], $form->getUri()); self::assertStringEndsWith($formConfig[1], $form->getUri());
$this->assertEquals('POST', $form->getMethod()); self::assertEquals('POST', $form->getMethod());
} }
} }
@@ -61,19 +61,19 @@ class SystemConfigurationControllerTest extends ControllerBaseTest
$this->assertAccessIsGranted($client, '/admin/system-config/edit/timesheet'); $this->assertAccessIsGranted($client, '/admin/system-config/edit/timesheet');
$result = $client->getCrawler()->filter('section.content div.card'); $result = $client->getCrawler()->filter('section.content div.card');
$this->assertEquals(1, \count($result)); self::assertEquals(1, \count($result));
$result = $client->getCrawler()->filter('section.content div.card form'); $result = $client->getCrawler()->filter('section.content div.card form');
$this->assertEquals(1, \count($result)); self::assertEquals(1, \count($result));
$result = $client->getCrawler()->filter('form[name=system_configuration_form_timesheet]'); $result = $client->getCrawler()->filter('form[name=system_configuration_form_timesheet]');
$this->assertEquals(1, \count($result)); self::assertEquals(1, \count($result));
$form = $result->form(); $form = $result->form();
$this->assertEquals('POST', $form->getMethod()); self::assertEquals('POST', $form->getMethod());
} }
/** /**
* @return array<array<string>> * @return array<array<non-empty-string>>
*/ */
public function getTestDataForms(): array public function getTestDataForms(): array
{ {
@@ -100,10 +100,10 @@ class SystemConfigurationControllerTest extends ControllerBaseTest
$this->assertAccessIsGranted($client, '/admin/system-config/'); $this->assertAccessIsGranted($client, '/admin/system-config/');
$configService = $this->getSystemConfiguration(); $configService = $this->getSystemConfiguration();
$this->assertEquals('default', $configService->find('timesheet.mode')); self::assertEquals('default', $configService->find('timesheet.mode'));
$this->assertTrue($configService->find('timesheet.rules.allow_future_times')); self::assertTrue($configService->find('timesheet.rules.allow_future_times'));
$this->assertTrue($configService->find('timesheet.rules.allow_zero_duration')); self::assertTrue($configService->find('timesheet.rules.allow_zero_duration'));
$this->assertEquals(1, $configService->find('timesheet.active_entries.hard_limit')); self::assertEquals(1, $configService->find('timesheet.active_entries.hard_limit'));
$form = $client->getCrawler()->filter('form[name=system_configuration_form_timesheet]')->form(); $form = $client->getCrawler()->filter('form[name=system_configuration_form_timesheet]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -122,14 +122,14 @@ class SystemConfigurationControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/admin/system-config/')); $this->assertIsRedirect($client, $this->createUrl('/admin/system-config/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSaveSuccess($client); $this->assertHasFlashSaveSuccess($client);
$configService = $this->getSystemConfiguration(); $configService = $this->getSystemConfiguration();
$this->assertEquals('punch', $configService->find('timesheet.mode')); self::assertEquals('punch', $configService->find('timesheet.mode'));
$this->assertFalse($configService->find('timesheet.rules.allow_future_times')); self::assertFalse($configService->find('timesheet.rules.allow_future_times'));
$this->assertFalse($configService->find('timesheet.rules.allow_overlapping_records')); self::assertFalse($configService->find('timesheet.rules.allow_overlapping_records'));
$this->assertEquals(99, $configService->find('timesheet.active_entries.hard_limit')); self::assertEquals(99, $configService->find('timesheet.active_entries.hard_limit'));
} }
public function testUpdateLockdownPeriodConfig(): void public function testUpdateLockdownPeriodConfig(): void
@@ -138,10 +138,10 @@ class SystemConfigurationControllerTest extends ControllerBaseTest
$this->assertAccessIsGranted($client, '/admin/system-config/'); $this->assertAccessIsGranted($client, '/admin/system-config/');
$configService = $this->getSystemConfiguration(); $configService = $this->getSystemConfiguration();
$this->assertNull($configService->find('timesheet.rules.lockdown_period_start')); self::assertNull($configService->find('timesheet.rules.lockdown_period_start'));
$this->assertNull($configService->find('timesheet.rules.lockdown_period_end')); self::assertNull($configService->find('timesheet.rules.lockdown_period_end'));
$this->assertNull($configService->find('timesheet.rules.lockdown_period_timezone')); self::assertNull($configService->find('timesheet.rules.lockdown_period_timezone'));
$this->assertNull($configService->find('timesheet.rules.lockdown_grace_period')); self::assertNull($configService->find('timesheet.rules.lockdown_grace_period'));
$form = $client->getCrawler()->filter('form[name=system_configuration_form_lockdown_period]')->form(); $form = $client->getCrawler()->filter('form[name=system_configuration_form_lockdown_period]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -157,14 +157,14 @@ class SystemConfigurationControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/admin/system-config/')); $this->assertIsRedirect($client, $this->createUrl('/admin/system-config/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSaveSuccess($client); $this->assertHasFlashSaveSuccess($client);
$configService = $this->getSystemConfiguration(); $configService = $this->getSystemConfiguration();
$this->assertEquals('first day of last month 01:23:45', $configService->find('timesheet.rules.lockdown_period_start')); self::assertEquals('first day of last month 01:23:45', $configService->find('timesheet.rules.lockdown_period_start'));
$this->assertEquals('last day of last month 23:01:45', $configService->find('timesheet.rules.lockdown_period_end')); self::assertEquals('last day of last month 23:01:45', $configService->find('timesheet.rules.lockdown_period_end'));
$this->assertEquals('Africa/Bangui', $configService->find('timesheet.rules.lockdown_period_timezone')); self::assertEquals('Africa/Bangui', $configService->find('timesheet.rules.lockdown_period_timezone'));
$this->assertEquals('+ 12 hours', $configService->find('timesheet.rules.lockdown_grace_period')); self::assertEquals('+ 12 hours', $configService->find('timesheet.rules.lockdown_grace_period'));
} }
public function testUpdateTimesheetConfigValidation(): void public function testUpdateTimesheetConfigValidation(): void
@@ -199,9 +199,9 @@ class SystemConfigurationControllerTest extends ControllerBaseTest
$this->assertAccessIsGranted($client, '/admin/system-config/'); $this->assertAccessIsGranted($client, '/admin/system-config/');
$configService = $this->getSystemConfiguration(); $configService = $this->getSystemConfiguration();
$this->assertNull($configService->find('defaults.customer.timezone')); self::assertNull($configService->find('defaults.customer.timezone'));
$this->assertEquals('DE', $configService->find('defaults.customer.country')); self::assertEquals('DE', $configService->find('defaults.customer.country'));
$this->assertEquals('EUR', $configService->find('defaults.customer.currency')); self::assertEquals('EUR', $configService->find('defaults.customer.currency'));
$form = $client->getCrawler()->filter('form[name=system_configuration_form_customer]')->form(); $form = $client->getCrawler()->filter('form[name=system_configuration_form_customer]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -216,13 +216,13 @@ class SystemConfigurationControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/admin/system-config/')); $this->assertIsRedirect($client, $this->createUrl('/admin/system-config/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSaveSuccess($client); $this->assertHasFlashSaveSuccess($client);
$configService = $this->getSystemConfiguration(); $configService = $this->getSystemConfiguration();
$this->assertEquals('Atlantic/Canary', $configService->find('defaults.customer.timezone')); self::assertEquals('Atlantic/Canary', $configService->find('defaults.customer.timezone'));
$this->assertEquals('BB', $configService->find('defaults.customer.country')); self::assertEquals('BB', $configService->find('defaults.customer.country'));
$this->assertEquals('GBP', $configService->find('defaults.customer.currency')); self::assertEquals('GBP', $configService->find('defaults.customer.currency'));
} }
public function testUpdateCustomerConfigWithSingleParam(): void public function testUpdateCustomerConfigWithSingleParam(): void
@@ -244,7 +244,7 @@ class SystemConfigurationControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/admin/system-config/edit/customer')); $this->assertIsRedirect($client, $this->createUrl('/admin/system-config/edit/customer'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSaveSuccess($client); $this->assertHasFlashSaveSuccess($client);
} }
@@ -254,9 +254,9 @@ class SystemConfigurationControllerTest extends ControllerBaseTest
$this->assertAccessIsGranted($client, '/admin/system-config/edit/user'); $this->assertAccessIsGranted($client, '/admin/system-config/edit/user');
$configService = $this->getSystemConfiguration(); $configService = $this->getSystemConfiguration();
$this->assertNull($configService->find('defaults.user.timezone')); self::assertNull($configService->find('defaults.user.timezone'));
$this->assertEquals('default', $configService->find('defaults.user.theme')); self::assertEquals('default', $configService->find('defaults.user.theme'));
$this->assertEquals('en', $configService->find('defaults.user.language')); self::assertEquals('en', $configService->find('defaults.user.language'));
$form = $client->getCrawler()->filter('form[name=system_configuration_form_user]')->form(); $form = $client->getCrawler()->filter('form[name=system_configuration_form_user]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -271,13 +271,13 @@ class SystemConfigurationControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/admin/system-config/edit/user')); $this->assertIsRedirect($client, $this->createUrl('/admin/system-config/edit/user'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSaveSuccess($client); $this->assertHasFlashSaveSuccess($client);
$configService = $this->getSystemConfiguration(); $configService = $this->getSystemConfiguration();
$this->assertEquals('Pacific/Tahiti', $configService->find('defaults.user.timezone')); self::assertEquals('Pacific/Tahiti', $configService->find('defaults.user.timezone'));
$this->assertEquals('dark', $configService->find('defaults.user.theme')); self::assertEquals('dark', $configService->find('defaults.user.theme'));
$this->assertEquals('ru', $configService->find('defaults.user.language')); self::assertEquals('ru', $configService->find('defaults.user.language'));
} }
public function testUpdateCustomerConfigValidation(): void public function testUpdateCustomerConfigValidation(): void
@@ -309,7 +309,7 @@ class SystemConfigurationControllerTest extends ControllerBaseTest
$this->assertAccessIsGranted($client, '/admin/system-config/'); $this->assertAccessIsGranted($client, '/admin/system-config/');
$configService = $this->getSystemConfiguration(); $configService = $this->getSystemConfiguration();
$this->assertFalse($configService->find('timesheet.markdown_content')); self::assertFalse($configService->find('timesheet.markdown_content'));
$form = $client->getCrawler()->filter('form[name=system_configuration_form_theme]')->form(); $form = $client->getCrawler()->filter('form[name=system_configuration_form_theme]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -322,11 +322,11 @@ class SystemConfigurationControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/admin/system-config/')); $this->assertIsRedirect($client, $this->createUrl('/admin/system-config/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSaveSuccess($client); $this->assertHasFlashSaveSuccess($client);
$configService = $this->getSystemConfiguration(); $configService = $this->getSystemConfiguration();
$this->assertTrue($configService->find('timesheet.markdown_content')); self::assertTrue($configService->find('timesheet.markdown_content'));
} }
public function testUpdateThemeConfigValidation(): void public function testUpdateThemeConfigValidation(): void
@@ -355,12 +355,12 @@ class SystemConfigurationControllerTest extends ControllerBaseTest
$this->assertAccessIsGranted($client, '/admin/system-config/'); $this->assertAccessIsGranted($client, '/admin/system-config/');
$configService = $this->getSystemConfiguration(); $configService = $this->getSystemConfiguration();
$this->assertTrue($configService->find('calendar.week_numbers')); self::assertTrue($configService->find('calendar.week_numbers'));
$this->assertTrue($configService->find('calendar.weekends')); self::assertTrue($configService->find('calendar.weekends'));
$this->assertEquals('08:00', $configService->find('calendar.businessHours.begin')); self::assertEquals('08:00', $configService->find('calendar.businessHours.begin'));
$this->assertEquals('20:00', $configService->find('calendar.businessHours.end')); self::assertEquals('20:00', $configService->find('calendar.businessHours.end'));
$this->assertEquals('00:00', $configService->find('calendar.visibleHours.begin')); self::assertEquals('00:00', $configService->find('calendar.visibleHours.begin'));
$this->assertEquals('23:59', $configService->find('calendar.visibleHours.end')); self::assertEquals('23:59', $configService->find('calendar.visibleHours.end'));
$form = $client->getCrawler()->filter('form[name=system_configuration_form_calendar]')->form(); $form = $client->getCrawler()->filter('form[name=system_configuration_form_calendar]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -378,16 +378,16 @@ class SystemConfigurationControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/admin/system-config/')); $this->assertIsRedirect($client, $this->createUrl('/admin/system-config/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSaveSuccess($client); $this->assertHasFlashSaveSuccess($client);
$configService = $this->getSystemConfiguration(); $configService = $this->getSystemConfiguration();
$this->assertFalse($configService->find('calendar.week_numbers')); self::assertFalse($configService->find('calendar.week_numbers'));
$this->assertFalse($configService->find('calendar.weekends')); self::assertFalse($configService->find('calendar.weekends'));
$this->assertEquals('10:00', $configService->find('calendar.businessHours.begin')); self::assertEquals('10:00', $configService->find('calendar.businessHours.begin'));
$this->assertEquals('16:00', $configService->find('calendar.businessHours.end')); self::assertEquals('16:00', $configService->find('calendar.businessHours.end'));
$this->assertEquals('05:17', $configService->find('calendar.visibleHours.begin')); self::assertEquals('05:17', $configService->find('calendar.visibleHours.begin'));
$this->assertEquals('21:43', $configService->find('calendar.visibleHours.end')); self::assertEquals('21:43', $configService->find('calendar.visibleHours.end'));
} }
public function testUpdateCalendarConfigValidation(): void public function testUpdateCalendarConfigValidation(): void

View File

@@ -16,7 +16,7 @@ use App\Tests\DataFixtures\TagFixtures;
/** /**
* @group integration * @group integration
*/ */
class TagControllerTest extends ControllerBaseTest class TagControllerTest extends AbstractControllerBaseTestCase
{ {
/** /**
* @return Tag[] * @return Tag[]
@@ -53,14 +53,14 @@ class TagControllerTest extends ControllerBaseTest
$this->importTags(); $this->importTags();
$this->request($client, '/admin/tags/'); $this->request($client, '/admin/tags/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form.searchform')->form(); $form = $client->getCrawler()->filter('form.searchform')->form();
$client->submit($form, [ $client->submit($form, [
'searchTerm' => 'Support', 'searchTerm' => 'Support',
]); ]);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasDataTable($client); $this->assertHasDataTable($client);
$this->assertDataTableRowCount($client, 'datatable_admin_tags', 2); $this->assertDataTableRowCount($client, 'datatable_admin_tags', 2);
} }
@@ -83,7 +83,7 @@ class TagControllerTest extends ControllerBaseTest
$this->request($client, '/admin/tags/' . $id . '/edit'); $this->request($client, '/admin/tags/' . $id . '/edit');
$editForm = $client->getCrawler()->filter('form[name=tag_edit_form]')->form(); $editForm = $client->getCrawler()->filter('form[name=tag_edit_form]')->form();
$this->assertEquals('A tAG Name!', $editForm->get('tag_edit_form[name]')->getValue()); self::assertEquals('A tAG Name!', $editForm->get('tag_edit_form[name]')->getValue());
} }
public function testEditAction(): void public function testEditAction(): void
@@ -102,7 +102,7 @@ class TagControllerTest extends ControllerBaseTest
$this->assertHasDataTable($client); $this->assertHasDataTable($client);
$this->request($client, '/admin/tags/' . $id . '/edit'); $this->request($client, '/admin/tags/' . $id . '/edit');
$editForm = $client->getCrawler()->filter('form[name=tag_edit_form]')->form(); $editForm = $client->getCrawler()->filter('form[name=tag_edit_form]')->form();
$this->assertEquals('Test 2 updated', $editForm->get('tag_edit_form[name]')->getValue()); self::assertEquals('Test 2 updated', $editForm->get('tag_edit_form[name]')->getValue());
} }
public function testMultiDeleteAction(): void public function testMultiDeleteAction(): void

View File

@@ -17,7 +17,7 @@ use Symfony\Component\HttpKernel\HttpKernelBrowser;
/** /**
* @group integration * @group integration
*/ */
class TeamControllerTest extends ControllerBaseTest class TeamControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -62,7 +62,7 @@ class TeamControllerTest extends ControllerBaseTest
'searchTerm' => 'foo', 'searchTerm' => 'foo',
]); ]);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasDataTable($client); $this->assertHasDataTable($client);
$this->assertDataTableRowCount($client, 'datatable_admin_teams', 5); $this->assertDataTableRowCount($client, 'datatable_admin_teams', 5);
} }
@@ -73,7 +73,7 @@ class TeamControllerTest extends ControllerBaseTest
$this->assertAccessIsGranted($client, '/admin/teams/create'); $this->assertAccessIsGranted($client, '/admin/teams/create');
$form = $client->getCrawler()->filter('form[name=team_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=team_edit_form]')->form();
$this->assertEquals('', $form->get('team_edit_form[name]')->getValue()); self::assertEquals('', $form->get('team_edit_form[name]')->getValue());
$values = $form->getPhpValues(); $values = $form->getPhpValues();
$values['team_edit_form']['name'] = 'Test Team' . uniqid(); $values['team_edit_form']['name'] = 'Test Team' . uniqid();
@@ -91,10 +91,10 @@ class TeamControllerTest extends ControllerBaseTest
protected function assertHasCustomerAndProjectPermissionBoxes(HttpKernelBrowser $client): void protected function assertHasCustomerAndProjectPermissionBoxes(HttpKernelBrowser $client): void
{ {
$content = $client->getResponse()->getContent(); $content = $client->getResponse()->getContent();
$this->assertStringContainsString('Grant access to customers', $content); self::assertStringContainsString('Grant access to customers', $content);
$this->assertStringContainsString('Grant access to projects', $content); self::assertStringContainsString('Grant access to projects', $content);
$this->assertEquals(1, $client->getCrawler()->filter('form[name=team_customer_form]')->count()); self::assertEquals(1, $client->getCrawler()->filter('form[name=team_customer_form]')->count());
$this->assertEquals(1, $client->getCrawler()->filter('form[name=team_project_form]')->count()); self::assertEquals(1, $client->getCrawler()->filter('form[name=team_project_form]')->count());
} }
public function testEditAction(): void public function testEditAction(): void
@@ -116,7 +116,7 @@ class TeamControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/admin/teams/1/edit')); $this->assertIsRedirect($client, $this->createUrl('/admin/teams/1/edit'));
$client->followRedirect(); $client->followRedirect();
$editForm = $client->getCrawler()->filter('form[name=team_edit_form]')->form(); $editForm = $client->getCrawler()->filter('form[name=team_edit_form]')->form();
$this->assertEquals('Test Team 2', $editForm->get('team_edit_form[name]')->getValue()); self::assertEquals('Test Team 2', $editForm->get('team_edit_form[name]')->getValue());
} }
public function testEditMemberAction(): void public function testEditMemberAction(): void
@@ -137,7 +137,7 @@ class TeamControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/admin/teams/1/edit')); $this->assertIsRedirect($client, $this->createUrl('/admin/teams/1/edit'));
$client->followRedirect(); $client->followRedirect();
$editForm = $client->getCrawler()->filter('form[name=team_edit_form]')->form(); $editForm = $client->getCrawler()->filter('form[name=team_edit_form]')->form();
$this->assertEquals('Test Team 2', $editForm->get('team_edit_form[name]')->getValue()); self::assertEquals('Test Team 2', $editForm->get('team_edit_form[name]')->getValue());
} }
public function testDuplicateAction(): void public function testDuplicateAction(): void
@@ -153,6 +153,6 @@ class TeamControllerTest extends ControllerBaseTest
$this->requestPure($client, $location); $this->requestPure($client, $location);
$editForm = $client->getCrawler()->filter('form[name=team_edit_form]')->form(); $editForm = $client->getCrawler()->filter('form[name=team_edit_form]')->form();
$this->assertEquals('Test team (1)', $editForm->get('team_edit_form[name]')->getValue()); self::assertEquals('Test team (1)', $editForm->get('team_edit_form[name]')->getValue());
} }
} }

View File

@@ -25,7 +25,7 @@ use Symfony\Component\EventDispatcher\EventDispatcher;
/** /**
* @group integration * @group integration
*/ */
class TimesheetControllerTest extends ControllerBaseTest class TimesheetControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -36,7 +36,7 @@ class TimesheetControllerTest extends ControllerBaseTest
{ {
$client = $this->getClientForAuthenticatedUser(); $client = $this->getClientForAuthenticatedUser();
$this->request($client, '/timesheet/'); $this->request($client, '/timesheet/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
// there are no records by default in the test database // there are no records by default in the test database
$this->assertHasNoEntriesWithFilter($client); $this->assertHasNoEntriesWithFilter($client);
@@ -68,7 +68,7 @@ class TimesheetControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$this->request($client, '/timesheet/'); $this->request($client, '/timesheet/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$dateRange = $this->formatDateRange($start, new \DateTime('last day of this month')); $dateRange = $this->formatDateRange($start, new \DateTime('last day of this month'));
@@ -83,7 +83,7 @@ class TimesheetControllerTest extends ControllerBaseTest
'tags' => 'foo', 'tags' => 'foo',
]); ]);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasDataTable($client); $this->assertHasDataTable($client);
$this->assertDataTableRowCount($client, 'datatable_timesheet', 7); $this->assertDataTableRowCount($client, 'datatable_timesheet', 7);
@@ -122,7 +122,7 @@ class TimesheetControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$this->request($client, '/timesheet/'); $this->request($client, '/timesheet/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form.searchform')->form(); $form = $client->getCrawler()->filter('form.searchform')->form();
$client->submit($form, [ $client->submit($form, [
@@ -130,7 +130,7 @@ class TimesheetControllerTest extends ControllerBaseTest
'tags' => [$id], 'tags' => [$id],
]); ]);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasDataTable($client); $this->assertHasDataTable($client);
$this->assertDataTableRowCount($client, 'datatable_timesheet', 5); $this->assertDataTableRowCount($client, 'datatable_timesheet', 5);
} }
@@ -159,7 +159,7 @@ class TimesheetControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$this->request($client, '/timesheet/'); $this->request($client, '/timesheet/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$dateRange = $this->formatDateRange(new \DateTime('-10 days'), new \DateTime()); $dateRange = $this->formatDateRange(new \DateTime('-10 days'), new \DateTime());
@@ -171,15 +171,15 @@ class TimesheetControllerTest extends ControllerBaseTest
'customers' => [], 'customers' => [],
]); ]);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$node = $client->getCrawler()->filter('body'); $node = $client->getCrawler()->filter('body');
/** @var \DOMElement $body */ /** @var \DOMElement $body */
$body = $node->getNode(0); $body = $node->getNode(0);
$this->assertEquals('invoice_print', $body->getAttribute('class')); self::assertEquals('invoice_print', $body->getAttribute('class'));
$result = $node->filter('section.invoice table.table tbody tr'); $result = $node->filter('section.invoice table.table tbody tr');
$this->assertEquals(5, \count($result)); self::assertEquals(5, \count($result));
} }
public function testExporterNotFoundAction(): void public function testExporterNotFoundAction(): void
@@ -193,7 +193,7 @@ class TimesheetControllerTest extends ControllerBaseTest
{ {
$client = $this->getClientForAuthenticatedUser(); $client = $this->getClientForAuthenticatedUser();
$this->request($client, '/timesheet/create'); $this->request($client, '/timesheet/create');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -211,18 +211,18 @@ class TimesheetControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/timesheet/')); $this->assertIsRedirect($client, $this->createUrl('/timesheet/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
$timesheet = $em->getRepository(Timesheet::class)->findAll()[0]; $timesheet = $em->getRepository(Timesheet::class)->findAll()[0];
$this->assertInstanceOf(\DateTime::class, $timesheet->getBegin()); self::assertInstanceOf(\DateTime::class, $timesheet->getBegin());
$this->assertNull($timesheet->getEnd()); self::assertNull($timesheet->getEnd());
$this->assertEquals('Testing is fun!', $timesheet->getDescription()); self::assertEquals('Testing is fun!', $timesheet->getDescription());
$this->assertEquals(0, $timesheet->getRate()); self::assertEquals(0, $timesheet->getRate());
$this->assertNull($timesheet->getHourlyRate()); self::assertNull($timesheet->getHourlyRate());
$this->assertNull($timesheet->getFixedRate()); self::assertNull($timesheet->getFixedRate());
} }
/** /**
@@ -232,7 +232,7 @@ class TimesheetControllerTest extends ControllerBaseTest
{ {
$client = $this->getClientForAuthenticatedUser(); $client = $this->getClientForAuthenticatedUser();
$this->request($client, '/timesheet/create'); $this->request($client, '/timesheet/create');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -249,20 +249,20 @@ class TimesheetControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/timesheet/')); $this->assertIsRedirect($client, $this->createUrl('/timesheet/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
$timesheet = $em->getRepository(Timesheet::class)->findAll()[0]; $timesheet = $em->getRepository(Timesheet::class)->findAll()[0];
$this->assertInstanceOf(\DateTime::class, $timesheet->getBegin()); self::assertInstanceOf(\DateTime::class, $timesheet->getBegin());
$this->assertInstanceOf(\DateTime::class, $timesheet->getEnd()); self::assertInstanceOf(\DateTime::class, $timesheet->getEnd());
$this->assertEquals($expectedDuration, $timesheet->getDuration()); self::assertEquals($expectedDuration, $timesheet->getDuration());
$this->assertEquals($expectedEnd, $timesheet->getEnd()->format('Y-m-d H:i:s')); self::assertEquals($expectedEnd, $timesheet->getEnd()->format('Y-m-d H:i:s'));
$this->assertEquals('Testing is fun!', $timesheet->getDescription()); self::assertEquals('Testing is fun!', $timesheet->getDescription());
} }
public function getTestDataForDurationValues(): \Generator public static function getTestDataForDurationValues(): \Generator
{ {
// duration is ignored, because end is set and the duration might come from a rounding rule (by default seconds are rounded down with 1) // duration is ignored, because end is set and the duration might come from a rounding rule (by default seconds are rounded down with 1)
yield ['12/31/2018', '12:00 AM', '02:10 AM', '01:00', 7800, '2018-12-31 02:10:00']; yield ['12/31/2018', '12:00 AM', '02:10 AM', '01:00', 7800, '2018-12-31 02:10:00'];
@@ -291,26 +291,26 @@ class TimesheetControllerTest extends ControllerBaseTest
$dispatcher = self::getContainer()->get('event_dispatcher'); $dispatcher = self::getContainer()->get('event_dispatcher');
$dispatcher->addSubscriber(new TimesheetTestMetaFieldSubscriberMock()); $dispatcher->addSubscriber(new TimesheetTestMetaFieldSubscriberMock());
$this->request($client, '/timesheet/create'); $this->request($client, '/timesheet/create');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form();
$this->assertTrue($form->has('timesheet_edit_form[metaFields][metatestmock][value]')); self::assertTrue($form->has('timesheet_edit_form[metaFields][metatestmock][value]'));
$this->assertTrue($form->has('timesheet_edit_form[metaFields][foobar][value]')); self::assertTrue($form->has('timesheet_edit_form[metaFields][foobar][value]'));
$this->assertFalse($form->has('timesheet_edit_form[metaFields][0][value]')); self::assertFalse($form->has('timesheet_edit_form[metaFields][0][value]'));
} }
public function testCreateActionDoesNotShowRateFieldsForUser(): void public function testCreateActionDoesNotShowRateFieldsForUser(): void
{ {
$client = $this->getClientForAuthenticatedUser(); $client = $this->getClientForAuthenticatedUser();
$this->request($client, '/timesheet/create'); $this->request($client, '/timesheet/create');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form();
$this->assertFalse($form->has('timesheet_edit_form[hourlyRate]')); self::assertFalse($form->has('timesheet_edit_form[hourlyRate]'));
$this->assertFalse($form->has('timesheet_edit_form[fixedRate]')); self::assertFalse($form->has('timesheet_edit_form[fixedRate]'));
} }
public function getTrackingModeTestData(): array public static function getTrackingModeTestData(): array
{ {
return [ return [
['duration_fixed_begin', User::ROLE_USER, false, false], ['duration_fixed_begin', User::ROLE_USER, false, false],
@@ -330,18 +330,18 @@ class TimesheetControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser($user); $client = $this->getClientForAuthenticatedUser($user);
$this->setSystemConfiguration('timesheet.mode', $trackingMode); $this->setSystemConfiguration('timesheet.mode', $trackingMode);
$this->request($client, '/timesheet/create'); $this->request($client, '/timesheet/create');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form();
$this->assertEquals($showBeginTime, $form->has('timesheet_edit_form[begin_time]')); self::assertEquals($showBeginTime, $form->has('timesheet_edit_form[begin_time]'));
$this->assertEquals($showEndTime, $form->has('timesheet_edit_form[end_time]')); self::assertEquals($showEndTime, $form->has('timesheet_edit_form[end_time]'));
} }
public function testCreateActionWithFromAndToValues(): void public function testCreateActionWithFromAndToValues(): void
{ {
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$this->request($client, '/timesheet/create?from=2018-08-02T20%3A00%3A00&to=2018-08-02T20%3A30%3A00'); $this->request($client, '/timesheet/create?from=2018-08-02T20%3A00%3A00&to=2018-08-02T20%3A30%3A00');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -354,28 +354,28 @@ class TimesheetControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/timesheet/')); $this->assertIsRedirect($client, $this->createUrl('/timesheet/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
$timesheet = $em->getRepository(Timesheet::class)->findAll()[0]; $timesheet = $em->getRepository(Timesheet::class)->findAll()[0];
$this->assertInstanceOf(\DateTime::class, $timesheet->getBegin()); self::assertInstanceOf(\DateTime::class, $timesheet->getBegin());
$this->assertInstanceOf(\DateTime::class, $timesheet->getEnd()); self::assertInstanceOf(\DateTime::class, $timesheet->getEnd());
$this->assertEquals(50, $timesheet->getRate()); self::assertEquals(50, $timesheet->getRate());
$expected = new \DateTime('2018-08-02T20:00:00'); $expected = new \DateTime('2018-08-02T20:00:00');
$this->assertEquals($expected->format(\DateTimeInterface::ATOM), $timesheet->getBegin()->format(\DateTimeInterface::ATOM)); self::assertEquals($expected->format(\DateTimeInterface::ATOM), $timesheet->getBegin()->format(\DateTimeInterface::ATOM));
$expected = new \DateTime('2018-08-02T20:30:00'); $expected = new \DateTime('2018-08-02T20:30:00');
$this->assertEquals($expected->format(\DateTimeInterface::ATOM), $timesheet->getEnd()->format(\DateTimeInterface::ATOM)); self::assertEquals($expected->format(\DateTimeInterface::ATOM), $timesheet->getEnd()->format(\DateTimeInterface::ATOM));
} }
public function testCreateActionWithFromAndToValuesTwice(): void public function testCreateActionWithFromAndToValuesTwice(): void
{ {
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$this->request($client, '/timesheet/create?from=2018-08-02T20%3A00%3A00&to=2018-08-02T20%3A30%3A00'); $this->request($client, '/timesheet/create?from=2018-08-02T20%3A00%3A00&to=2018-08-02T20%3A30%3A00');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -388,25 +388,25 @@ class TimesheetControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/timesheet/')); $this->assertIsRedirect($client, $this->createUrl('/timesheet/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
$timesheet = $em->getRepository(Timesheet::class)->findAll()[0]; $timesheet = $em->getRepository(Timesheet::class)->findAll()[0];
$this->assertInstanceOf(\DateTime::class, $timesheet->getBegin()); self::assertInstanceOf(\DateTime::class, $timesheet->getBegin());
$this->assertInstanceOf(\DateTime::class, $timesheet->getEnd()); self::assertInstanceOf(\DateTime::class, $timesheet->getEnd());
$this->assertEquals(50, $timesheet->getRate()); self::assertEquals(50, $timesheet->getRate());
$expected = new \DateTime('2018-08-02T20:00:00'); $expected = new \DateTime('2018-08-02T20:00:00');
$this->assertEquals($expected->format(\DateTimeInterface::ATOM), $timesheet->getBegin()->format(\DateTimeInterface::ATOM)); self::assertEquals($expected->format(\DateTimeInterface::ATOM), $timesheet->getBegin()->format(\DateTimeInterface::ATOM));
$expected = new \DateTime('2018-08-02T20:30:00'); $expected = new \DateTime('2018-08-02T20:30:00');
$this->assertEquals($expected->format(\DateTimeInterface::ATOM), $timesheet->getEnd()->format(\DateTimeInterface::ATOM)); self::assertEquals($expected->format(\DateTimeInterface::ATOM), $timesheet->getEnd()->format(\DateTimeInterface::ATOM));
// create a second entry that is overlapping // create a second entry that is overlapping
$this->request($client, '/timesheet/create?from=2018-08-02T20%3A02%3A00&to=2018-08-02T20%3A20%3A00'); $this->request($client, '/timesheet/create?from=2018-08-02T20%3A02%3A00&to=2018-08-02T20%3A20%3A00');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -418,7 +418,7 @@ class TimesheetControllerTest extends ControllerBaseTest
]); ]);
$this->assertIsRedirect($client, $this->createUrl('/timesheet/')); $this->assertIsRedirect($client, $this->createUrl('/timesheet/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
} }
@@ -496,7 +496,7 @@ class TimesheetControllerTest extends ControllerBaseTest
$this->request($client, '/timesheet/' . $id . '/edit'); $this->request($client, '/timesheet/' . $id . '/edit');
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertTrue($response->isSuccessful()); self::assertTrue($response->isSuccessful());
$this->setSystemConfiguration('timesheet.rules.allow_overbooking_budget', false); $this->setSystemConfiguration('timesheet.rules.allow_overbooking_budget', false);
@@ -545,7 +545,7 @@ class TimesheetControllerTest extends ControllerBaseTest
$this->request($client, '/timesheet/' . $id . '/edit'); $this->request($client, '/timesheet/' . $id . '/edit');
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertTrue($response->isSuccessful()); self::assertTrue($response->isSuccessful());
$this->setSystemConfiguration('timesheet.rules.allow_zero_duration', false); $this->setSystemConfiguration('timesheet.rules.allow_zero_duration', false);
@@ -578,7 +578,7 @@ class TimesheetControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$this->request($client, '/timesheet/create?begin=2018-08-02&end=2018-08-02&tags=one,two,three'); $this->request($client, '/timesheet/create?begin=2018-08-02&end=2018-08-02&tags=one,two,three');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -591,23 +591,23 @@ class TimesheetControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/timesheet/')); $this->assertIsRedirect($client, $this->createUrl('/timesheet/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
$timesheet = $em->getRepository(Timesheet::class)->findAll()[0]; $timesheet = $em->getRepository(Timesheet::class)->findAll()[0];
$this->assertInstanceOf(\DateTime::class, $timesheet->getBegin()); self::assertInstanceOf(\DateTime::class, $timesheet->getBegin());
$this->assertInstanceOf(\DateTime::class, $timesheet->getEnd()); self::assertInstanceOf(\DateTime::class, $timesheet->getEnd());
$this->assertEquals(800, $timesheet->getRate()); self::assertEquals(800, $timesheet->getRate());
$expected = new \DateTime('2018-08-02T10:00:00'); $expected = new \DateTime('2018-08-02T10:00:00');
$this->assertEquals($expected->format(\DateTimeInterface::ATOM), $timesheet->getBegin()->format(\DateTimeInterface::ATOM)); self::assertEquals($expected->format(\DateTimeInterface::ATOM), $timesheet->getBegin()->format(\DateTimeInterface::ATOM));
$expected = new \DateTime('2018-08-02T18:00:00'); $expected = new \DateTime('2018-08-02T18:00:00');
$this->assertEquals($expected->format(\DateTimeInterface::ATOM), $timesheet->getEnd()->format(\DateTimeInterface::ATOM)); self::assertEquals($expected->format(\DateTimeInterface::ATOM), $timesheet->getEnd()->format(\DateTimeInterface::ATOM));
$this->assertEquals(['two'], $timesheet->getTagsAsArray()); self::assertEquals(['two'], $timesheet->getTagsAsArray());
} }
public function testCreateActionWithDescription(): void public function testCreateActionWithDescription(): void
@@ -615,7 +615,7 @@ class TimesheetControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$this->request($client, '/timesheet/create?description=Lorem%20Ipsum'); $this->request($client, '/timesheet/create?description=Lorem%20Ipsum');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -628,13 +628,13 @@ class TimesheetControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/timesheet/')); $this->assertIsRedirect($client, $this->createUrl('/timesheet/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
$timesheet = $em->getRepository(Timesheet::class)->findAll()[0]; $timesheet = $em->getRepository(Timesheet::class)->findAll()[0];
$this->assertEquals('Lorem Ipsum', $timesheet->getDescription()); self::assertEquals('Lorem Ipsum', $timesheet->getDescription());
} }
public function testCreateActionWithDescriptionHtmlInjection(): void public function testCreateActionWithDescriptionHtmlInjection(): void
@@ -642,7 +642,7 @@ class TimesheetControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$this->request($client, '/timesheet/create?description=Some text"><bold>HelloWorld<%2Fbold>'); $this->request($client, '/timesheet/create?description=Some text"><bold>HelloWorld<%2Fbold>');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -655,13 +655,13 @@ class TimesheetControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/timesheet/')); $this->assertIsRedirect($client, $this->createUrl('/timesheet/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
$timesheet = $em->getRepository(Timesheet::class)->findAll()[0]; $timesheet = $em->getRepository(Timesheet::class)->findAll()[0];
$this->assertEquals('Some text"><bold>HelloWorld</bold>', $timesheet->getDescription()); self::assertEquals('Some text"><bold>HelloWorld</bold>', $timesheet->getDescription());
} }
public function testEditAction(): void public function testEditAction(): void
@@ -684,9 +684,9 @@ class TimesheetControllerTest extends ControllerBaseTest
$this->request($client, '/timesheet/' . $id . '/edit'); $this->request($client, '/timesheet/' . $id . '/edit');
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertTrue($response->isSuccessful()); self::assertTrue($response->isSuccessful());
$this->assertStringContainsString( self::assertStringContainsString(
'href="https://www.kimai.org/documentation/timesheet.html"', 'href="https://www.kimai.org/documentation/timesheet.html"',
$response->getContent(), $response->getContent(),
'Could not find link to documentation' 'Could not find link to documentation'
@@ -702,13 +702,13 @@ class TimesheetControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/timesheet/')); $this->assertIsRedirect($client, $this->createUrl('/timesheet/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSaveSuccess($client); $this->assertHasFlashSaveSuccess($client);
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
$timesheet = $em->getRepository(Timesheet::class)->find($id); $timesheet = $em->getRepository(Timesheet::class)->find($id);
$this->assertEquals('foo-bar', $timesheet->getDescription()); self::assertEquals('foo-bar', $timesheet->getDescription());
} }
public function testMultiDeleteAction(): void public function testMultiDeleteAction(): void
@@ -784,7 +784,7 @@ class TimesheetControllerTest extends ControllerBaseTest
'entities' => implode(',', $ids) 'entities' => implode(',', $ids)
] ]
]); ]);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=timesheet_multi_update]')->form(); $form = $client->getCrawler()->filter('form[name=timesheet_multi_update]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -834,25 +834,25 @@ class TimesheetControllerTest extends ControllerBaseTest
$newId = $ids[0]->getId(); $newId = $ids[0]->getId();
$this->request($client, '/timesheet/' . $newId . '/duplicate'); $this->request($client, '/timesheet/' . $newId . '/duplicate');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=timesheet_edit_form]')->form();
$client->submit($form, $form->getPhpValues()); $client->submit($form, $form->getPhpValues());
$this->assertIsRedirect($client, $this->createUrl('/timesheet/')); $this->assertIsRedirect($client, $this->createUrl('/timesheet/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
$timesheet = $em->getRepository(Timesheet::class)->find($newId++); $timesheet = $em->getRepository(Timesheet::class)->find($newId++);
$this->assertInstanceOf(\DateTime::class, $timesheet->getBegin()); self::assertInstanceOf(\DateTime::class, $timesheet->getBegin());
$this->assertEquals('Europe/London', $timesheet->getBegin()->getTimezone()->getName()); self::assertEquals('Europe/London', $timesheet->getBegin()->getTimezone()->getName());
$this->assertEquals('Testing is fun!', $timesheet->getDescription()); self::assertEquals('Testing is fun!', $timesheet->getDescription());
$this->assertEquals(2016, $timesheet->getRate()); self::assertEquals(2016, $timesheet->getRate());
$this->assertEquals(127, $timesheet->getHourlyRate()); self::assertEquals(127, $timesheet->getHourlyRate());
$this->assertEquals(2016, $timesheet->getFixedRate()); self::assertEquals(2016, $timesheet->getFixedRate());
$this->assertEquals(2016, $timesheet->getRate()); self::assertEquals(2016, $timesheet->getRate());
} }
} }

View File

@@ -21,7 +21,7 @@ use App\Timesheet\Util;
/** /**
* @group integration * @group integration
*/ */
class TimesheetTeamControllerTest extends ControllerBaseTest class TimesheetTeamControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -37,7 +37,7 @@ class TimesheetTeamControllerTest extends ControllerBaseTest
{ {
$client = $this->getClientForAuthenticatedUser(User::ROLE_TEAMLEAD); $client = $this->getClientForAuthenticatedUser(User::ROLE_TEAMLEAD);
$this->assertAccessIsGranted($client, '/team/timesheet/'); $this->assertAccessIsGranted($client, '/team/timesheet/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
// there are no records by default in the test database // there are no records by default in the test database
$this->assertHasNoEntriesWithFilter($client); $this->assertHasNoEntriesWithFilter($client);
@@ -67,7 +67,7 @@ class TimesheetTeamControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$this->request($client, '/team/timesheet/'); $this->request($client, '/team/timesheet/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$dateRange = $this->formatDateRange($start, new \DateTime('last day of this month')); $dateRange = $this->formatDateRange($start, new \DateTime('last day of this month'));
@@ -80,7 +80,7 @@ class TimesheetTeamControllerTest extends ControllerBaseTest
'customers' => [], 'customers' => [],
]); ]);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasDataTable($client); $this->assertHasDataTable($client);
$this->assertDataTableRowCount($client, 'datatable_timesheet_admin', 13); $this->assertDataTableRowCount($client, 'datatable_timesheet_admin', 13);
@@ -112,14 +112,14 @@ class TimesheetTeamControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$this->request($client, '/team/timesheet/'); $this->request($client, '/team/timesheet/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form.searchform')->form(); $form = $client->getCrawler()->filter('form.searchform')->form();
$client->submit($form, [ $client->submit($form, [
'searchTerm' => 'location:homeoffice foobar', 'searchTerm' => 'location:homeoffice foobar',
]); ]);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasDataTable($client); $this->assertHasDataTable($client);
$this->assertDataTableRowCount($client, 'datatable_timesheet_admin', 5); $this->assertDataTableRowCount($client, 'datatable_timesheet_admin', 5);
} }
@@ -140,7 +140,7 @@ class TimesheetTeamControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$this->request($client, '/team/timesheet/'); $this->request($client, '/team/timesheet/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$dateRange = $this->formatDateRange(new \DateTime('-10 days'), new \DateTime()); $dateRange = $this->formatDateRange(new \DateTime('-10 days'), new \DateTime());
@@ -152,15 +152,15 @@ class TimesheetTeamControllerTest extends ControllerBaseTest
'customers' => [], 'customers' => [],
]); ]);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$node = $client->getCrawler()->filter('body'); $node = $client->getCrawler()->filter('body');
/** @var \DOMElement $body */ /** @var \DOMElement $body */
$body = $node->getNode(0); $body = $node->getNode(0);
$this->assertEquals('invoice_print', $body->getAttribute('class')); self::assertEquals('invoice_print', $body->getAttribute('class'));
$result = $node->filter('section.invoice table.table tbody tr'); $result = $node->filter('section.invoice table.table tbody tr');
$this->assertEquals(10, \count($result)); self::assertEquals(10, \count($result));
} }
public function testExporterNotFoundAction(): void public function testExporterNotFoundAction(): void
@@ -174,7 +174,7 @@ class TimesheetTeamControllerTest extends ControllerBaseTest
{ {
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$this->request($client, '/team/timesheet/create'); $this->request($client, '/team/timesheet/create');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=timesheet_admin_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=timesheet_admin_edit_form]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -187,18 +187,18 @@ class TimesheetTeamControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/team/timesheet/')); $this->assertIsRedirect($client, $this->createUrl('/team/timesheet/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
$timesheet = $em->getRepository(Timesheet::class)->findAll()[0]; $timesheet = $em->getRepository(Timesheet::class)->findAll()[0];
$this->assertInstanceOf(\DateTime::class, $timesheet->getBegin()); self::assertInstanceOf(\DateTime::class, $timesheet->getBegin());
$this->assertNull($timesheet->getEnd()); self::assertNull($timesheet->getEnd());
$this->assertEquals('Testing is fun!', $timesheet->getDescription()); self::assertEquals('Testing is fun!', $timesheet->getDescription());
$this->assertEquals(0, $timesheet->getRate()); self::assertEquals(0, $timesheet->getRate());
$this->assertNull($timesheet->getHourlyRate()); self::assertNull($timesheet->getHourlyRate());
$this->assertNull($timesheet->getFixedRate()); self::assertNull($timesheet->getFixedRate());
} }
public function testCreateForMultipleUsersAction(): void public function testCreateForMultipleUsersAction(): void
@@ -210,7 +210,7 @@ class TimesheetTeamControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$this->request($client, '/team/timesheet/create_mu'); $this->request($client, '/team/timesheet/create_mu');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=timesheet_multi_user_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=timesheet_multi_user_edit_form]')->form();
$client->submit($form, [ $client->submit($form, [
@@ -225,21 +225,21 @@ class TimesheetTeamControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/team/timesheet/')); $this->assertIsRedirect($client, $this->createUrl('/team/timesheet/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Timesheet[] $timesheets */ /** @var Timesheet[] $timesheets */
$timesheets = $em->getRepository(Timesheet::class)->findAll(); $timesheets = $em->getRepository(Timesheet::class)->findAll();
$this->assertCount(2, $timesheets); self::assertCount(2, $timesheets);
foreach ($timesheets as $timesheet) { foreach ($timesheets as $timesheet) {
$this->assertInstanceOf(\DateTime::class, $timesheet->getBegin()); self::assertInstanceOf(\DateTime::class, $timesheet->getBegin());
$this->assertNull($timesheet->getEnd()); self::assertNull($timesheet->getEnd());
$this->assertEquals('Testing is more fun!', $timesheet->getDescription()); self::assertEquals('Testing is more fun!', $timesheet->getDescription());
$this->assertEquals(0, $timesheet->getRate()); self::assertEquals(0, $timesheet->getRate());
$this->assertNull($timesheet->getHourlyRate()); self::assertNull($timesheet->getHourlyRate());
$this->assertNull($timesheet->getFixedRate()); self::assertNull($timesheet->getFixedRate());
$this->assertEquals(['test', '1234', 'foo-bar'], $timesheet->getTagsAsArray()); self::assertEquals(['test', '1234', 'foo-bar'], $timesheet->getTagsAsArray());
} }
} }
@@ -290,9 +290,9 @@ class TimesheetTeamControllerTest extends ControllerBaseTest
$this->request($client, '/team/timesheet/' . $id . '/edit'); $this->request($client, '/team/timesheet/' . $id . '/edit');
$response = $client->getResponse(); $response = $client->getResponse();
$this->assertTrue($response->isSuccessful()); self::assertTrue($response->isSuccessful());
$this->assertStringContainsString( self::assertStringContainsString(
'href="https://www.kimai.org/documentation/timesheet.html"', 'href="https://www.kimai.org/documentation/timesheet.html"',
$response->getContent(), $response->getContent(),
'Could not find link to documentation' 'Could not find link to documentation'
@@ -309,14 +309,14 @@ class TimesheetTeamControllerTest extends ControllerBaseTest
$this->assertIsRedirect($client, $this->createUrl('/team/timesheet/')); $this->assertIsRedirect($client, $this->createUrl('/team/timesheet/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSaveSuccess($client); $this->assertHasFlashSaveSuccess($client);
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
$timesheet = $em->getRepository(Timesheet::class)->find($id); $timesheet = $em->getRepository(Timesheet::class)->find($id);
$this->assertEquals('foo-bar', $timesheet->getDescription()); self::assertEquals('foo-bar', $timesheet->getDescription());
$this->assertEquals($teamlead->getId(), $timesheet->getUser()->getId()); self::assertEquals($teamlead->getId(), $timesheet->getUser()->getId());
} }
public function testMultiDeleteAction(): void public function testMultiDeleteAction(): void
@@ -392,7 +392,7 @@ class TimesheetTeamControllerTest extends ControllerBaseTest
'entities' => implode(',', $ids) 'entities' => implode(',', $ids)
] ]
]); ]);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$newUser = $this->getUserByRole(User::ROLE_USER); $newUser = $this->getUserByRole(User::ROLE_USER);
$form = $client->getCrawler()->filter('form[name=timesheet_multi_update]')->form(); $form = $client->getCrawler()->filter('form[name=timesheet_multi_update]')->form();
@@ -446,25 +446,25 @@ class TimesheetTeamControllerTest extends ControllerBaseTest
$newId = $ids[0]->getId(); $newId = $ids[0]->getId();
$this->request($client, '/team/timesheet/' . $newId . '/duplicate'); $this->request($client, '/team/timesheet/' . $newId . '/duplicate');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=timesheet_admin_edit_form]')->form(); $form = $client->getCrawler()->filter('form[name=timesheet_admin_edit_form]')->form();
$client->submit($form, $form->getPhpValues()); $client->submit($form, $form->getPhpValues());
$this->assertIsRedirect($client, $this->createUrl('/team/timesheet/')); $this->assertIsRedirect($client, $this->createUrl('/team/timesheet/'));
$client->followRedirect(); $client->followRedirect();
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$em = $this->getEntityManager(); $em = $this->getEntityManager();
/** @var Timesheet $timesheet */ /** @var Timesheet $timesheet */
$timesheet = $em->getRepository(Timesheet::class)->find($newId++); $timesheet = $em->getRepository(Timesheet::class)->find($newId++);
$this->assertInstanceOf(\DateTime::class, $timesheet->getBegin()); self::assertInstanceOf(\DateTime::class, $timesheet->getBegin());
$this->assertEquals('Europe/London', $timesheet->getBegin()->getTimezone()->getName()); self::assertEquals('Europe/London', $timesheet->getBegin()->getTimezone()->getName());
$this->assertEquals('Testing is fun!', $timesheet->getDescription()); self::assertEquals('Testing is fun!', $timesheet->getDescription());
$this->assertEquals(2016, $timesheet->getRate()); self::assertEquals(2016, $timesheet->getRate());
$this->assertEquals(127, $timesheet->getHourlyRate()); self::assertEquals(127, $timesheet->getHourlyRate());
$this->assertEquals(2016, $timesheet->getFixedRate()); self::assertEquals(2016, $timesheet->getFixedRate());
$this->assertEquals(2016, $timesheet->getRate()); self::assertEquals(2016, $timesheet->getRate());
} }
} }

View File

@@ -16,7 +16,7 @@ use App\Tests\DataFixtures\TimesheetFixtures;
/** /**
* @group integration * @group integration
*/ */
class UserControllerTest extends ControllerBaseTest class UserControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {
@@ -48,7 +48,7 @@ class UserControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN);
$this->request($client, '/admin/user/'); $this->request($client, '/admin/user/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form.searchform')->form(); $form = $client->getCrawler()->filter('form.searchform')->form();
$client->submit($form, [ $client->submit($form, [
@@ -59,7 +59,7 @@ class UserControllerTest extends ControllerBaseTest
'page' => 1, 'page' => 1,
]); ]);
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$this->assertHasDataTable($client); $this->assertHasDataTable($client);
$this->assertDataTableRowCount($client, 'datatable_user_admin', 1); $this->assertDataTableRowCount($client, 'datatable_user_admin', 1);
} }
@@ -81,7 +81,7 @@ class UserControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN);
$this->request($client, '/admin/user/'); $this->request($client, '/admin/user/');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form.searchform')->form(); $form = $client->getCrawler()->filter('form.searchform')->form();
$form->getFormNode()->setAttribute('action', $this->createUrl('/admin/user/export')); $form->getFormNode()->setAttribute('action', $this->createUrl('/admin/user/export'));
@@ -116,7 +116,7 @@ class UserControllerTest extends ControllerBaseTest
$this->requestPure($client, $location); $this->requestPure($client, $location);
$form = $client->getCrawler()->filter('form[name=user_edit]')->form(); $form = $client->getCrawler()->filter('form[name=user_edit]')->form();
$this->assertEquals($username, $form->get('user_edit[alias]')->getValue()); self::assertEquals($username, $form->get('user_edit[alias]')->getValue());
} }
public function testDeleteAction(): void public function testDeleteAction(): void
@@ -124,10 +124,10 @@ class UserControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN); $client = $this->getClientForAuthenticatedUser(User::ROLE_SUPER_ADMIN);
$this->request($client, '/admin/user/4/delete'); $this->request($client, '/admin/user/4/delete');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=form]')->form(); $form = $client->getCrawler()->filter('form[name=form]')->form();
$this->assertStringEndsWith($this->createUrl('/admin/user/4/delete'), $form->getUri()); self::assertStringEndsWith($this->createUrl('/admin/user/4/delete'), $form->getUri());
$client->submit($form); $client->submit($form);
$client->followRedirect(); $client->followRedirect();
@@ -135,7 +135,7 @@ class UserControllerTest extends ControllerBaseTest
$this->assertHasFlashSuccess($client); $this->assertHasFlashSuccess($client);
$this->request($client, '/admin/user/4/edit'); $this->request($client, '/admin/user/4/edit');
$this->assertFalse($client->getResponse()->isSuccessful()); self::assertFalse($client->getResponse()->isSuccessful());
} }
public function testDeleteActionWithTimesheetEntries(): void public function testDeleteActionWithTimesheetEntries(): void
@@ -151,13 +151,13 @@ class UserControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$timesheets = $em->getRepository(Timesheet::class)->findAll(); $timesheets = $em->getRepository(Timesheet::class)->findAll();
$this->assertEquals(10, \count($timesheets)); self::assertEquals(10, \count($timesheets));
$this->request($client, '/admin/user/' . $user->getId() . '/delete'); $this->request($client, '/admin/user/' . $user->getId() . '/delete');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=form]')->form(); $form = $client->getCrawler()->filter('form[name=form]')->form();
$this->assertStringEndsWith($this->createUrl('/admin/user/' . $user->getId() . '/delete'), $form->getUri()); self::assertStringEndsWith($this->createUrl('/admin/user/' . $user->getId() . '/delete'), $form->getUri());
$client->submit($form); $client->submit($form);
$this->assertIsRedirect($client, $this->createUrl('/admin/user/')); $this->assertIsRedirect($client, $this->createUrl('/admin/user/'));
@@ -166,10 +166,10 @@ class UserControllerTest extends ControllerBaseTest
$em->clear(); $em->clear();
$timesheets = $em->getRepository(Timesheet::class)->count([]); $timesheets = $em->getRepository(Timesheet::class)->count([]);
$this->assertEquals(0, $timesheets); self::assertEquals(0, $timesheets);
$this->request($client, '/admin/user/' . $user->getId() . '/edit'); $this->request($client, '/admin/user/' . $user->getId() . '/edit');
$this->assertFalse($client->getResponse()->isSuccessful()); self::assertFalse($client->getResponse()->isSuccessful());
} }
public function testDeleteActionWithUserReplacementAndTimesheetEntries(): void public function testDeleteActionWithUserReplacementAndTimesheetEntries(): void
@@ -188,16 +188,16 @@ class UserControllerTest extends ControllerBaseTest
$this->importFixture($fixture); $this->importFixture($fixture);
$timesheets = $em->getRepository(Timesheet::class)->findAll(); $timesheets = $em->getRepository(Timesheet::class)->findAll();
$this->assertEquals(10, \count($timesheets)); self::assertEquals(10, \count($timesheets));
foreach ($timesheets as $timesheet) { foreach ($timesheets as $timesheet) {
$this->assertEquals($user->getId(), $timesheet->getUser()->getId()); self::assertEquals($user->getId(), $timesheet->getUser()->getId());
} }
$this->request($client, '/admin/user/' . $user->getId() . '/delete'); $this->request($client, '/admin/user/' . $user->getId() . '/delete');
$this->assertTrue($client->getResponse()->isSuccessful()); self::assertTrue($client->getResponse()->isSuccessful());
$form = $client->getCrawler()->filter('form[name=form]')->form(); $form = $client->getCrawler()->filter('form[name=form]')->form();
$this->assertStringEndsWith($this->createUrl('/admin/user/' . $user->getId() . '/delete'), $form->getUri()); self::assertStringEndsWith($this->createUrl('/admin/user/' . $user->getId() . '/delete'), $form->getUri());
$client->submit($form, [ $client->submit($form, [
'form' => [ 'form' => [
'user' => $userNew->getId() 'user' => $userNew->getId()
@@ -210,13 +210,13 @@ class UserControllerTest extends ControllerBaseTest
$em->clear(); $em->clear();
$timesheets = $em->getRepository(Timesheet::class)->findAll(); $timesheets = $em->getRepository(Timesheet::class)->findAll();
$this->assertEquals(10, \count($timesheets)); self::assertEquals(10, \count($timesheets));
foreach ($timesheets as $timesheet) { foreach ($timesheets as $timesheet) {
$this->assertEquals($userNew->getId(), $timesheet->getUser()->getId()); self::assertEquals($userNew->getId(), $timesheet->getUser()->getId());
} }
$this->request($client, '/admin/user/' . $user->getId() . '/edit'); $this->request($client, '/admin/user/' . $user->getId() . '/edit');
$this->assertFalse($client->getResponse()->isSuccessful()); self::assertFalse($client->getResponse()->isSuccessful());
} }
/** /**
@@ -233,7 +233,7 @@ class UserControllerTest extends ControllerBaseTest
); );
} }
public function getValidationTestData() public static function getValidationTestData()
{ {
return [ return [
[ [

View File

@@ -14,7 +14,7 @@ use App\Entity\User;
/** /**
* @group integration * @group integration
*/ */
class WidgetControllerTest extends ControllerBaseTest class WidgetControllerTest extends AbstractControllerBaseTestCase
{ {
public function testIsSecure(): void public function testIsSecure(): void
{ {

View File

@@ -14,7 +14,7 @@ use App\Entity\User;
/** /**
* @group integration * @group integration
*/ */
class WizardControllerTest extends ControllerBaseTest class WizardControllerTest extends AbstractControllerBaseTestCase
{ {
public function testUnknownWizard(): void public function testUnknownWizard(): void
{ {

View File

@@ -149,19 +149,19 @@ class AppExtensionTest extends TestCase
], ],
]; ];
$this->assertTrue($container->hasParameter('kimai.config')); self::assertTrue($container->hasParameter('kimai.config'));
/** @var array<string, mixed> $config */ /** @var array<string, mixed> $config */
$config = $container->getParameter('kimai.config'); $config = $container->getParameter('kimai.config');
foreach (SystemConfigurationFactory::flatten($kimaiLdap) as $key => $value) { foreach (SystemConfigurationFactory::flatten($kimaiLdap) as $key => $value) {
$this->assertArrayHasKey($key, $config); self::assertArrayHasKey($key, $config);
$this->assertEquals($value, $config[$key]); self::assertEquals($value, $config[$key]);
} }
foreach ($expected as $key => $value) { foreach ($expected as $key => $value) {
$this->assertTrue($container->hasParameter($key), 'Could not find config: ' . $key); self::assertTrue($container->hasParameter($key), 'Could not find config: ' . $key);
$this->assertEquals($value, $container->getParameter($key), 'Invalid config: ' . $key); self::assertEquals($value, $container->getParameter($key), 'Invalid config: ' . $key);
} }
} }
@@ -185,17 +185,17 @@ class AppExtensionTest extends TestCase
$config = $container->getParameter('kimai.config'); $config = $container->getParameter('kimai.config');
$this->assertIsArray($config); self::assertIsArray($config);
$this->assertArrayHasKey('ldap.user.baseDn', $config); self::assertArrayHasKey('ldap.user.baseDn', $config);
$this->assertArrayHasKey('ldap.user.filter', $config); self::assertArrayHasKey('ldap.user.filter', $config);
$this->assertArrayHasKey('ldap.user.usernameAttribute', $config); self::assertArrayHasKey('ldap.user.usernameAttribute', $config);
$this->assertArrayHasKey('ldap.connection.baseDn', $config); self::assertArrayHasKey('ldap.connection.baseDn', $config);
$this->assertArrayHasKey('ldap.connection.accountFilterFormat', $config); self::assertArrayHasKey('ldap.connection.accountFilterFormat', $config);
$this->assertEquals('123123123', $config['ldap.user.baseDn']); self::assertEquals('123123123', $config['ldap.user.baseDn']);
$this->assertEquals('(..........)', $config['ldap.user.filter']); self::assertEquals('(..........)', $config['ldap.user.filter']);
$this->assertEquals('xxx', $config['ldap.user.usernameAttribute']); self::assertEquals('xxx', $config['ldap.user.usernameAttribute']);
$this->assertEquals('lkhiuzhkj', $config['ldap.connection.baseDn']); self::assertEquals('lkhiuzhkj', $config['ldap.connection.baseDn']);
$this->assertEquals('(uid=%s)', $config['ldap.connection.accountFilterFormat']); self::assertEquals('(uid=%s)', $config['ldap.connection.accountFilterFormat']);
} }
public function testLdapFallbackValue(): void public function testLdapFallbackValue(): void
@@ -215,12 +215,12 @@ class AppExtensionTest extends TestCase
$config = $container->getParameter('kimai.config'); $config = $container->getParameter('kimai.config');
$this->assertIsArray($config); self::assertIsArray($config);
$this->assertEquals('123123123', $config['ldap.user.baseDn']); self::assertEquals('123123123', $config['ldap.user.baseDn']);
$this->assertEquals('xxx', $config['ldap.user.usernameAttribute']); self::assertEquals('xxx', $config['ldap.user.usernameAttribute']);
$this->assertEquals('123123123', $config['ldap.connection.baseDn']); self::assertEquals('123123123', $config['ldap.connection.baseDn']);
$this->assertEquals('(&(xxx=%s))', $config['ldap.connection.accountFilterFormat']); self::assertEquals('(&(xxx=%s))', $config['ldap.connection.accountFilterFormat']);
$this->assertEquals('', $config['ldap.user.filter']); self::assertEquals('', $config['ldap.user.filter']);
} }
public function testLdapMoreFallbackValue(): void public function testLdapMoreFallbackValue(): void
@@ -241,13 +241,13 @@ class AppExtensionTest extends TestCase
$this->extension->load($minConfig, $container = $this->getContainer()); $this->extension->load($minConfig, $container = $this->getContainer());
$config = $container->getParameter('kimai.config'); $config = $container->getParameter('kimai.config');
$this->assertIsArray($config); self::assertIsArray($config);
$this->assertEquals('123123123', $config['ldap.user.baseDn']); self::assertEquals('123123123', $config['ldap.user.baseDn']);
$this->assertEquals('zzzz', $config['ldap.user.usernameAttribute']); self::assertEquals('zzzz', $config['ldap.user.usernameAttribute']);
$this->assertEquals('7658765', $config['ldap.connection.baseDn']); self::assertEquals('7658765', $config['ldap.connection.baseDn']);
$this->assertEquals('(&(&(objectClass=inetOrgPerson))(zzzz=%s))', $config['ldap.connection.accountFilterFormat']); self::assertEquals('(&(&(objectClass=inetOrgPerson))(zzzz=%s))', $config['ldap.connection.accountFilterFormat']);
$this->assertEquals('(&(objectClass=inetOrgPerson))', $config['ldap.user.filter']); self::assertEquals('(&(objectClass=inetOrgPerson))', $config['ldap.user.filter']);
} }
public function testWithBundleConfiguration(): void public function testWithBundleConfiguration(): void

View File

@@ -22,6 +22,6 @@ class TimesheetSubscriberTest extends TestCase
{ {
$sut = new TimesheetSubscriber([]); $sut = new TimesheetSubscriber([]);
$events = $sut->getSubscribedEvents(); $events = $sut->getSubscribedEvents();
$this->assertTrue(\in_array(Events::onFlush, $events)); self::assertTrue(\in_array(Events::onFlush, $events));
} }
} }

View File

@@ -27,10 +27,10 @@ class UTCDateTimeImmutableTypeTest extends TestCase
Type::overrideType(Types::DATETIME_MUTABLE, UTCDateTimeImmutableType::class); Type::overrideType(Types::DATETIME_MUTABLE, UTCDateTimeImmutableType::class);
$type = Type::getType(Types::DATETIME_MUTABLE); $type = Type::getType(Types::DATETIME_MUTABLE);
$this->assertInstanceOf(UTCDateTimeImmutableType::class, $type); self::assertInstanceOf(UTCDateTimeImmutableType::class, $type);
$utc = $type::getUtc(); $utc = $type::getUtc();
$this->assertSame($utc, $type::getUtc()); self::assertSame($utc, $type::getUtc());
$this->assertEquals('UTC', $type::getUtc()->getName()); self::assertEquals('UTC', $type::getUtc()->getName());
} }
/** /**
@@ -43,13 +43,13 @@ class UTCDateTimeImmutableTypeTest extends TestCase
$type = Type::getType(Types::DATETIME_MUTABLE); $type = Type::getType(Types::DATETIME_MUTABLE);
$result = $type->convertToDatabaseValue(null, $platform); $result = $type->convertToDatabaseValue(null, $platform);
$this->assertNull($result); self::assertNull($result);
$berlinTz = new \DateTimeZone('Europe/Berlin'); $berlinTz = new \DateTimeZone('Europe/Berlin');
$date = new \DateTimeImmutable('2019-01-17 13:30:00'); $date = new \DateTimeImmutable('2019-01-17 13:30:00');
$date = $date->setTimezone($berlinTz); $date = $date->setTimezone($berlinTz);
$this->assertEquals('Europe/Berlin', $date->getTimezone()->getName()); self::assertEquals('Europe/Berlin', $date->getTimezone()->getName());
$expected = clone $date; $expected = clone $date;
$expected = $expected->setTimezone($type::getUtc()); $expected = $expected->setTimezone($type::getUtc());
@@ -58,7 +58,7 @@ class UTCDateTimeImmutableTypeTest extends TestCase
/** @var \DateTime $result */ /** @var \DateTime $result */
$result = $type->convertToDatabaseValue($date, $platform); $result = $type->convertToDatabaseValue($date, $platform);
$this->assertEquals($bla, $result); self::assertEquals($bla, $result);
} }
/** /**
@@ -71,14 +71,14 @@ class UTCDateTimeImmutableTypeTest extends TestCase
$type = Type::getType(Types::DATETIME_MUTABLE); $type = Type::getType(Types::DATETIME_MUTABLE);
$result = $type->convertToPHPValue(null, $platform); $result = $type->convertToPHPValue(null, $platform);
$this->assertNull($result); self::assertNull($result);
$result = $type->convertToPHPValue('2019-01-17 13:30:00', $platform); $result = $type->convertToPHPValue('2019-01-17 13:30:00', $platform);
$this->assertInstanceOf(\DateTimeImmutable::class, $result); self::assertInstanceOf(\DateTimeImmutable::class, $result);
$this->assertEquals('UTC', $result->getTimezone()->getName()); self::assertEquals('UTC', $result->getTimezone()->getName());
$result = $result->format($platform->getDateTimeFormatString()); $result = $result->format($platform->getDateTimeFormatString());
$this->assertEquals('2019-01-17 13:30:00', $result); self::assertEquals('2019-01-17 13:30:00', $result);
} }
/** /**
@@ -98,7 +98,7 @@ class UTCDateTimeImmutableTypeTest extends TestCase
/** /**
* @return \Doctrine\DBAL\Platforms\MySQLPlatform[][] * @return \Doctrine\DBAL\Platforms\MySQLPlatform[][]
*/ */
public function getPlatforms(): array public static function getPlatforms(): array
{ {
return [ return [
[new MySQLPlatform()], [new MySQLPlatform()],

View File

@@ -27,10 +27,10 @@ class UTCDateTimeTypeTest extends TestCase
Type::overrideType(Types::DATETIME_MUTABLE, UTCDateTimeType::class); Type::overrideType(Types::DATETIME_MUTABLE, UTCDateTimeType::class);
$type = Type::getType(Types::DATETIME_MUTABLE); $type = Type::getType(Types::DATETIME_MUTABLE);
$this->assertInstanceOf(UTCDateTimeType::class, $type); self::assertInstanceOf(UTCDateTimeType::class, $type);
$utc = $type::getUtc(); $utc = $type::getUtc();
$this->assertSame($utc, $type::getUtc()); self::assertSame($utc, $type::getUtc());
$this->assertEquals('UTC', $type::getUtc()->getName()); self::assertEquals('UTC', $type::getUtc()->getName());
} }
/** /**
@@ -43,13 +43,13 @@ class UTCDateTimeTypeTest extends TestCase
$type = Type::getType(Types::DATETIME_MUTABLE); $type = Type::getType(Types::DATETIME_MUTABLE);
$result = $type->convertToDatabaseValue(null, $platform); $result = $type->convertToDatabaseValue(null, $platform);
$this->assertNull($result); self::assertNull($result);
$berlinTz = new \DateTimeZone('Europe/Berlin'); $berlinTz = new \DateTimeZone('Europe/Berlin');
$date = new \DateTime('2019-01-17 13:30:00'); $date = new \DateTime('2019-01-17 13:30:00');
$date->setTimezone($berlinTz); $date->setTimezone($berlinTz);
$this->assertEquals('Europe/Berlin', $date->getTimezone()->getName()); self::assertEquals('Europe/Berlin', $date->getTimezone()->getName());
$expected = clone $date; $expected = clone $date;
$expected->setTimezone($type::getUtc()); $expected->setTimezone($type::getUtc());
@@ -58,7 +58,7 @@ class UTCDateTimeTypeTest extends TestCase
/** @var \DateTime $result */ /** @var \DateTime $result */
$result = $type->convertToDatabaseValue($date, $platform); $result = $type->convertToDatabaseValue($date, $platform);
$this->assertEquals($bla, $result); self::assertEquals($bla, $result);
} }
/** /**
@@ -71,14 +71,14 @@ class UTCDateTimeTypeTest extends TestCase
$type = Type::getType(Types::DATETIME_MUTABLE); $type = Type::getType(Types::DATETIME_MUTABLE);
$result = $type->convertToPHPValue(null, $platform); $result = $type->convertToPHPValue(null, $platform);
$this->assertNull($result); self::assertNull($result);
$result = $type->convertToPHPValue('2019-01-17 13:30:00', $platform); $result = $type->convertToPHPValue('2019-01-17 13:30:00', $platform);
$this->assertInstanceOf(\DateTime::class, $result); self::assertInstanceOf(\DateTime::class, $result);
$this->assertEquals('UTC', $result->getTimezone()->getName()); self::assertEquals('UTC', $result->getTimezone()->getName());
$result = $result->format($platform->getDateTimeFormatString()); $result = $result->format($platform->getDateTimeFormatString());
$this->assertEquals('2019-01-17 13:30:00', $result); self::assertEquals('2019-01-17 13:30:00', $result);
} }
/** /**
@@ -98,7 +98,7 @@ class UTCDateTimeTypeTest extends TestCase
/** /**
* @return \Doctrine\DBAL\Platforms\MySQLPlatform[][] * @return \Doctrine\DBAL\Platforms\MySQLPlatform[][]
*/ */
public function getPlatforms(): array public static function getPlatforms(): array
{ {
return [ return [
[new MySQLPlatform()], [new MySQLPlatform()],

View File

@@ -13,7 +13,7 @@ use App\Entity\CommentInterface;
use App\Entity\User; use App\Entity\User;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
abstract class AbstractCommentEntityTest extends TestCase abstract class AbstractCommentEntityTestCase extends TestCase
{ {
abstract protected function getEntity(): CommentInterface; abstract protected function getEntity(): CommentInterface;

View File

@@ -12,31 +12,31 @@ namespace App\Tests\Entity;
use App\Entity\EntityWithBudget; use App\Entity\EntityWithBudget;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
abstract class AbstractEntityTest extends TestCase abstract class AbstractEntityTestCase extends TestCase
{ {
public function assertBudget(EntityWithBudget $entityWithBudget): void public function assertBudget(EntityWithBudget $entityWithBudget): void
{ {
$this->assertEquals(0.0, $entityWithBudget->getBudget()); self::assertEquals(0.0, $entityWithBudget->getBudget());
$this->assertEquals(0, $entityWithBudget->getTimeBudget()); self::assertEquals(0, $entityWithBudget->getTimeBudget());
$this->assertNull($entityWithBudget->getBudgetType()); self::assertNull($entityWithBudget->getBudgetType());
$this->assertFalse($entityWithBudget->isMonthlyBudget()); self::assertFalse($entityWithBudget->isMonthlyBudget());
self::assertFalse($entityWithBudget->hasBudget()); self::assertFalse($entityWithBudget->hasBudget());
self::assertFalse($entityWithBudget->hasTimeBudget()); self::assertFalse($entityWithBudget->hasTimeBudget());
$entityWithBudget->setBudget(12345.67); $entityWithBudget->setBudget(12345.67);
$this->assertEquals(12345.67, $entityWithBudget->getBudget()); self::assertEquals(12345.67, $entityWithBudget->getBudget());
self::assertTrue($entityWithBudget->hasBudget()); self::assertTrue($entityWithBudget->hasBudget());
self::assertFalse($entityWithBudget->hasTimeBudget()); self::assertFalse($entityWithBudget->hasTimeBudget());
$entityWithBudget->setTimeBudget(937321); $entityWithBudget->setTimeBudget(937321);
$this->assertEquals(937321, $entityWithBudget->getTimeBudget()); self::assertEquals(937321, $entityWithBudget->getTimeBudget());
self::assertTrue($entityWithBudget->hasTimeBudget()); self::assertTrue($entityWithBudget->hasTimeBudget());
$entityWithBudget->setBudgetType('month'); $entityWithBudget->setBudgetType('month');
$this->assertTrue($entityWithBudget->isMonthlyBudget()); self::assertTrue($entityWithBudget->isMonthlyBudget());
$entityWithBudget->setBudgetType(null); $entityWithBudget->setBudgetType(null);
$this->assertFalse($entityWithBudget->isMonthlyBudget()); self::assertFalse($entityWithBudget->isMonthlyBudget());
try { try {
$entityWithBudget->setBudgetType('foo'); $entityWithBudget->setBudgetType('foo');

View File

@@ -17,7 +17,7 @@ use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank; use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\NotNull; use Symfony\Component\Validator\Constraints\NotNull;
abstract class AbstractMetaEntityTest extends TestCase abstract class AbstractMetaEntityTestCase extends TestCase
{ {
abstract protected function getEntity(): EntityWithMetaFields; abstract protected function getEntity(): EntityWithMetaFields;

View File

@@ -15,31 +15,31 @@ use App\Entity\User;
/** /**
* @covers \App\Entity\AccessToken * @covers \App\Entity\AccessToken
*/ */
class AccessTokenTest extends AbstractEntityTest class AccessTokenTest extends AbstractEntityTestCase
{ {
public function testDefaultValues(): void public function testDefaultValues(): void
{ {
$user = new User(); $user = new User();
$sut = new AccessToken($user, 'foo'); $sut = new AccessToken($user, 'foo');
$this->assertNull($sut->getId()); self::assertNull($sut->getId());
$this->assertNull($sut->getName()); self::assertNull($sut->getName());
$this->assertNull($sut->getExpiresAt()); self::assertNull($sut->getExpiresAt());
$this->assertNull($sut->getLastUsage()); self::assertNull($sut->getLastUsage());
$this->assertSame('foo', $sut->getToken()); self::assertSame('foo', $sut->getToken());
$this->assertSame($user, $sut->getUser()); self::assertSame($user, $sut->getUser());
$this->assertTrue($sut->isValid()); self::assertTrue($sut->isValid());
$sut->setName('bar'); $sut->setName('bar');
$this->assertSame('bar', $sut->getName()); self::assertSame('bar', $sut->getName());
$dateTime = new \DateTimeImmutable('-1 year'); $dateTime = new \DateTimeImmutable('-1 year');
$sut->setLastUsage($dateTime); $sut->setLastUsage($dateTime);
$this->assertSame($dateTime, $sut->getLastUsage()); self::assertSame($dateTime, $sut->getLastUsage());
$dateTime = new \DateTimeImmutable('-1 month'); $dateTime = new \DateTimeImmutable('-1 month');
$sut->setExpiresAt($dateTime); $sut->setExpiresAt($dateTime);
$this->assertSame($dateTime, $sut->getExpiresAt()); self::assertSame($dateTime, $sut->getExpiresAt());
} }
public function testIsValid(): void public function testIsValid(): void
@@ -47,6 +47,6 @@ class AccessTokenTest extends AbstractEntityTest
$user = new User(); $user = new User();
$sut = new AccessToken($user, 'foo'); $sut = new AccessToken($user, 'foo');
$sut->setExpiresAt(new \DateTimeImmutable('-1 day')); $sut->setExpiresAt(new \DateTimeImmutable('-1 day'));
$this->assertFalse($sut->isValid()); self::assertFalse($sut->isValid());
} }
} }

View File

@@ -18,7 +18,7 @@ use App\Entity\Timesheet;
/** /**
* @covers \App\Entity\ActivityMeta * @covers \App\Entity\ActivityMeta
*/ */
class ActivityMetaTest extends AbstractMetaEntityTest class ActivityMetaTest extends AbstractMetaEntityTestCase
{ {
protected function getEntity(): EntityWithMetaFields protected function getEntity(): EntityWithMetaFields
{ {

View File

@@ -21,25 +21,25 @@ use Doctrine\Common\Collections\Collection;
/** /**
* @covers \App\Entity\Activity * @covers \App\Entity\Activity
*/ */
class ActivityTest extends AbstractEntityTest class ActivityTest extends AbstractEntityTestCase
{ {
public function testDefaultValues(): void public function testDefaultValues(): void
{ {
$sut = new Activity(); $sut = new Activity();
$this->assertNull($sut->getId()); self::assertNull($sut->getId());
$this->assertNull($sut->getProject()); self::assertNull($sut->getProject());
$this->assertNull($sut->getName()); self::assertNull($sut->getName());
$this->assertNull($sut->getComment()); self::assertNull($sut->getComment());
$this->assertNull($sut->getInvoiceText()); self::assertNull($sut->getInvoiceText());
$this->assertTrue($sut->isVisible()); self::assertTrue($sut->isVisible());
$this->assertTrue($sut->isBillable()); self::assertTrue($sut->isBillable());
$this->assertTrue($sut->isGlobal()); self::assertTrue($sut->isGlobal());
$this->assertNull($sut->getColor()); self::assertNull($sut->getColor());
self::assertFalse($sut->hasColor()); self::assertFalse($sut->hasColor());
$this->assertInstanceOf(Collection::class, $sut->getMetaFields()); self::assertInstanceOf(Collection::class, $sut->getMetaFields());
$this->assertEquals(0, $sut->getMetaFields()->count()); self::assertEquals(0, $sut->getMetaFields()->count());
$this->assertNull($sut->getMetaField('foo')); self::assertNull($sut->getMetaField('foo'));
$this->assertInstanceOf(Collection::class, $sut->getTeams()); self::assertInstanceOf(Collection::class, $sut->getTeams());
} }
public function testBudgets(): void public function testBudgets(): void
@@ -50,36 +50,36 @@ class ActivityTest extends AbstractEntityTest
public function testSetterAndGetter(): void public function testSetterAndGetter(): void
{ {
$sut = new Activity(); $sut = new Activity();
$this->assertInstanceOf(Activity::class, $sut->setName('foo-bar')); self::assertInstanceOf(Activity::class, $sut->setName('foo-bar'));
$this->assertEquals('foo-bar', $sut->getName()); self::assertEquals('foo-bar', $sut->getName());
$this->assertEquals('foo-bar', (string) $sut); self::assertEquals('foo-bar', (string) $sut);
$this->assertInstanceOf(Activity::class, $sut->setVisible(false)); self::assertInstanceOf(Activity::class, $sut->setVisible(false));
$this->assertFalse($sut->isVisible()); self::assertFalse($sut->isVisible());
$sut->setVisible(false); $sut->setVisible(false);
self::assertFalse($sut->isVisible()); self::assertFalse($sut->isVisible());
$sut->setVisible(true); $sut->setVisible(true);
self::assertTrue($sut->isVisible()); self::assertTrue($sut->isVisible());
$this->assertInstanceOf(Activity::class, $sut->setComment('hello world')); self::assertInstanceOf(Activity::class, $sut->setComment('hello world'));
$this->assertEquals('hello world', $sut->getComment()); self::assertEquals('hello world', $sut->getComment());
$sut->setInvoiceText('very long invoice text comment 12324'); $sut->setInvoiceText('very long invoice text comment 12324');
self::assertEquals('very long invoice text comment 12324', $sut->getInvoiceText()); self::assertEquals('very long invoice text comment 12324', $sut->getInvoiceText());
self::assertFalse($sut->hasColor()); self::assertFalse($sut->hasColor());
$sut->setColor('#fffccc'); $sut->setColor('#fffccc');
$this->assertEquals('#fffccc', $sut->getColor()); self::assertEquals('#fffccc', $sut->getColor());
self::assertTrue($sut->hasColor()); self::assertTrue($sut->hasColor());
$sut->setColor(Constants::DEFAULT_COLOR); $sut->setColor(Constants::DEFAULT_COLOR);
$this->assertNull($sut->getColor()); self::assertNull($sut->getColor());
self::assertFalse($sut->hasColor()); self::assertFalse($sut->hasColor());
$this->assertTrue($sut->isGlobal()); self::assertTrue($sut->isGlobal());
$this->assertInstanceOf(Activity::class, $sut->setProject(new Project())); self::assertInstanceOf(Activity::class, $sut->setProject(new Project()));
$this->assertFalse($sut->isGlobal()); self::assertFalse($sut->isGlobal());
} }
public function testMetaFields(): void public function testMetaFields(): void
@@ -87,7 +87,7 @@ class ActivityTest extends AbstractEntityTest
$sut = new Activity(); $sut = new Activity();
$meta = new ActivityMeta(); $meta = new ActivityMeta();
$meta->setName('foo')->setValue('bar2')->setType('test'); $meta->setName('foo')->setValue('bar2')->setType('test');
$this->assertInstanceOf(Activity::class, $sut->setMetaField($meta)); self::assertInstanceOf(Activity::class, $sut->setMetaField($meta));
self::assertEquals(1, $sut->getMetaFields()->count()); self::assertEquals(1, $sut->getMetaFields()->count());
$result = $sut->getMetaField('foo'); $result = $sut->getMetaField('foo');
self::assertSame($result, $meta); self::assertSame($result, $meta);
@@ -96,7 +96,7 @@ class ActivityTest extends AbstractEntityTest
$meta2 = new ActivityMeta(); $meta2 = new ActivityMeta();
$meta2->setName('foo')->setValue('bar')->setType('test2'); $meta2->setName('foo')->setValue('bar')->setType('test2');
$this->assertInstanceOf(Activity::class, $sut->setMetaField($meta2)); self::assertInstanceOf(Activity::class, $sut->setMetaField($meta2));
self::assertEquals(1, $sut->getMetaFields()->count()); self::assertEquals(1, $sut->getMetaFields()->count());
self::assertCount(0, $sut->getVisibleMetaFields()); self::assertCount(0, $sut->getVisibleMetaFields());

View File

@@ -21,32 +21,32 @@ class BookmarkTest extends TestCase
public function testDefaultValues(): void public function testDefaultValues(): void
{ {
$sut = new Bookmark(); $sut = new Bookmark();
$this->assertNull($sut->getId()); self::assertNull($sut->getId());
$this->assertNull($sut->getName()); self::assertNull($sut->getName());
$this->assertIsArray($sut->getContent()); self::assertIsArray($sut->getContent());
$this->assertEquals([], $sut->getContent()); self::assertEquals([], $sut->getContent());
$this->assertNull($sut->getType()); self::assertNull($sut->getType());
$this->assertNull($sut->getUser()); self::assertNull($sut->getUser());
} }
public function testSetterAndGetter(): void public function testSetterAndGetter(): void
{ {
$sut = new Bookmark(); $sut = new Bookmark();
$sut->setName('foo-bar'); $sut->setName('foo-bar');
$this->assertEquals('foo-bar', $sut->getName()); self::assertEquals('foo-bar', $sut->getName());
$sut->setContent(['test' => 'foo-bar', 'hello' => 'world']); $sut->setContent(['test' => 'foo-bar', 'hello' => 'world']);
$this->assertEquals(['test' => 'foo-bar', 'hello' => 'world'], $sut->getContent()); self::assertEquals(['test' => 'foo-bar', 'hello' => 'world'], $sut->getContent());
$sut->setType('sdsdsd'); $sut->setType('sdsdsd');
$this->assertEquals('sdsdsd', $sut->getType()); self::assertEquals('sdsdsd', $sut->getType());
$user = new User(); $user = new User();
$sut->setUser($user); $sut->setUser($user);
$this->assertEquals($user, $sut->getUser()); self::assertEquals($user, $sut->getUser());
$sut2 = clone $sut; $sut2 = clone $sut;
$this->assertEquals('sdsdsd', $sut2->getType()); self::assertEquals('sdsdsd', $sut2->getType());
$this->assertEquals('foo-bar', $sut2->getName()); self::assertEquals('foo-bar', $sut2->getName());
} }
} }

View File

@@ -20,17 +20,17 @@ class ConfigurationTest extends TestCase
public function testDefaultValues(): void public function testDefaultValues(): void
{ {
$sut = new Configuration(); $sut = new Configuration();
$this->assertNull($sut->getId()); self::assertNull($sut->getId());
$this->assertNull($sut->getName()); self::assertNull($sut->getName());
$this->assertNull($sut->getValue()); self::assertNull($sut->getValue());
} }
public function testSetterAndGetter(): void public function testSetterAndGetter(): void
{ {
$sut = new Configuration(); $sut = new Configuration();
$this->assertInstanceOf(Configuration::class, $sut->setName('foo-bar')); self::assertInstanceOf(Configuration::class, $sut->setName('foo-bar'));
$this->assertEquals('foo-bar', $sut->getName()); self::assertEquals('foo-bar', $sut->getName());
$this->assertInstanceOf(Configuration::class, $sut->setValue('hello world')); self::assertInstanceOf(Configuration::class, $sut->setValue('hello world'));
$this->assertEquals('hello world', $sut->getValue()); self::assertEquals('hello world', $sut->getValue());
} }
} }

View File

@@ -16,7 +16,7 @@ use App\Entity\CustomerComment;
* @covers \App\Entity\CustomerComment * @covers \App\Entity\CustomerComment
* @covers \App\Entity\CommentTableTypeTrait * @covers \App\Entity\CommentTableTypeTrait
*/ */
class CustomerCommentTest extends AbstractCommentEntityTest class CustomerCommentTest extends AbstractCommentEntityTestCase
{ {
protected function getEntity(): CustomerComment protected function getEntity(): CustomerComment
{ {

View File

@@ -18,7 +18,7 @@ use App\Entity\MetaTableTypeInterface;
/** /**
* @covers \App\Entity\CustomerMeta * @covers \App\Entity\CustomerMeta
*/ */
class CustomerMetaTest extends AbstractMetaEntityTest class CustomerMetaTest extends AbstractMetaEntityTestCase
{ {
protected function getEntity(): EntityWithMetaFields protected function getEntity(): EntityWithMetaFields
{ {

Some files were not shown because too many files have changed in this diff Show More