Release 2.13 (#4659)
This commit is contained in:
@@ -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']);
|
||||
|
||||
@@ -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']);
|
||||
|
||||
@@ -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']);
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -24,7 +24,7 @@ class TimesheetValidationTest extends KernelTestCase
|
||||
{
|
||||
use EntityValidationTestTrait;
|
||||
|
||||
protected function getEntity()
|
||||
protected function getEntity(): Timesheet
|
||||
{
|
||||
$customer = new Customer('Test Customer');
|
||||
|
||||
|
||||
@@ -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
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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']));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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']));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user