Release 2.13 (#4659)

This commit is contained in:
Kevin Papst
2024-03-10 15:35:59 +01:00
committed by GitHub
parent a78e8ed8c4
commit dee90bb15e
79 changed files with 1019 additions and 932 deletions

View File

@@ -168,7 +168,10 @@ class ActivityControllerTest extends APIControllerBaseTest
}
$this->assertAccessIsGranted($client, $url, 'GET', $parameters);
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
$this->assertNotEmpty($result);
@@ -208,7 +211,10 @@ class ActivityControllerTest extends APIControllerBaseTest
$query = ['order' => 'ASC', 'orderBy' => 'project'];
$this->assertAccessIsGranted($client, '/api/activities', 'GET', $query);
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
$this->assertNotEmpty($result);
@@ -219,11 +225,19 @@ class ActivityControllerTest extends APIControllerBaseTest
$this->assertEquals($imports[1]->getId(), $result[2]['project']);
}
public function testGetEntityIsSecure(): void
{
$this->assertUrlIsSecuredForRole(User::ROLE_USER, '/api/activities/1');
}
public function testGetEntity(): void
{
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$this->assertAccessIsGranted($client, '/api/activities/1');
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
self::assertApiResponseTypeStructure('ActivityEntity', $result);
@@ -247,7 +261,10 @@ class ActivityControllerTest extends APIControllerBaseTest
$this->request($client, '/api/activities', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
self::assertApiResponseTypeStructure('ActivityEntity', $result);
$this->assertNotEmpty($result['id']);
@@ -262,7 +279,10 @@ class ActivityControllerTest extends APIControllerBaseTest
$this->request($client, '/api/activities', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
self::assertApiResponseTypeStructure('ActivityEntity', $result);
$this->assertNotEmpty($result['id']);
@@ -308,7 +328,10 @@ class ActivityControllerTest extends APIControllerBaseTest
$this->request($client, '/api/activities/1', 'PATCH', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
self::assertApiResponseTypeStructure('ActivityEntity', $result);
$this->assertNotEmpty($result['id']);
@@ -330,7 +353,10 @@ class ActivityControllerTest extends APIControllerBaseTest
$this->request($client, '/api/activities/' . $imports[2]->getId(), 'PATCH', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
self::assertApiResponseTypeStructure('ActivityEntity', $result);
$this->assertNotEmpty($result['id']);

View File

@@ -96,7 +96,10 @@ class CustomerControllerTest extends APIControllerBaseTest
{
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$this->assertAccessIsGranted($client, '/api/customers');
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
$this->assertNotEmpty($result);
@@ -109,7 +112,10 @@ class CustomerControllerTest extends APIControllerBaseTest
$query = ['order' => 'ASC', 'orderBy' => 'name', 'visible' => 3, 'term' => 'test'];
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$this->assertAccessIsGranted($client, '/api/customers', 'GET', $query);
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
$this->assertNotEmpty($result);
@@ -117,11 +123,19 @@ class CustomerControllerTest extends APIControllerBaseTest
self::assertApiResponseTypeStructure('CustomerCollection', $result[0]);
}
public function testGetEntityIsSecure(): void
{
$this->assertUrlIsSecuredForRole(User::ROLE_USER, '/api/customers/1');
}
public function testGetEntity(): void
{
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$this->assertAccessIsGranted($client, '/api/customers/1');
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
self::assertApiResponseTypeStructure('CustomerEntity', $result);
@@ -129,7 +143,7 @@ class CustomerControllerTest extends APIControllerBaseTest
public function testGetEntityWithFullResponse(): void
{
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$em = $this->getEntityManager();
@@ -165,7 +179,10 @@ class CustomerControllerTest extends APIControllerBaseTest
$em->flush();
$this->assertAccessIsGranted($client, '/api/customers/1');
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
self::assertApiResponseTypeStructure('CustomerEntity', $result);
@@ -191,7 +208,10 @@ class CustomerControllerTest extends APIControllerBaseTest
$this->request($client, '/api/customers', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
self::assertApiResponseTypeStructure('CustomerEntity', $result);
$this->assertNotEmpty($result['id']);
@@ -209,7 +229,10 @@ class CustomerControllerTest extends APIControllerBaseTest
$this->request($client, '/api/customers', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
self::assertApiResponseTypeStructure('CustomerEntity', $result);
$this->assertNotEmpty($result['id']);
@@ -262,7 +285,10 @@ class CustomerControllerTest extends APIControllerBaseTest
$this->request($client, '/api/customers/1', 'PATCH', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
self::assertApiResponseTypeStructure('CustomerEntity', $result);
$this->assertNotEmpty($result['id']);

View File

@@ -97,7 +97,10 @@ class ProjectControllerTest extends APIControllerBaseTest
{
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$this->assertAccessIsGranted($client, '/api/projects');
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
$this->assertNotEmpty($result);
@@ -206,7 +209,10 @@ class ProjectControllerTest extends APIControllerBaseTest
}
$this->assertAccessIsGranted($client, $url, 'GET', $parameters);
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
$this->assertEquals(\count($expected), \count($result), 'Found wrong amount of projects');
@@ -242,9 +248,27 @@ class ProjectControllerTest extends APIControllerBaseTest
yield ['/api/projects', 1, ['customers' => ['2', '2'], 'visible' => VisibilityInterface::SHOW_HIDDEN, 'start' => '2010-12-11', 'end' => '2030-12-11'], []];
}
public function testGetEntityIsSecure(): void
{
$this->assertUrlIsSecuredForRole(User::ROLE_USER, '/api/projects/1');
}
public function testGetEntity(): void
{
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$this->assertAccessIsGranted($client, '/api/projects/1');
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
self::assertApiResponseTypeStructure('ProjectEntity', $result);
}
public function testGetEntityComplex(): void
{
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$em = $this->getEntityManager();
$customer = new Customer('first one');
@@ -268,7 +292,10 @@ class ProjectControllerTest extends APIControllerBaseTest
$em->flush();
$this->assertAccessIsGranted($client, '/api/projects/' . $project->getId());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
self::assertApiResponseTypeStructure('ProjectEntity', $result);
@@ -318,7 +345,10 @@ class ProjectControllerTest extends APIControllerBaseTest
$this->request($client, '/api/projects', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
self::assertApiResponseTypeStructure('ProjectEntity', $result);
$this->assertNotEmpty($result['id']);
@@ -344,7 +374,10 @@ class ProjectControllerTest extends APIControllerBaseTest
$this->request($client, '/api/projects', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
self::assertApiResponseTypeStructure('ProjectEntity', $result);
$this->assertNotEmpty($result['id']);
@@ -367,7 +400,10 @@ class ProjectControllerTest extends APIControllerBaseTest
$this->request($client, '/api/projects', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
self::assertApiResponseTypeStructure('ProjectEntity', $result);
$this->assertNotEmpty($result['id']);
@@ -390,7 +426,10 @@ class ProjectControllerTest extends APIControllerBaseTest
$this->request($client, '/api/projects', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
self::assertApiResponseTypeStructure('ProjectEntity', $result);
$this->assertNotEmpty($result['id']);
@@ -410,7 +449,10 @@ class ProjectControllerTest extends APIControllerBaseTest
$this->request($client, '/api/projects', 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
self::assertApiResponseTypeStructure('ProjectEntity', $result);
$this->assertNotEmpty($result['id']);
@@ -461,7 +503,10 @@ class ProjectControllerTest extends APIControllerBaseTest
$this->request($client, '/api/projects/1', 'PATCH', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
self::assertApiResponseTypeStructure('ProjectEntity', $result);
$this->assertNotEmpty($result['id']);

View File

@@ -20,20 +20,14 @@ use App\Entity\User;
*/
trait RateControllerTestTrait
{
/**
* @param string|int $id
* @param string|int|null $rateId
* @return string
*/
abstract protected function getRateUrl($id = '1', $rateId = null): string;
abstract protected function getRateUrl(string|int $id = '1', string|int|null $rateId = null): string;
abstract protected function getRateUrlByRate(RateInterface $rate, bool $isCollection): string;
/**
* @param string|int $id
* @return RateInterface[]
*/
abstract protected function importTestRates($id): array;
abstract protected function importTestRates(string|int $id): array;
public function testAddRateMissingEntityAction(): void
{
@@ -89,7 +83,10 @@ trait RateControllerTestTrait
$this->request($client, $this->getRateUrl(), 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
$this->assertRateStructure($result, null);
$this->assertNotEmpty($result['id']);
@@ -110,7 +107,10 @@ trait RateControllerTestTrait
$this->request($client, $this->getRateUrl(), 'POST', [], json_encode($data));
$this->assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
$this->assertRateStructure($result, 1);
$this->assertNotEmpty($result['id']);
@@ -125,7 +125,10 @@ trait RateControllerTestTrait
$this->request($client, $this->getRateUrl(1));
$this->assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
$this->assertEmpty($result);
}
@@ -138,7 +141,10 @@ trait RateControllerTestTrait
$this->request($client, $this->getRateUrl(1));
$this->assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
$this->assertNotEmpty($result);
$this->assertEquals(\count($expectedRates), \count($result));
@@ -171,7 +177,10 @@ trait RateControllerTestTrait
$this->request($client, $this->getRateUrlByRate($expectedRates[0], true));
$this->assertTrue($client->getResponse()->isSuccessful());
$result = json_decode($client->getResponse()->getContent(), true);
$content = $client->getResponse()->getContent();
$this->assertIsString($content);
$result = json_decode($content, true);
$this->assertIsArray($result);
$this->assertEquals(\count($expectedRates) - 1, \count($result));
}

View File

@@ -118,7 +118,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]);
}
public function testGetCollectionForAllUser(): void
public function testGetCollectionForAllUserIsSecure(): void
{
$client = $this->getClientForAuthenticatedUser(User::ROLE_TEAMLEAD);
$this->importFixtureForUser(User::ROLE_USER);
@@ -136,6 +136,53 @@ class TimesheetControllerTest extends APIControllerBaseTest
self::assertIsString($content);
$result = json_decode($content, true);
self::assertIsArray($result);
self::assertEmpty($result);
self::assertEquals(0, \count($result));
}
public function testGetCollectionForAllUserIsSecureForUser(): void
{
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$this->importFixtureForUser(User::ROLE_USER);
$fixture = new TimesheetFixtures($this->getUserByRole(User::ROLE_ADMIN), 7);
$fixture->setFixedRate(true);
$fixture->setHourlyRate(true);
$fixture->setStartDate(new \DateTime('-10 days'));
$this->importFixture($fixture);
$query = ['user' => 'all'];
$this->assertAccessIsGranted($client, '/api/timesheets', 'GET', $query);
$content = $client->getResponse()->getContent();
self::assertIsString($content);
$result = json_decode($content, true);
self::assertIsArray($result);
self::assertNotEmpty($result);
self::assertEquals(10, \count($result));
self::assertApiResponseTypeStructure('TimesheetCollection', $result[0]);
}
public function testGetCollectionForAllUser(): void
{
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$this->importFixtureForUser(User::ROLE_USER);
$fixture = new TimesheetFixtures($this->getUserByRole(User::ROLE_SUPER_ADMIN), 7);
$fixture->setFixedRate(true);
$fixture->setHourlyRate(true);
$fixture->setStartDate(new \DateTime('-10 days'));
$this->importFixture($fixture);
$query = ['user' => 'all'];
$this->assertAccessIsGranted($client, '/api/timesheets', 'GET', $query);
$content = $client->getResponse()->getContent();
self::assertIsString($content);
$result = json_decode($content, true);
self::assertIsArray($result);
self::assertNotEmpty($result);
self::assertEquals(17, \count($result));

View File

@@ -19,9 +19,9 @@ trait EntityValidationTestTrait
{
/**
* @param object $entity
* @param array|string $fieldNames
* @param array<string>|string $fieldNames
*/
public function assertHasViolationForField(object $entity, $fieldNames, $groups = null): void
public function assertHasViolationForField(object $entity, array|string $fieldNames, $groups = null): void
{
self::bootKernel();
/** @var ValidatorInterface $validator */

View File

@@ -24,7 +24,7 @@ class TimesheetValidationTest extends KernelTestCase
{
use EntityValidationTestTrait;
protected function getEntity()
protected function getEntity(): Timesheet
{
$customer = new Customer('Test Customer');

View File

@@ -61,6 +61,8 @@ class ConfigurableNumberGeneratorTest extends TestCase
public function getTestData(): array
{
$invoiceDate = new \DateTime();
$invoiceDateFixed = new \DateTime('2021-03-07');
$invoiceDateFixed1 = new \DateTime('2021-03-27');
return [
// simple tests for single calls
@@ -109,6 +111,7 @@ class ConfigurableNumberGeneratorTest extends TestCase
['{c+13,3}', '014', $invoiceDate],
['{c+13,2}', '14', $invoiceDate],
['{c+13}', '14', $invoiceDate],
['{c-20}', '0', $invoiceDate],
['{cd+111}', '112', $invoiceDate],
['{cd+111,5}', '00112', $invoiceDate],
['{cd+111,2}', '113', $invoiceDate, 2],
@@ -128,7 +131,7 @@ class ConfigurableNumberGeneratorTest extends TestCase
['{Y,5}/{cy,5}', '0' . $invoiceDate->format('Y') . '/00002', $invoiceDate],
// with decrementing counter
['{c-1,2}', '00', $invoiceDate],
['{c-2,2}', '-1', $invoiceDate],
['{c-2,2}', '00', $invoiceDate],
// with incrementing and decrementing counter
['{c-5+13,1}', '9', $invoiceDate],
['{c+13-5,2}', '09', $invoiceDate],
@@ -142,6 +145,43 @@ class ConfigurableNumberGeneratorTest extends TestCase
['{cm+22+2+2-1-13-4}', '9', $invoiceDate],
['{cm+22+2-2-22}', '6', $invoiceDate, 5],
['{cm-21+22+2-2}', '6', $invoiceDate, 5],
// increment dates
['{YY}', '2022', $invoiceDateFixed],
['{YY+1}', '2022', $invoiceDateFixed],
['{YY+2}', '2023', $invoiceDateFixed],
['{YY+3}', '2024', $invoiceDateFixed],
['{YY-1}', '2020', $invoiceDateFixed],
['{YY-2}', '2019', $invoiceDateFixed],
['{YY-3}', '2018', $invoiceDateFixed],
['{yy}', '22', $invoiceDateFixed],
['{yy+1}', '22', $invoiceDateFixed],
['{yy+2}', '23', $invoiceDateFixed],
['{yy+3}', '24', $invoiceDateFixed],
['{yy-1}', '20', $invoiceDateFixed],
['{yy-2}', '19', $invoiceDateFixed],
['{yy-3}', '18', $invoiceDateFixed],
['{MM}', '4', $invoiceDateFixed], // cast to int removes leading zero
['{MM+1}', '4', $invoiceDateFixed], // cast to int removes leading zero
['{MM+2}', '5', $invoiceDateFixed], // cast to int removes leading zero
['{MM+3}', '6', $invoiceDateFixed], // cast to int removes leading zero
['{MM-1}', '2', $invoiceDateFixed], // cast to int removes leading zero
['{MM-2}', '1', $invoiceDateFixed], // cast to int removes leading zero
['{MM-3}', '0', $invoiceDateFixed], // cast to int removes leading zero
['{MM-4}', '0', $invoiceDateFixed], // cast to int removes leading zero
['{DD}', '8', $invoiceDateFixed], // cast to int removes leading zero
['{DD+1}', '8', $invoiceDateFixed], // cast to int removes leading zero
['{DD+2}', '9', $invoiceDateFixed], // cast to int removes leading zero
['{DD+3}', '10', $invoiceDateFixed], // cast to int removes leading zero
['{DD-1}', '6', $invoiceDateFixed], // cast to int removes leading zero
['{DD-2}', '5', $invoiceDateFixed], // cast to int removes leading zero
['{DD-3}', '4', $invoiceDateFixed], // cast to int removes leading zero
['{DD}', '28', $invoiceDateFixed1], // cast to int removes leading zero
['{DD+1}', '28', $invoiceDateFixed1], // cast to int removes leading zero
['{DD+2}', '29', $invoiceDateFixed1], // cast to int removes leading zero
['{DD+3}', '30', $invoiceDateFixed1], // cast to int removes leading zero
['{DD-1}', '26', $invoiceDateFixed1], // cast to int removes leading zero
['{DD-2}', '25', $invoiceDateFixed1], // cast to int removes leading zero
['{DD-3}', '24', $invoiceDateFixed1], // cast to int removes leading zero
];
}

View File

@@ -463,6 +463,8 @@ class LocaleFormatExtensionsTest extends TestCase
'twentyFourHours' => false,
'updateBrowserTitle' => false,
'timezone' => 'America/Edmonton',
'locale' => 'en',
'language' => 'de',
'user' => [
'id' => 1,
'name' => null,
@@ -473,6 +475,7 @@ class LocaleFormatExtensionsTest extends TestCase
$user = $this->createMock(User::class);
$user->method('getId')->willReturn(1);
$user->method('getName')->willReturn('Testing');
$user->method('getLanguage')->willReturn('de');
$user->method('isAdmin')->willReturn(false);
$user->method('isSuperAdmin')->willReturn(false);
$user->method('getTimezone')->willReturn('America/Edmonton');

View File

@@ -121,7 +121,7 @@ class TimesheetBudgetUsedValidatorTest extends ConstraintValidatorTestCase
{
$this->expectException(UnexpectedTypeException::class);
$this->validator->validate('foo', new TimesheetBudgetUsed()); // @phpstan-ignore-line
$this->validator->validate('foo', new TimesheetBudgetUsed());
}
public function testWithMissingEnd(): void

View File

@@ -59,7 +59,7 @@ class TimesheetExportedValidatorTest extends ConstraintValidatorTestCase
{
$this->expectException(UnexpectedTypeException::class);
$this->validator->validate(new NotBlank(), new TimesheetExported(['message' => 'myMessage'])); // @phpstan-ignore-line
$this->validator->validate(new NotBlank(), new TimesheetExported(['message' => 'myMessage']));
}
public function testTriggersOnMissingPermission(): void

View File

@@ -60,7 +60,7 @@ class TimesheetFutureTimesValidatorTest extends ConstraintValidatorTestCase
{
$this->expectException(UnexpectedTypeException::class);
$this->validator->validate(new NotBlank(), new TimesheetFutureTimes(['message' => 'myMessage'])); // @phpstan-ignore-line
$this->validator->validate(new NotBlank(), new TimesheetFutureTimes(['message' => 'myMessage']));
}
public function testFutureBeginIsDisallowed(): void

View File

@@ -75,7 +75,7 @@ class TimesheetLockdownValidatorTest extends ConstraintValidatorTestCase
{
$this->expectException(UnexpectedTypeException::class);
$this->validator->validate(new NotBlank(), new TimesheetLockdown(['message' => 'myMessage'])); // @phpstan-ignore-line
$this->validator->validate(new NotBlank(), new TimesheetLockdown(['message' => 'myMessage']));
}
public function testValidatorWithoutNowConstraint(): void

View File

@@ -55,7 +55,7 @@ class TimesheetLongRunningValidatorTest extends ConstraintValidatorTestCase
{
$this->expectException(UnexpectedTypeException::class);
$this->validator->validate(new NotBlank(), new TimesheetLongRunning(['message' => 'myMessage'])); // @phpstan-ignore-line
$this->validator->validate(new NotBlank(), new TimesheetLongRunning(['message' => 'myMessage']));
}
public function testLongRunningTriggers(): void

View File

@@ -58,7 +58,7 @@ class TimesheetOverlappingValidatorTest extends ConstraintValidatorTestCase
{
$this->expectException(UnexpectedTypeException::class);
$this->validator->validate(new NotBlank(), new TimesheetOverlapping(['message' => 'myMessage'])); // @phpstan-ignore-line
$this->validator->validate(new NotBlank(), new TimesheetOverlapping(['message' => 'myMessage']));
}
public function testOverlappingDisallowedWithRecords(): void

View File

@@ -57,7 +57,7 @@ class TimesheetRestartValidatorTest extends ConstraintValidatorTestCase
{
$this->expectException(UnexpectedTypeException::class);
$this->validator->validate(new NotBlank(), new TimesheetOverlapping(['message' => 'myMessage'])); // @phpstan-ignore-line
$this->validator->validate(new NotBlank(), new TimesheetOverlapping(['message' => 'myMessage']));
}
/**

View File

@@ -44,6 +44,6 @@ class TimesheetValidatorTest extends ConstraintValidatorTestCase
{
$this->expectException(UnexpectedTypeException::class);
$this->validator->validate(new NotBlank(), new TimesheetConstraint(['message' => 'myMessage'])); // @phpstan-ignore-line
$this->validator->validate(new NotBlank(), new TimesheetConstraint(['message' => 'myMessage']));
}
}

View File

@@ -55,7 +55,7 @@ class TimesheetZeroDurationValidatorTest extends ConstraintValidatorTestCase
{
$this->expectException(UnexpectedTypeException::class);
$this->validator->validate(new NotBlank(), new TimesheetZeroDuration(['message' => 'Duration cannot be zero.'])); // @phpstan-ignore-line
$this->validator->validate(new NotBlank(), new TimesheetZeroDuration(['message' => 'Duration cannot be zero.']));
}
private function prepareTimesheet()

View File

@@ -202,11 +202,6 @@ parameters:
count: 1
path: API/ActivityControllerTest.php
-
message: "#^Parameter \\#1 \\$json of function json_decode expects string, string\\|false given\\.$#"
count: 12
path: API/ActivityControllerTest.php
-
message: "#^Parameter \\#5 \\$content of method App\\\\Tests\\\\API\\\\APIControllerBaseTest\\:\\:request\\(\\) expects string\\|null, string\\|false given\\.$#"
count: 13
@@ -297,11 +292,6 @@ parameters:
count: 1
path: API/CustomerControllerTest.php
-
message: "#^Parameter \\#1 \\$json of function json_decode expects string, string\\|false given\\.$#"
count: 12
path: API/CustomerControllerTest.php
-
message: "#^Parameter \\#5 \\$content of method App\\\\Tests\\\\API\\\\APIControllerBaseTest\\:\\:request\\(\\) expects string\\|null, string\\|false given\\.$#"
count: 13
@@ -382,11 +372,6 @@ parameters:
count: 1
path: API/ProjectControllerTest.php
-
message: "#^Parameter \\#1 \\$json of function json_decode expects string, string\\|false given\\.$#"
count: 14
path: API/ProjectControllerTest.php
-
message: "#^Parameter \\#5 \\$content of method App\\\\Tests\\\\API\\\\APIControllerBaseTest\\:\\:request\\(\\) expects string\\|null, string\\|false given\\.$#"
count: 15
@@ -1657,21 +1642,11 @@ parameters:
count: 1
path: Entity/TimesheetValidationTest.php
-
message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetValidationTest\\:\\:assertHasViolationForField\\(\\) has parameter \\$fieldNames with no value type specified in iterable type array\\.$#"
count: 1
path: Entity/TimesheetValidationTest.php
-
message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetValidationTest\\:\\:assertHasViolationForField\\(\\) has parameter \\$groups with no type specified\\.$#"
count: 1
path: Entity/TimesheetValidationTest.php
-
message: "#^Method App\\\\Tests\\\\Entity\\\\TimesheetValidationTest\\:\\:getEntity\\(\\) has no return type specified\\.$#"
count: 1
path: Entity/TimesheetValidationTest.php
-
message: "#^Cannot access offset 0 on iterable\\<App\\\\Entity\\\\Team\\>\\.$#"
count: 1
@@ -1692,11 +1667,6 @@ parameters:
count: 1
path: Entity/UserValidationTest.php
-
message: "#^Method App\\\\Tests\\\\Entity\\\\UserValidationTest\\:\\:assertHasViolationForField\\(\\) has parameter \\$fieldNames with no value type specified in iterable type array\\.$#"
count: 1
path: Entity/UserValidationTest.php
-
message: "#^Method App\\\\Tests\\\\Entity\\\\UserValidationTest\\:\\:assertHasViolationForField\\(\\) has parameter \\$groups with no type specified\\.$#"
count: 1