mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-08-23 16:13:50 +00:00
fix cs
This commit is contained in:
@@ -32,6 +32,17 @@ final class AddressControllerTest extends \Symfony\Bundle\FrameworkBundle\Test\W
|
||||
self::ensureKernelShutdown();
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider generateAddressIds
|
||||
*/
|
||||
public function testDuplicate(int $addressId)
|
||||
{
|
||||
$this->client = $this->getClientAuthenticated();
|
||||
$this->client->request('POST', "/api/1.0/main/address/{$addressId}/duplicate.json");
|
||||
|
||||
$this->assertResponseIsSuccessful('test that duplicate is successful');
|
||||
}
|
||||
|
||||
public static function generateAddressIds(): iterable
|
||||
{
|
||||
self::bootKernel();
|
||||
@@ -49,15 +60,4 @@ final class AddressControllerTest extends \Symfony\Bundle\FrameworkBundle\Test\W
|
||||
|
||||
self::ensureKernelShutdown();
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider generateAddressIds
|
||||
*/
|
||||
public function testDuplicate(int $addressId)
|
||||
{
|
||||
$this->client = $this->getClientAuthenticated();
|
||||
$this->client->request('POST', "/api/1.0/main/address/{$addressId}/duplicate.json");
|
||||
|
||||
$this->assertResponseIsSuccessful('test that duplicate is successful');
|
||||
}
|
||||
}
|
||||
|
@@ -25,6 +25,22 @@ final class AddressReferenceApiControllerTest extends WebTestCase
|
||||
{
|
||||
use PrepareClientTrait;
|
||||
|
||||
/**
|
||||
* @dataProvider provideData
|
||||
*/
|
||||
public function testSearch(int $postCodeId, string $pattern)
|
||||
{
|
||||
$client = $this->getClientAuthenticated();
|
||||
|
||||
$client->request(
|
||||
'GET',
|
||||
"/api/1.0/main/address-reference/by-postal-code/{$postCodeId}/search.json",
|
||||
['q' => $pattern]
|
||||
);
|
||||
|
||||
$this->assertResponseIsSuccessful();
|
||||
}
|
||||
|
||||
public static function provideData()
|
||||
{
|
||||
self::bootKernel();
|
||||
@@ -42,20 +58,4 @@ final class AddressReferenceApiControllerTest extends WebTestCase
|
||||
|
||||
yield [$postalCode->getId(), 'rue'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideData
|
||||
*/
|
||||
public function testSearch(int $postCodeId, string $pattern)
|
||||
{
|
||||
$client = $this->getClientAuthenticated();
|
||||
|
||||
$client->request(
|
||||
'GET',
|
||||
"/api/1.0/main/address-reference/by-postal-code/{$postCodeId}/search.json",
|
||||
['q' => $pattern]
|
||||
);
|
||||
|
||||
$this->assertResponseIsSuccessful();
|
||||
}
|
||||
}
|
||||
|
@@ -52,26 +52,6 @@ class AddressToReferenceMatcherControllerTest extends WebTestCase
|
||||
$this->assertEquals(Address::ADDR_REFERENCE_STATUS_REVIEWED, $address->getRefStatus());
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider addressUnsyncedProvider
|
||||
*/
|
||||
public function testSyncAddressWithReference(int $addressId): void
|
||||
{
|
||||
$client = $this->getClientAuthenticated();
|
||||
|
||||
$client->request('POST', "/api/1.0/main/address/reference-match/{$addressId}/sync-with-reference");
|
||||
|
||||
$this->assertResponseIsSuccessful();
|
||||
|
||||
$this->addressRepository = self::getContainer()->get(AddressRepository::class);
|
||||
$address = $this->addressRepository->find($addressId);
|
||||
|
||||
$this->assertEquals(Address::ADDR_REFERENCE_STATUS_MATCH, $address->getRefStatus());
|
||||
$this->assertEquals($address->getAddressReference()->getStreet(), $address->getStreet());
|
||||
$this->assertEquals($address->getAddressReference()->getStreetNumber(), $address->getStreetNumber());
|
||||
$this->assertEquals($address->getAddressReference()->getPoint()->toWKT(), $address->getPoint()->toWKT());
|
||||
}
|
||||
|
||||
public static function addressToReviewProvider(): iterable
|
||||
{
|
||||
self::bootKernel();
|
||||
@@ -98,6 +78,26 @@ class AddressToReferenceMatcherControllerTest extends WebTestCase
|
||||
self::ensureKernelShutdown();
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider addressUnsyncedProvider
|
||||
*/
|
||||
public function testSyncAddressWithReference(int $addressId): void
|
||||
{
|
||||
$client = $this->getClientAuthenticated();
|
||||
|
||||
$client->request('POST', "/api/1.0/main/address/reference-match/{$addressId}/sync-with-reference");
|
||||
|
||||
$this->assertResponseIsSuccessful();
|
||||
|
||||
$this->addressRepository = self::getContainer()->get(AddressRepository::class);
|
||||
$address = $this->addressRepository->find($addressId);
|
||||
|
||||
$this->assertEquals(Address::ADDR_REFERENCE_STATUS_MATCH, $address->getRefStatus());
|
||||
$this->assertEquals($address->getAddressReference()->getStreet(), $address->getStreet());
|
||||
$this->assertEquals($address->getAddressReference()->getStreetNumber(), $address->getStreetNumber());
|
||||
$this->assertEquals($address->getAddressReference()->getPoint()->toWKT(), $address->getPoint()->toWKT());
|
||||
}
|
||||
|
||||
public static function addressUnsyncedProvider(): iterable
|
||||
{
|
||||
self::bootKernel();
|
||||
|
@@ -55,6 +55,25 @@ class NewsItemControllerTest extends WebTestCase
|
||||
$em->flush();
|
||||
}
|
||||
|
||||
public function testList()
|
||||
{
|
||||
$client = $this->getClientAuthenticated('admin', 'password');
|
||||
$client->request('GET', '/fr/admin/news_item');
|
||||
|
||||
self::assertResponseIsSuccessful('News item admin page shows');
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider generateNewsItemIds
|
||||
*/
|
||||
public function testShowSingleItem(NewsItem $newsItem)
|
||||
{
|
||||
$client = $this->getClientAuthenticated('admin', 'password');
|
||||
$client->request('GET', "/fr/admin/news_item/{$newsItem->getId()}/view");
|
||||
|
||||
self::assertResponseIsSuccessful('Single news item admin page loads successfully');
|
||||
}
|
||||
|
||||
public static function generateNewsItemIds(): iterable
|
||||
{
|
||||
self::bootKernel();
|
||||
@@ -74,23 +93,4 @@ class NewsItemControllerTest extends WebTestCase
|
||||
|
||||
yield [$newsItem];
|
||||
}
|
||||
|
||||
public function testList()
|
||||
{
|
||||
$client = $this->getClientAuthenticated('admin', 'password');
|
||||
$client->request('GET', '/fr/admin/news_item');
|
||||
|
||||
self::assertResponseIsSuccessful('News item admin page shows');
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider generateNewsItemIds
|
||||
*/
|
||||
public function testShowSingleItem(NewsItem $newsItem)
|
||||
{
|
||||
$client = $this->getClientAuthenticated('admin', 'password');
|
||||
$client->request('GET', "/fr/admin/news_item/{$newsItem->getId()}/view");
|
||||
|
||||
self::assertResponseIsSuccessful('Single news item admin page loads successfully');
|
||||
}
|
||||
}
|
||||
|
@@ -51,27 +51,6 @@ class NewsItemsHistoryControllerTest extends WebTestCase
|
||||
self::ensureKernelShutdown();
|
||||
}
|
||||
|
||||
public static function generateNewsItemIds(): iterable
|
||||
{
|
||||
self::bootKernel();
|
||||
$em = self::getContainer()->get(EntityManagerInterface::class);
|
||||
|
||||
$news = new NewsItem();
|
||||
|
||||
$news->setContent('test content');
|
||||
$news->setTitle('Title');
|
||||
$news->setStartDate(new \DateTimeImmutable('yesterday'));
|
||||
|
||||
$em->persist($news);
|
||||
$em->flush();
|
||||
|
||||
static::$toDelete[] = [NewsItem::class, $news];
|
||||
|
||||
self::ensureKernelShutdown();
|
||||
|
||||
yield [$news->getId()];
|
||||
}
|
||||
|
||||
public function testList()
|
||||
{
|
||||
self::ensureKernelShutdown();
|
||||
@@ -94,4 +73,25 @@ class NewsItemsHistoryControllerTest extends WebTestCase
|
||||
|
||||
$this->assertResponseIsSuccessful('test that single news item page loads successfully');
|
||||
}
|
||||
|
||||
public static function generateNewsItemIds(): iterable
|
||||
{
|
||||
self::bootKernel();
|
||||
$em = self::getContainer()->get(EntityManagerInterface::class);
|
||||
|
||||
$news = new NewsItem();
|
||||
|
||||
$news->setContent('test content');
|
||||
$news->setTitle('Title');
|
||||
$news->setStartDate(new \DateTimeImmutable('yesterday'));
|
||||
|
||||
$em->persist($news);
|
||||
$em->flush();
|
||||
|
||||
static::$toDelete[] = [NewsItem::class, $news];
|
||||
|
||||
self::ensureKernelShutdown();
|
||||
|
||||
yield [$news->getId()];
|
||||
}
|
||||
}
|
||||
|
@@ -44,33 +44,6 @@ final class NotificationApiControllerTest extends WebTestCase
|
||||
self::$toDelete = [];
|
||||
}
|
||||
|
||||
public static function generateDataMarkAsRead()
|
||||
{
|
||||
self::bootKernel();
|
||||
$em = self::getContainer()->get(EntityManagerInterface::class);
|
||||
$userRepository = self::getContainer()->get(UserRepository::class);
|
||||
$userA = $userRepository->findOneBy(['username' => 'center a_social']);
|
||||
$userB = $userRepository->findOneBy(['username' => 'center b_social']);
|
||||
|
||||
$notification = new Notification();
|
||||
$notification
|
||||
->setMessage('Test generated')
|
||||
->setRelatedEntityClass(AccompanyingPeriod::class)
|
||||
->setRelatedEntityId(0)
|
||||
->setSender($userB)
|
||||
->addAddressee($userA)
|
||||
->setUpdatedAt(new \DateTimeImmutable());
|
||||
$em->persist($notification);
|
||||
$em->refresh($notification);
|
||||
$em->flush();
|
||||
|
||||
self::$toDelete[] = [Notification::class, $notification->getId()];
|
||||
|
||||
self::ensureKernelShutdown();
|
||||
|
||||
yield [$notification->getId()];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider generateDataMarkAsRead
|
||||
*/
|
||||
@@ -99,4 +72,31 @@ final class NotificationApiControllerTest extends WebTestCase
|
||||
|
||||
$this->assertFalse($notification->isReadBy($user));
|
||||
}
|
||||
|
||||
public static function generateDataMarkAsRead()
|
||||
{
|
||||
self::bootKernel();
|
||||
$em = self::getContainer()->get(EntityManagerInterface::class);
|
||||
$userRepository = self::getContainer()->get(UserRepository::class);
|
||||
$userA = $userRepository->findOneBy(['username' => 'center a_social']);
|
||||
$userB = $userRepository->findOneBy(['username' => 'center b_social']);
|
||||
|
||||
$notification = new Notification();
|
||||
$notification
|
||||
->setMessage('Test generated')
|
||||
->setRelatedEntityClass(AccompanyingPeriod::class)
|
||||
->setRelatedEntityId(0)
|
||||
->setSender($userB)
|
||||
->addAddressee($userA)
|
||||
->setUpdatedAt(new \DateTimeImmutable());
|
||||
$em->persist($notification);
|
||||
$em->refresh($notification);
|
||||
$em->flush();
|
||||
|
||||
self::$toDelete[] = [Notification::class, $notification->getId()];
|
||||
|
||||
self::ensureKernelShutdown();
|
||||
|
||||
yield [$notification->getId()];
|
||||
}
|
||||
}
|
||||
|
@@ -24,17 +24,6 @@ final class SearchApiControllerTest extends WebTestCase
|
||||
{
|
||||
use PrepareClientTrait;
|
||||
|
||||
public static function generateSearchData()
|
||||
{
|
||||
yield ['per', ['person', 'thirdparty']];
|
||||
|
||||
yield ['per', ['thirdparty']];
|
||||
|
||||
yield ['per', ['person']];
|
||||
|
||||
yield ['fjklmeqjfkdqjklrmefdqjklm', ['person', 'thirdparty']];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider generateSearchData
|
||||
*/
|
||||
@@ -50,4 +39,15 @@ final class SearchApiControllerTest extends WebTestCase
|
||||
|
||||
$this->assertResponseIsSuccessful();
|
||||
}
|
||||
|
||||
public static function generateSearchData()
|
||||
{
|
||||
yield ['per', ['person', 'thirdparty']];
|
||||
|
||||
yield ['per', ['thirdparty']];
|
||||
|
||||
yield ['per', ['person']];
|
||||
|
||||
yield ['fjklmeqjfkdqjklrmefdqjklm', ['person', 'thirdparty']];
|
||||
}
|
||||
}
|
||||
|
@@ -27,25 +27,6 @@ final class UserControllerTest extends WebTestCase
|
||||
{
|
||||
use PrepareClientTrait;
|
||||
|
||||
public static function dataGenerateUserId()
|
||||
{
|
||||
self::bootKernel();
|
||||
$em = self::getContainer()->get(EntityManagerInterface::class);
|
||||
/** @var UserPasswordHasherInterface::class $passwordHasher */
|
||||
$passwordHasher = self::getContainer()->get(UserPasswordHasherInterface::class);
|
||||
|
||||
$user = new User();
|
||||
$user->setUsername('Test_user '.uniqid());
|
||||
$user->setPassword($passwordHasher->hashPassword($user, 'password'));
|
||||
|
||||
$em->persist($user);
|
||||
$em->flush();
|
||||
|
||||
self::ensureKernelShutdown();
|
||||
|
||||
yield [$user->getId(), $user->getUsername()];
|
||||
}
|
||||
|
||||
public function testList()
|
||||
{
|
||||
$client = $this->getClientAuthenticatedAsAdmin();
|
||||
@@ -135,6 +116,25 @@ final class UserControllerTest extends WebTestCase
|
||||
$this->isPasswordValid($username, $newPassword);
|
||||
}
|
||||
|
||||
public static function dataGenerateUserId()
|
||||
{
|
||||
self::bootKernel();
|
||||
$em = self::getContainer()->get(EntityManagerInterface::class);
|
||||
/** @var UserPasswordHasherInterface::class $passwordHasher */
|
||||
$passwordHasher = self::getContainer()->get(UserPasswordHasherInterface::class);
|
||||
|
||||
$user = new User();
|
||||
$user->setUsername('Test_user '.uniqid());
|
||||
$user->setPassword($passwordHasher->hashPassword($user, 'password'));
|
||||
|
||||
$em->persist($user);
|
||||
$em->flush();
|
||||
|
||||
self::ensureKernelShutdown();
|
||||
|
||||
yield [$user->getId(), $user->getUsername()];
|
||||
}
|
||||
|
||||
protected function isPasswordValid($username, $password)
|
||||
{
|
||||
/** @var \Symfony\Component\PasswordHasher\Hasher\UserPasswordHasher $passwordEncoder */
|
||||
|
@@ -31,6 +31,22 @@ final class AgeTest extends KernelTestCase
|
||||
$this->entityManager = self::getContainer()->get(EntityManagerInterface::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider generateQueries
|
||||
*/
|
||||
public function testWorking(string $dql, array $args)
|
||||
{
|
||||
$dql = $this->entityManager->createQuery($dql)->setMaxResults(3);
|
||||
|
||||
foreach ($args as $key => $value) {
|
||||
$dql->setParameter($key, $value);
|
||||
}
|
||||
|
||||
$results = $dql->getResult();
|
||||
|
||||
$this->assertIsArray($results);
|
||||
}
|
||||
|
||||
public static function generateQueries(): iterable
|
||||
{
|
||||
yield [
|
||||
@@ -60,20 +76,4 @@ final class AgeTest extends KernelTestCase
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider generateQueries
|
||||
*/
|
||||
public function testWorking(string $dql, array $args)
|
||||
{
|
||||
$dql = $this->entityManager->createQuery($dql)->setMaxResults(3);
|
||||
|
||||
foreach ($args as $key => $value) {
|
||||
$dql->setParameter($key, $value);
|
||||
}
|
||||
|
||||
$results = $dql->getResult();
|
||||
|
||||
$this->assertIsArray($results);
|
||||
}
|
||||
}
|
||||
|
@@ -31,13 +31,6 @@ final class JsonExtractTest extends KernelTestCase
|
||||
$this->em = self::getContainer()->get(EntityManagerInterface::class);
|
||||
}
|
||||
|
||||
public static function dataGenerateDql(): iterable
|
||||
{
|
||||
yield ['SELECT JSON_EXTRACT(c.name, \'fr\') FROM '.Country::class.' c', []];
|
||||
|
||||
yield ['SELECT JSON_EXTRACT(c.name, :lang) FROM '.Country::class.' c', ['lang' => 'fr']];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataGenerateDql
|
||||
*/
|
||||
@@ -50,4 +43,11 @@ final class JsonExtractTest extends KernelTestCase
|
||||
|
||||
$this->assertIsArray($results, 'simply test that the query return a result');
|
||||
}
|
||||
|
||||
public static function dataGenerateDql(): iterable
|
||||
{
|
||||
yield ['SELECT JSON_EXTRACT(c.name, \'fr\') FROM '.Country::class.' c', []];
|
||||
|
||||
yield ['SELECT JSON_EXTRACT(c.name, :lang) FROM '.Country::class.' c', ['lang' => 'fr']];
|
||||
}
|
||||
}
|
||||
|
@@ -44,26 +44,6 @@ final class NotificationTest extends KernelTestCase
|
||||
$em->flush();
|
||||
}
|
||||
|
||||
public static function generateNotificationData()
|
||||
{
|
||||
self::bootKernel();
|
||||
$userRepository = self::getContainer()->get(UserRepository::class);
|
||||
|
||||
$senderId = $userRepository
|
||||
->findOneBy(['username' => 'center b_social'])
|
||||
->getId();
|
||||
|
||||
$addressesIds = [];
|
||||
$addressesIds[] = $userRepository
|
||||
->findOneBy(['username' => 'center b_direction'])
|
||||
->getId();
|
||||
|
||||
yield [
|
||||
$senderId,
|
||||
$addressesIds,
|
||||
];
|
||||
}
|
||||
|
||||
public function testAddAddresseeStoreAnUread()
|
||||
{
|
||||
$notification = new Notification();
|
||||
@@ -139,4 +119,24 @@ final class NotificationTest extends KernelTestCase
|
||||
$this->assertContains($addresseeId, $unreadIds);
|
||||
}
|
||||
}
|
||||
|
||||
public static function generateNotificationData()
|
||||
{
|
||||
self::bootKernel();
|
||||
$userRepository = self::getContainer()->get(UserRepository::class);
|
||||
|
||||
$senderId = $userRepository
|
||||
->findOneBy(['username' => 'center b_social'])
|
||||
->getId();
|
||||
|
||||
$addressesIds = [];
|
||||
$addressesIds[] = $userRepository
|
||||
->findOneBy(['username' => 'center b_direction'])
|
||||
->getId();
|
||||
|
||||
yield [
|
||||
$senderId,
|
||||
$addressesIds,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@@ -33,6 +33,23 @@ final class PageTest extends KernelTestCase
|
||||
$this->prophet = new \Prophecy\Prophet();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $number
|
||||
* @param int $itemPerPage
|
||||
* @param int $expectedItemPerPage
|
||||
*
|
||||
* @dataProvider generateGetFirstItemNumber
|
||||
*/
|
||||
public function testGetFirstItemNumber(
|
||||
$number,
|
||||
$itemPerPage,
|
||||
$expectedItemPerPage,
|
||||
) {
|
||||
$page = $this->generatePage($number, $itemPerPage);
|
||||
|
||||
$this->assertEquals($expectedItemPerPage, $page->getFirstItemNumber());
|
||||
}
|
||||
|
||||
/**
|
||||
* return a set of element to testGetFirstItemNumber.
|
||||
*
|
||||
@@ -51,6 +68,23 @@ final class PageTest extends KernelTestCase
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $number
|
||||
* @param int $itemPerPage
|
||||
* @param int $expectedItemPerPage
|
||||
*
|
||||
* @dataProvider generateGetLastItemNumber
|
||||
*/
|
||||
public function testGetLastItemNumber(
|
||||
$number,
|
||||
$itemPerPage,
|
||||
$expectedItemPerPage,
|
||||
) {
|
||||
$page = $this->generatePage($number, $itemPerPage);
|
||||
|
||||
$this->assertEquals($expectedItemPerPage, $page->getLastItemNumber());
|
||||
}
|
||||
|
||||
/**
|
||||
* return a set of element to testGetLastItemNumber.
|
||||
*
|
||||
@@ -69,40 +103,6 @@ final class PageTest extends KernelTestCase
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $number
|
||||
* @param int $itemPerPage
|
||||
* @param int $expectedItemPerPage
|
||||
*
|
||||
* @dataProvider generateGetFirstItemNumber
|
||||
*/
|
||||
public function testGetFirstItemNumber(
|
||||
$number,
|
||||
$itemPerPage,
|
||||
$expectedItemPerPage,
|
||||
) {
|
||||
$page = $this->generatePage($number, $itemPerPage);
|
||||
|
||||
$this->assertEquals($expectedItemPerPage, $page->getFirstItemNumber());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $number
|
||||
* @param int $itemPerPage
|
||||
* @param int $expectedItemPerPage
|
||||
*
|
||||
* @dataProvider generateGetLastItemNumber
|
||||
*/
|
||||
public function testGetLastItemNumber(
|
||||
$number,
|
||||
$itemPerPage,
|
||||
$expectedItemPerPage,
|
||||
) {
|
||||
$page = $this->generatePage($number, $itemPerPage);
|
||||
|
||||
$this->assertEquals($expectedItemPerPage, $page->getLastItemNumber());
|
||||
}
|
||||
|
||||
public function testPageNumber()
|
||||
{
|
||||
$page = $this->generatePage(1);
|
||||
|
@@ -34,73 +34,6 @@ final class PaginatorTest extends KernelTestCase
|
||||
$this->prophet = new \Prophecy\Prophet();
|
||||
}
|
||||
|
||||
/**
|
||||
* generate an array with a set of page with :
|
||||
* - total items ;
|
||||
* - item per page ;
|
||||
* - current page number ;
|
||||
* - expected hasNextPage result.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function generateHasNextPage()
|
||||
{
|
||||
return [
|
||||
[10, 10, 1, false],
|
||||
[20, 10, 1, true],
|
||||
[12, 10, 1, true],
|
||||
[12, 10, 2, false],
|
||||
];
|
||||
}
|
||||
|
||||
public static function generateHasPage()
|
||||
{
|
||||
return [
|
||||
[10, 10, -1, false],
|
||||
[12, 10, 1, true],
|
||||
[12, 10, 2, true],
|
||||
[12, 10, 3, false],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* generate an array with a set of page with :
|
||||
* - total items ;
|
||||
* - item per page ;
|
||||
* - current page number ;
|
||||
* - expected hasPreviousPage result.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function generateHasPreviousPage()
|
||||
{
|
||||
return [
|
||||
[10, 10, 1, false],
|
||||
[20, 10, 1, false],
|
||||
[12, 10, 1, false],
|
||||
[12, 10, 2, true],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* generate a set of pages with different maxItem, itemPerPage, and
|
||||
* expected page number.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function generatePageNumber()
|
||||
{
|
||||
return [
|
||||
[12, 10, 2],
|
||||
[20, 10, 2],
|
||||
[21, 10, 3],
|
||||
[19, 10, 2],
|
||||
[1, 10, 1],
|
||||
[0, 10, 1],
|
||||
[10, 10, 1],
|
||||
];
|
||||
}
|
||||
|
||||
public function testGetPage()
|
||||
{
|
||||
$paginator = $this->generatePaginator(105, 10);
|
||||
@@ -127,6 +60,25 @@ final class PaginatorTest extends KernelTestCase
|
||||
$this->assertEquals($expectedHasNextPage, $paginator->hasNextPage());
|
||||
}
|
||||
|
||||
/**
|
||||
* generate an array with a set of page with :
|
||||
* - total items ;
|
||||
* - item per page ;
|
||||
* - current page number ;
|
||||
* - expected hasNextPage result.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function generateHasNextPage()
|
||||
{
|
||||
return [
|
||||
[10, 10, 1, false],
|
||||
[20, 10, 1, true],
|
||||
[12, 10, 1, true],
|
||||
[12, 10, 2, false],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* test the HasPage function.
|
||||
*
|
||||
@@ -148,6 +100,16 @@ final class PaginatorTest extends KernelTestCase
|
||||
$this->assertEquals($expectedHasPage, $paginator->hasPage($pageNumber));
|
||||
}
|
||||
|
||||
public static function generateHasPage()
|
||||
{
|
||||
return [
|
||||
[10, 10, -1, false],
|
||||
[12, 10, 1, true],
|
||||
[12, 10, 2, true],
|
||||
[12, 10, 3, false],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $totalItems
|
||||
* @param int $itemPerPage
|
||||
@@ -166,6 +128,25 @@ final class PaginatorTest extends KernelTestCase
|
||||
$this->assertEquals($expectedHasNextPage, $paginator->hasPreviousPage());
|
||||
}
|
||||
|
||||
/**
|
||||
* generate an array with a set of page with :
|
||||
* - total items ;
|
||||
* - item per page ;
|
||||
* - current page number ;
|
||||
* - expected hasPreviousPage result.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function generateHasPreviousPage()
|
||||
{
|
||||
return [
|
||||
[10, 10, 1, false],
|
||||
[20, 10, 1, false],
|
||||
[12, 10, 1, false],
|
||||
[12, 10, 2, true],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that the countPages method (and his alias `count`) return
|
||||
* valid results.
|
||||
@@ -184,6 +165,25 @@ final class PaginatorTest extends KernelTestCase
|
||||
$this->assertEquals($expectedPageNumber, \count($paginator));
|
||||
}
|
||||
|
||||
/**
|
||||
* generate a set of pages with different maxItem, itemPerPage, and
|
||||
* expected page number.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function generatePageNumber()
|
||||
{
|
||||
return [
|
||||
[12, 10, 2],
|
||||
[20, 10, 2],
|
||||
[21, 10, 3],
|
||||
[19, 10, 2],
|
||||
[1, 10, 1],
|
||||
[0, 10, 1],
|
||||
[10, 10, 1],
|
||||
];
|
||||
}
|
||||
|
||||
public function testPagesGenerator()
|
||||
{
|
||||
$paginator = $this->generatePaginator(105, 10);
|
||||
|
@@ -25,6 +25,25 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
|
||||
*/
|
||||
final class PhonenumberHelperTest extends KernelTestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider formatPhonenumbers
|
||||
*/
|
||||
public function testFormatPhonenumbers(string $defaultCarrierCode, string $phoneNumber, string $expected)
|
||||
{
|
||||
$util = PhoneNumberUtil::getInstance();
|
||||
$subject = new PhonenumberHelper(
|
||||
new ArrayAdapter(),
|
||||
new ParameterBag([
|
||||
'chill_main.phone_helper' => [
|
||||
'default_carrier_code' => $defaultCarrierCode,
|
||||
],
|
||||
]),
|
||||
new NullLogger()
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $subject->format($util->parse($phoneNumber)));
|
||||
}
|
||||
|
||||
public static function formatPhonenumbers()
|
||||
{
|
||||
yield [
|
||||
@@ -51,23 +70,4 @@ final class PhonenumberHelperTest extends KernelTestCase
|
||||
'00 33 6 23 12 45 54',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider formatPhonenumbers
|
||||
*/
|
||||
public function testFormatPhonenumbers(string $defaultCarrierCode, string $phoneNumber, string $expected)
|
||||
{
|
||||
$util = PhoneNumberUtil::getInstance();
|
||||
$subject = new PhonenumberHelper(
|
||||
new ArrayAdapter(),
|
||||
new ParameterBag([
|
||||
'chill_main.phone_helper' => [
|
||||
'default_carrier_code' => $defaultCarrierCode,
|
||||
],
|
||||
]),
|
||||
new NullLogger()
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $subject->format($util->parse($phoneNumber)));
|
||||
}
|
||||
}
|
||||
|
@@ -21,23 +21,6 @@ use PHPUnit\Framework\TestCase;
|
||||
*/
|
||||
final class ExtractDateFromPatternTest extends TestCase
|
||||
{
|
||||
public static function provideSubjects()
|
||||
{
|
||||
yield ['15/06/1981', '', 1, '1981-06-15'];
|
||||
|
||||
yield ['15/06/1981 30/12/1987', '', 2, '1981-06-15', '1987-12-30'];
|
||||
|
||||
yield ['diallo 15/06/1981', 'diallo', 1, '1981-06-15'];
|
||||
|
||||
yield ['diallo 31/03/1981', 'diallo', 1, '1981-03-31'];
|
||||
|
||||
yield ['diallo 15-06-1981', 'diallo', 1, '1981-06-15'];
|
||||
|
||||
yield ['diallo 1981-12-08', 'diallo', 1, '1981-12-08'];
|
||||
|
||||
yield ['diallo', 'diallo', 0];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideSubjects
|
||||
*/
|
||||
@@ -59,4 +42,21 @@ final class ExtractDateFromPatternTest extends TestCase
|
||||
$this->assertContains($date, $dates);
|
||||
}
|
||||
}
|
||||
|
||||
public static function provideSubjects()
|
||||
{
|
||||
yield ['15/06/1981', '', 1, '1981-06-15'];
|
||||
|
||||
yield ['15/06/1981 30/12/1987', '', 2, '1981-06-15', '1987-12-30'];
|
||||
|
||||
yield ['diallo 15/06/1981', 'diallo', 1, '1981-06-15'];
|
||||
|
||||
yield ['diallo 31/03/1981', 'diallo', 1, '1981-03-31'];
|
||||
|
||||
yield ['diallo 15-06-1981', 'diallo', 1, '1981-06-15'];
|
||||
|
||||
yield ['diallo 1981-12-08', 'diallo', 1, '1981-12-08'];
|
||||
|
||||
yield ['diallo', 'diallo', 0];
|
||||
}
|
||||
}
|
||||
|
@@ -22,6 +22,21 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
|
||||
*/
|
||||
final class ExtractPhonenumberFromPatternTest extends KernelTestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider provideData
|
||||
*/
|
||||
public function testExtract(string $defaultCarrierCode, mixed $subject, mixed $expectedCount, mixed $expected, mixed $filteredSubject, mixed $msg)
|
||||
{
|
||||
$extractor = new ExtractPhonenumberFromPattern(new ParameterBag(['chill_main' => [
|
||||
'phone_helper' => ['default_carrier_code' => $defaultCarrierCode],
|
||||
]]));
|
||||
$result = $extractor->extractPhonenumber($subject);
|
||||
|
||||
$this->assertCount($expectedCount, $result->getFound());
|
||||
$this->assertEquals($filteredSubject, $result->getFilteredSubject());
|
||||
$this->assertEquals($expected, $result->getFound());
|
||||
}
|
||||
|
||||
public static function provideData()
|
||||
{
|
||||
yield ['BE', 'Diallo', 0, [], 'Diallo', 'no phonenumber'];
|
||||
@@ -44,19 +59,4 @@ final class ExtractPhonenumberFromPatternTest extends KernelTestCase
|
||||
|
||||
yield ['FR', 'Diallo +32486 123 456', 1, ['+32486123456'], 'Diallo', 'a phonenumber and a name'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideData
|
||||
*/
|
||||
public function testExtract(string $defaultCarrierCode, mixed $subject, mixed $expectedCount, mixed $expected, mixed $filteredSubject, mixed $msg)
|
||||
{
|
||||
$extractor = new ExtractPhonenumberFromPattern(new ParameterBag(['chill_main' => [
|
||||
'phone_helper' => ['default_carrier_code' => $defaultCarrierCode],
|
||||
]]));
|
||||
$result = $extractor->extractPhonenumber($subject);
|
||||
|
||||
$this->assertCount($expectedCount, $result->getFound());
|
||||
$this->assertEquals($filteredSubject, $result->getFilteredSubject());
|
||||
$this->assertEquals($expected, $result->getFound());
|
||||
}
|
||||
}
|
||||
|
@@ -45,6 +45,29 @@ final class AuthorizationHelperTest extends KernelTestCase
|
||||
self::bootKernel();
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
*/
|
||||
public function testGetParentRoles()
|
||||
{
|
||||
$parentRoles = $this->getAuthorizationHelper()
|
||||
->getParentRoles('CHILL_INHERITED_ROLE_1');
|
||||
|
||||
$this->assertContains(
|
||||
'CHILL_MASTER_ROLE',
|
||||
$parentRoles,
|
||||
'Assert that `CHILL_MASTER_ROLE` is a parent of `CHILL_INHERITED_ROLE_1`'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataProvider_getReachableCenters
|
||||
*/
|
||||
public function testGetReachableCenters(mixed $test, mixed $result, mixed $msg)
|
||||
{
|
||||
$this->assertEquals($test, $result, $msg);
|
||||
}
|
||||
|
||||
public static function dataProvider_getReachableCenters()
|
||||
{
|
||||
self::bootKernel();
|
||||
@@ -143,6 +166,30 @@ final class AuthorizationHelperTest extends KernelTestCase
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataProvider_getReachableScopes
|
||||
*
|
||||
* @param bool $expectedResult
|
||||
* @param string $message
|
||||
*/
|
||||
public function testGetReachableScopes(
|
||||
$expectedResult,
|
||||
Scope $testedScope,
|
||||
User $user,
|
||||
string $role,
|
||||
Center $center,
|
||||
$message,
|
||||
) {
|
||||
$reachableScopes = $this->getAuthorizationHelper()
|
||||
->getReachableScopes($user, $role, $center);
|
||||
|
||||
$this->assertEquals(
|
||||
$expectedResult,
|
||||
\in_array($testedScope, $reachableScopes, true),
|
||||
$message
|
||||
);
|
||||
}
|
||||
|
||||
public static function dataProvider_getReachableScopes()
|
||||
{
|
||||
$centerA = self::prepareCenter(1, 'center A');
|
||||
@@ -198,53 +245,6 @@ final class AuthorizationHelperTest extends KernelTestCase
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
*/
|
||||
public function testGetParentRoles()
|
||||
{
|
||||
$parentRoles = $this->getAuthorizationHelper()
|
||||
->getParentRoles('CHILL_INHERITED_ROLE_1');
|
||||
|
||||
$this->assertContains(
|
||||
'CHILL_MASTER_ROLE',
|
||||
$parentRoles,
|
||||
'Assert that `CHILL_MASTER_ROLE` is a parent of `CHILL_INHERITED_ROLE_1`'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataProvider_getReachableCenters
|
||||
*/
|
||||
public function testGetReachableCenters(mixed $test, mixed $result, mixed $msg)
|
||||
{
|
||||
$this->assertEquals($test, $result, $msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataProvider_getReachableScopes
|
||||
*
|
||||
* @param bool $expectedResult
|
||||
* @param string $message
|
||||
*/
|
||||
public function testGetReachableScopes(
|
||||
$expectedResult,
|
||||
Scope $testedScope,
|
||||
User $user,
|
||||
string $role,
|
||||
Center $center,
|
||||
$message,
|
||||
) {
|
||||
$reachableScopes = $this->getAuthorizationHelper()
|
||||
->getReachableScopes($user, $role, $center);
|
||||
|
||||
$this->assertEquals(
|
||||
$expectedResult,
|
||||
\in_array($testedScope, $reachableScopes, true),
|
||||
$message
|
||||
);
|
||||
}
|
||||
|
||||
public function testtestUserHasAccessUserShouldHaveAccessEntityWithScope()
|
||||
{
|
||||
$center = $this->prepareCenter(1, 'center');
|
||||
|
@@ -32,6 +32,14 @@ final class DateNormalizerTest extends KernelTestCase
|
||||
$this->prophet = new Prophet();
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider generateDataNormalize
|
||||
*/
|
||||
public function testNormalize(mixed $expected, mixed $date, mixed $format, mixed $locale, mixed $msg)
|
||||
{
|
||||
$this->assertEquals($expected, $this->buildDateNormalizer($locale)->normalize($date, $format, []), $msg);
|
||||
}
|
||||
|
||||
public static function generateDataNormalize()
|
||||
{
|
||||
$datetime = \DateTime::createFromFormat('Y-m-d H:i:sO', '2021-06-05 15:05:01+02:00');
|
||||
@@ -63,14 +71,6 @@ final class DateNormalizerTest extends KernelTestCase
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider generateDataNormalize
|
||||
*/
|
||||
public function testNormalize(mixed $expected, mixed $date, mixed $format, mixed $locale, mixed $msg)
|
||||
{
|
||||
$this->assertEquals($expected, $this->buildDateNormalizer($locale)->normalize($date, $format, []), $msg);
|
||||
}
|
||||
|
||||
public function testSupports()
|
||||
{
|
||||
$this->assertTrue($this->buildDateNormalizer()->supportsNormalization(new \DateTime(), 'json'));
|
||||
|
@@ -35,6 +35,17 @@ final class DoctrineExistingEntityNormalizerTest extends KernelTestCase
|
||||
$this->normalizer = new DoctrineExistingEntityNormalizer($em, $serializerFactory);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataProviderUserId
|
||||
*/
|
||||
public function testGetMappedClass(mixed $userId)
|
||||
{
|
||||
$data = ['type' => 'user', 'id' => $userId];
|
||||
$supports = $this->normalizer->supportsDenormalization($data, User::class);
|
||||
|
||||
$this->assertTrue($supports);
|
||||
}
|
||||
|
||||
public static function dataProviderUserId()
|
||||
{
|
||||
self::bootKernel();
|
||||
@@ -49,15 +60,4 @@ final class DoctrineExistingEntityNormalizerTest extends KernelTestCase
|
||||
|
||||
yield [$userIds[0]['id']];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataProviderUserId
|
||||
*/
|
||||
public function testGetMappedClass(mixed $userId)
|
||||
{
|
||||
$data = ['type' => 'user', 'id' => $userId];
|
||||
$supports = $this->normalizer->supportsDenormalization($data, User::class);
|
||||
|
||||
$this->assertTrue($supports);
|
||||
}
|
||||
}
|
||||
|
@@ -28,15 +28,6 @@ final class PhonenumberNormalizerTest extends TestCase
|
||||
{
|
||||
use ProphecyTrait;
|
||||
|
||||
public static function dataProviderNormalizePhonenumber()
|
||||
{
|
||||
$phonenumberUtil = PhoneNumberUtil::getInstance();
|
||||
|
||||
yield [$phonenumberUtil->parse('+32486123465'), 'docgen', ['docgen:expects' => PhoneNumber::class], '0486 12 34 65'];
|
||||
|
||||
yield [null, 'docgen', ['docgen:expects' => PhoneNumber::class], ''];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataProviderNormalizePhonenumber
|
||||
*/
|
||||
@@ -48,4 +39,13 @@ final class PhonenumberNormalizerTest extends TestCase
|
||||
|
||||
$this->assertEquals($expected, $normalizer->normalize($phonenumber, $format, $context));
|
||||
}
|
||||
|
||||
public static function dataProviderNormalizePhonenumber()
|
||||
{
|
||||
$phonenumberUtil = PhoneNumberUtil::getInstance();
|
||||
|
||||
yield [$phonenumberUtil->parse('+32486123465'), 'docgen', ['docgen:expects' => PhoneNumber::class], '0486 12 34 65'];
|
||||
|
||||
yield [null, 'docgen', ['docgen:expects' => PhoneNumber::class], ''];
|
||||
}
|
||||
}
|
||||
|
@@ -38,6 +38,34 @@ final class UserNormalizerTest extends TestCase
|
||||
{
|
||||
use ProphecyTrait;
|
||||
|
||||
/**
|
||||
* @dataProvider dataProviderUserNormalizer
|
||||
*
|
||||
* @throws ExceptionInterface
|
||||
*/
|
||||
public function testNormalize(?User $user, mixed $format, mixed $context, mixed $expected)
|
||||
{
|
||||
$userRender = $this->prophesize(UserRender::class);
|
||||
$userRender->renderString(Argument::type(User::class), Argument::type('array'))->willReturn($user ? $user->getLabel() : '');
|
||||
|
||||
$clock = new MockClock(new \DateTimeImmutable('now'));
|
||||
|
||||
$normalizer = new UserNormalizer($userRender->reveal(), $clock);
|
||||
$normalizer->setNormalizer(new class () implements NormalizerInterface {
|
||||
public function normalize($object, ?string $format = null, array $context = [])
|
||||
{
|
||||
return ['context' => $context['docgen:expects'] ?? null];
|
||||
}
|
||||
|
||||
public function supportsNormalization($data, ?string $format = null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$this->assertEquals($expected, $normalizer->normalize($user, $format, $context));
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws NumberParseException
|
||||
*/
|
||||
@@ -112,32 +140,4 @@ final class UserNormalizerTest extends TestCase
|
||||
'main_center' => ['context' => Center::class],
|
||||
]];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataProviderUserNormalizer
|
||||
*
|
||||
* @throws ExceptionInterface
|
||||
*/
|
||||
public function testNormalize(?User $user, mixed $format, mixed $context, mixed $expected)
|
||||
{
|
||||
$userRender = $this->prophesize(UserRender::class);
|
||||
$userRender->renderString(Argument::type(User::class), Argument::type('array'))->willReturn($user ? $user->getLabel() : '');
|
||||
|
||||
$clock = new MockClock(new \DateTimeImmutable('now'));
|
||||
|
||||
$normalizer = new UserNormalizer($userRender->reveal(), $clock);
|
||||
$normalizer->setNormalizer(new class () implements NormalizerInterface {
|
||||
public function normalize($object, ?string $format = null, array $context = [])
|
||||
{
|
||||
return ['context' => $context['docgen:expects'] ?? null];
|
||||
}
|
||||
|
||||
public function supportsNormalization($data, ?string $format = null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$this->assertEquals($expected, $normalizer->normalize($user, $format, $context));
|
||||
}
|
||||
}
|
||||
|
@@ -45,6 +45,14 @@ class CollateAddressWithReferenceOrPostalCodeCronJobTest extends TestCase
|
||||
self::assertEquals($expected, $job->canRun($execution));
|
||||
}
|
||||
|
||||
public static function provideDataCanRun(): iterable
|
||||
{
|
||||
yield [new \DateTimeImmutable('2023-07-10T12:00:00'), new \DateTimeImmutable('2023-07-10T11:00:00'), false];
|
||||
yield [new \DateTimeImmutable('2023-07-10T12:00:00'), new \DateTimeImmutable('2023-07-10T05:00:00'), true];
|
||||
yield [new \DateTimeImmutable('2023-07-10T12:00:00'), new \DateTimeImmutable('2023-07-01T12:00:00'), true];
|
||||
yield [new \DateTimeImmutable('2023-07-10T12:00:00'), null, true];
|
||||
}
|
||||
|
||||
public function testRun(): void
|
||||
{
|
||||
$clock = new MockClock();
|
||||
@@ -57,12 +65,4 @@ class CollateAddressWithReferenceOrPostalCodeCronJobTest extends TestCase
|
||||
$actual = $job->run(['last-max-id' => 0]);
|
||||
self::assertEquals(['last-max-id' => 1], $actual);
|
||||
}
|
||||
|
||||
public static function provideDataCanRun(): iterable
|
||||
{
|
||||
yield [new \DateTimeImmutable('2023-07-10T12:00:00'), new \DateTimeImmutable('2023-07-10T11:00:00'), false];
|
||||
yield [new \DateTimeImmutable('2023-07-10T12:00:00'), new \DateTimeImmutable('2023-07-10T05:00:00'), true];
|
||||
yield [new \DateTimeImmutable('2023-07-10T12:00:00'), new \DateTimeImmutable('2023-07-01T12:00:00'), true];
|
||||
yield [new \DateTimeImmutable('2023-07-10T12:00:00'), null, true];
|
||||
}
|
||||
}
|
||||
|
@@ -29,37 +29,6 @@ final class RollingDateConverterTest extends TestCase
|
||||
$this->converter = new RollingDateConverter();
|
||||
}
|
||||
|
||||
public static function generateDataConversionDate(): iterable
|
||||
{
|
||||
$format = 'Y-m-d His';
|
||||
|
||||
yield [RollingDate::T_MONTH_CURRENT_START, '2022-11-01 000000', $format];
|
||||
|
||||
yield [RollingDate::T_MONTH_NEXT_START, '2022-12-01 000000', $format];
|
||||
|
||||
yield [RollingDate::T_MONTH_PREVIOUS_START, '2022-10-01 000000', $format];
|
||||
|
||||
yield [RollingDate::T_QUARTER_CURRENT_START, '2022-10-01 000000', $format];
|
||||
|
||||
yield [RollingDate::T_QUARTER_NEXT_START, '2023-01-01 000000', $format];
|
||||
|
||||
yield [RollingDate::T_QUARTER_PREVIOUS_START, '2022-07-01 000000', $format];
|
||||
|
||||
yield [RollingDate::T_TODAY, '2022-11-07 000000', $format];
|
||||
|
||||
yield [RollingDate::T_WEEK_CURRENT_START, '2022-11-07 000000', $format];
|
||||
|
||||
yield [RollingDate::T_WEEK_NEXT_START, '2022-11-14 000000', $format];
|
||||
|
||||
yield [RollingDate::T_WEEK_PREVIOUS_START, '2022-10-31 000000', $format];
|
||||
|
||||
yield [RollingDate::T_YEAR_CURRENT_START, '2022-01-01 000000', $format];
|
||||
|
||||
yield [RollingDate::T_YEAR_NEXT_START, '2023-01-01 000000', $format];
|
||||
|
||||
yield [RollingDate::T_YEAR_PREVIOUS_START, '2021-01-01 000000', $format];
|
||||
}
|
||||
|
||||
public function testConversionFixedDate()
|
||||
{
|
||||
$rollingDate = new RollingDate(RollingDate::T_FIXED_DATE, new \DateTimeImmutable('2022-01-01'));
|
||||
@@ -97,4 +66,35 @@ final class RollingDateConverterTest extends TestCase
|
||||
$this->converter->convert($rollingDate)
|
||||
);
|
||||
}
|
||||
|
||||
public static function generateDataConversionDate(): iterable
|
||||
{
|
||||
$format = 'Y-m-d His';
|
||||
|
||||
yield [RollingDate::T_MONTH_CURRENT_START, '2022-11-01 000000', $format];
|
||||
|
||||
yield [RollingDate::T_MONTH_NEXT_START, '2022-12-01 000000', $format];
|
||||
|
||||
yield [RollingDate::T_MONTH_PREVIOUS_START, '2022-10-01 000000', $format];
|
||||
|
||||
yield [RollingDate::T_QUARTER_CURRENT_START, '2022-10-01 000000', $format];
|
||||
|
||||
yield [RollingDate::T_QUARTER_NEXT_START, '2023-01-01 000000', $format];
|
||||
|
||||
yield [RollingDate::T_QUARTER_PREVIOUS_START, '2022-07-01 000000', $format];
|
||||
|
||||
yield [RollingDate::T_TODAY, '2022-11-07 000000', $format];
|
||||
|
||||
yield [RollingDate::T_WEEK_CURRENT_START, '2022-11-07 000000', $format];
|
||||
|
||||
yield [RollingDate::T_WEEK_NEXT_START, '2022-11-14 000000', $format];
|
||||
|
||||
yield [RollingDate::T_WEEK_PREVIOUS_START, '2022-10-31 000000', $format];
|
||||
|
||||
yield [RollingDate::T_YEAR_CURRENT_START, '2022-01-01 000000', $format];
|
||||
|
||||
yield [RollingDate::T_YEAR_NEXT_START, '2023-01-01 000000', $format];
|
||||
|
||||
yield [RollingDate::T_YEAR_PREVIOUS_START, '2021-01-01 000000', $format];
|
||||
}
|
||||
}
|
||||
|
@@ -48,6 +48,32 @@ class CancelStaleWorkflowCronJobTest extends TestCase
|
||||
self::assertEquals($expected, $cronJob->canRun($cronJobExecution));
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \Exception
|
||||
*/
|
||||
public static function buildTestCanRunData(): iterable
|
||||
{
|
||||
yield [
|
||||
(new CronJobExecution('last-canceled-workflow-id'))->setLastEnd(new \DateTimeImmutable('2023-12-31 00:00:00', new \DateTimeZone('+00:00'))),
|
||||
true,
|
||||
];
|
||||
|
||||
yield [
|
||||
(new CronJobExecution('last-canceled-workflow-id'))->setLastEnd(new \DateTimeImmutable('2023-12-30 23:59:59', new \DateTimeZone('+00:00'))),
|
||||
true,
|
||||
];
|
||||
|
||||
yield [
|
||||
(new CronJobExecution('last-canceled-workflow-id'))->setLastEnd(new \DateTimeImmutable('2023-12-31 00:00:01', new \DateTimeZone('+00:00'))),
|
||||
false,
|
||||
];
|
||||
|
||||
yield [
|
||||
null,
|
||||
true,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \DateMalformedStringException
|
||||
* @throws \DateInvalidTimeZoneException
|
||||
@@ -85,32 +111,6 @@ class CancelStaleWorkflowCronJobTest extends TestCase
|
||||
return $entityWorkflow;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \Exception
|
||||
*/
|
||||
public static function buildTestCanRunData(): iterable
|
||||
{
|
||||
yield [
|
||||
(new CronJobExecution('last-canceled-workflow-id'))->setLastEnd(new \DateTimeImmutable('2023-12-31 00:00:00', new \DateTimeZone('+00:00'))),
|
||||
true,
|
||||
];
|
||||
|
||||
yield [
|
||||
(new CronJobExecution('last-canceled-workflow-id'))->setLastEnd(new \DateTimeImmutable('2023-12-30 23:59:59', new \DateTimeZone('+00:00'))),
|
||||
true,
|
||||
];
|
||||
|
||||
yield [
|
||||
(new CronJobExecution('last-canceled-workflow-id'))->setLastEnd(new \DateTimeImmutable('2023-12-31 00:00:01', new \DateTimeZone('+00:00'))),
|
||||
false,
|
||||
];
|
||||
|
||||
yield [
|
||||
null,
|
||||
true,
|
||||
];
|
||||
}
|
||||
|
||||
private function buildMessageBus(bool $expectDispatchAtLeastOnce = false): MessageBusInterface
|
||||
{
|
||||
$messageBus = $this->createMock(MessageBusInterface::class);
|
||||
|
@@ -30,84 +30,16 @@ final class AddressRenderTest extends KernelTestCase
|
||||
self::bootKernel();
|
||||
}
|
||||
|
||||
public static function addressDataProviderBEWithBuilding(): \Iterator
|
||||
/**
|
||||
* @dataProvider complexAddressDataProviderBE
|
||||
*/
|
||||
public function testRenderComplexAddressBE(Address $addr, string $expectedString): void
|
||||
{
|
||||
$addr = new Address();
|
||||
$country = (new Country())
|
||||
->setName(['fr' => 'Belgium'])
|
||||
->setCountryCode('BE');
|
||||
$postCode = new PostalCode();
|
||||
$postCode->setName('Locality')
|
||||
->setCode('012345')
|
||||
->setCountry($country);
|
||||
$engine = self::getContainer()->get(\Twig\Environment::class);
|
||||
$translatableStringHelper = self::getContainer()->get(TranslatableStringHelper::class);
|
||||
$renderer = new AddressRender($engine, $translatableStringHelper);
|
||||
|
||||
$addr->setStreet('Rue ABC')
|
||||
->setStreetNumber('5')
|
||||
->setPostcode($postCode);
|
||||
|
||||
$addr->setBuildingName('Résidence "Les Bleuets"');
|
||||
|
||||
yield [$addr, 'Résidence "Les Bleuets" — Rue ABC, 5 — 012345 Locality — Belgium'];
|
||||
}
|
||||
|
||||
public static function addressDataProviderBEWithSteps(): \Iterator
|
||||
{
|
||||
$addr = new Address();
|
||||
$country = (new Country())
|
||||
->setName(['fr' => 'Belgium'])
|
||||
->setCountryCode('BE');
|
||||
$postCode = new PostalCode();
|
||||
$postCode->setName('Locality')
|
||||
->setCode('012345')
|
||||
->setCountry($country);
|
||||
|
||||
$addr->setStreet('Rue ABC')
|
||||
->setStreetNumber('5')
|
||||
->setPostcode($postCode);
|
||||
|
||||
$addr->setSteps('4');
|
||||
|
||||
yield [$addr, 'esc 4 — Rue ABC, 5 — 012345 Locality — Belgium'];
|
||||
}
|
||||
|
||||
public static function addressDataProviderFRWithBuilding(): \Iterator
|
||||
{
|
||||
$addr = new Address();
|
||||
$country = (new Country())
|
||||
->setName(['fr' => 'France'])
|
||||
->setCountryCode('FR');
|
||||
$postCode = new PostalCode();
|
||||
$postCode->setName('Locality')
|
||||
->setCode('012345')
|
||||
->setCountry($country);
|
||||
|
||||
$addr->setStreet('Rue ABC')
|
||||
->setStreetNumber('5')
|
||||
->setPostcode($postCode);
|
||||
|
||||
$addr->setBuildingName('Résidence "Les Bleuets"');
|
||||
|
||||
yield [$addr, 'Résidence "Les Bleuets" — 5, Rue ABC — 012345 Locality — France'];
|
||||
}
|
||||
|
||||
public static function addressDataProviderFRWithSteps(): \Iterator
|
||||
{
|
||||
$addr = new Address();
|
||||
$country = (new Country())
|
||||
->setName(['fr' => 'France'])
|
||||
->setCountryCode('FR');
|
||||
$postCode = new PostalCode();
|
||||
$postCode->setName('Locality')
|
||||
->setCode('012345')
|
||||
->setCountry($country);
|
||||
|
||||
$addr->setStreet('Rue ABC')
|
||||
->setStreetNumber('5')
|
||||
->setPostcode($postCode);
|
||||
|
||||
$addr->setSteps('4');
|
||||
|
||||
yield [$addr, 'esc 4 — 5, Rue ABC — 012345 Locality — France'];
|
||||
$this->assertEquals($expectedString, $renderer->renderString($addr, []));
|
||||
}
|
||||
|
||||
public static function complexAddressDataProviderBE(): \Iterator
|
||||
@@ -134,6 +66,18 @@ final class AddressRenderTest extends KernelTestCase
|
||||
yield [$addr, 'Résidence "Les Bleuets" - appart 1 - ét 2 - coul 3 - esc 4 — Rue ABC, 5 — 012345 Locality — Belgium'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider complexAddressDataProviderFR
|
||||
*/
|
||||
public function testRenderComplexAddressFR(Address $addr, string $expectedString): void
|
||||
{
|
||||
$engine = self::getContainer()->get(\Twig\Environment::class);
|
||||
$translatableStringHelper = self::getContainer()->get(TranslatableStringHelper::class);
|
||||
$renderer = new AddressRender($engine, $translatableStringHelper);
|
||||
|
||||
$this->assertEquals($expectedString, $renderer->renderString($addr, []));
|
||||
}
|
||||
|
||||
public static function complexAddressDataProviderFR(): \Iterator
|
||||
{
|
||||
$addr = new Address();
|
||||
@@ -160,6 +104,18 @@ final class AddressRenderTest extends KernelTestCase
|
||||
yield [$addr, 'appart 1 - ét 2 - coul 3 - esc 4 — Résidence "Les Bleuets" — 5, Rue ABC — A droite de la porte — 012345 Locality CEDEX — France'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider noFullAddressDataProviderBE
|
||||
*/
|
||||
public function testRenderNoFullAddressBE(Address $addr, string $expectedString): void
|
||||
{
|
||||
$engine = self::getContainer()->get(\Twig\Environment::class);
|
||||
$translatableStringHelper = self::getContainer()->get(TranslatableStringHelper::class);
|
||||
$renderer = new AddressRender($engine, $translatableStringHelper);
|
||||
|
||||
$this->assertEquals($expectedString, $renderer->renderString($addr, []));
|
||||
}
|
||||
|
||||
public static function noFullAddressDataProviderBE(): \Iterator
|
||||
{
|
||||
$addr = new Address();
|
||||
@@ -177,6 +133,18 @@ final class AddressRenderTest extends KernelTestCase
|
||||
yield [$addr, '012345 Locality — Belgium'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider simpleAddressDataProviderBE
|
||||
*/
|
||||
public function testRenderStringSimpleAddressBE(Address $addr, string $expectedString): void
|
||||
{
|
||||
$engine = self::getContainer()->get(\Twig\Environment::class);
|
||||
$translatableStringHelper = self::getContainer()->get(TranslatableStringHelper::class);
|
||||
$renderer = new AddressRender($engine, $translatableStringHelper);
|
||||
|
||||
$this->assertEquals($expectedString, $renderer->renderString($addr, []));
|
||||
}
|
||||
|
||||
public static function simpleAddressDataProviderBE(): \Iterator
|
||||
{
|
||||
$addr = new Address();
|
||||
@@ -195,6 +163,18 @@ final class AddressRenderTest extends KernelTestCase
|
||||
yield [$addr, 'Rue ABC, 5 — 012345 Locality — Belgium'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider simpleAddressDataProviderFR
|
||||
*/
|
||||
public function testRenderStringSimpleAddressFR(Address $addr, string $expectedString): void
|
||||
{
|
||||
$engine = self::getContainer()->get(\Twig\Environment::class);
|
||||
$translatableStringHelper = self::getContainer()->get(TranslatableStringHelper::class);
|
||||
$renderer = new AddressRender($engine, $translatableStringHelper);
|
||||
|
||||
$this->assertEquals($expectedString, $renderer->renderString($addr, []));
|
||||
}
|
||||
|
||||
public static function simpleAddressDataProviderFR(): \Iterator
|
||||
{
|
||||
$addr = new Address();
|
||||
@@ -213,66 +193,6 @@ final class AddressRenderTest extends KernelTestCase
|
||||
yield [$addr, '5, Rue ABC — 012345 Locality — France'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider complexAddressDataProviderBE
|
||||
*/
|
||||
public function testRenderComplexAddressBE(Address $addr, string $expectedString): void
|
||||
{
|
||||
$engine = self::getContainer()->get(\Twig\Environment::class);
|
||||
$translatableStringHelper = self::getContainer()->get(TranslatableStringHelper::class);
|
||||
$renderer = new AddressRender($engine, $translatableStringHelper);
|
||||
|
||||
$this->assertEquals($expectedString, $renderer->renderString($addr, []));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider complexAddressDataProviderFR
|
||||
*/
|
||||
public function testRenderComplexAddressFR(Address $addr, string $expectedString): void
|
||||
{
|
||||
$engine = self::getContainer()->get(\Twig\Environment::class);
|
||||
$translatableStringHelper = self::getContainer()->get(TranslatableStringHelper::class);
|
||||
$renderer = new AddressRender($engine, $translatableStringHelper);
|
||||
|
||||
$this->assertEquals($expectedString, $renderer->renderString($addr, []));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider noFullAddressDataProviderBE
|
||||
*/
|
||||
public function testRenderNoFullAddressBE(Address $addr, string $expectedString): void
|
||||
{
|
||||
$engine = self::getContainer()->get(\Twig\Environment::class);
|
||||
$translatableStringHelper = self::getContainer()->get(TranslatableStringHelper::class);
|
||||
$renderer = new AddressRender($engine, $translatableStringHelper);
|
||||
|
||||
$this->assertEquals($expectedString, $renderer->renderString($addr, []));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider simpleAddressDataProviderBE
|
||||
*/
|
||||
public function testRenderStringSimpleAddressBE(Address $addr, string $expectedString): void
|
||||
{
|
||||
$engine = self::getContainer()->get(\Twig\Environment::class);
|
||||
$translatableStringHelper = self::getContainer()->get(TranslatableStringHelper::class);
|
||||
$renderer = new AddressRender($engine, $translatableStringHelper);
|
||||
|
||||
$this->assertEquals($expectedString, $renderer->renderString($addr, []));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider simpleAddressDataProviderFR
|
||||
*/
|
||||
public function testRenderStringSimpleAddressFR(Address $addr, string $expectedString): void
|
||||
{
|
||||
$engine = self::getContainer()->get(\Twig\Environment::class);
|
||||
$translatableStringHelper = self::getContainer()->get(TranslatableStringHelper::class);
|
||||
$renderer = new AddressRender($engine, $translatableStringHelper);
|
||||
|
||||
$this->assertEquals($expectedString, $renderer->renderString($addr, []));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider addressDataProviderBEWithBuilding
|
||||
*/
|
||||
@@ -285,6 +205,26 @@ final class AddressRenderTest extends KernelTestCase
|
||||
$this->assertEquals($expectedString, $renderer->renderString($addr, []));
|
||||
}
|
||||
|
||||
public static function addressDataProviderBEWithBuilding(): \Iterator
|
||||
{
|
||||
$addr = new Address();
|
||||
$country = (new Country())
|
||||
->setName(['fr' => 'Belgium'])
|
||||
->setCountryCode('BE');
|
||||
$postCode = new PostalCode();
|
||||
$postCode->setName('Locality')
|
||||
->setCode('012345')
|
||||
->setCountry($country);
|
||||
|
||||
$addr->setStreet('Rue ABC')
|
||||
->setStreetNumber('5')
|
||||
->setPostcode($postCode);
|
||||
|
||||
$addr->setBuildingName('Résidence "Les Bleuets"');
|
||||
|
||||
yield [$addr, 'Résidence "Les Bleuets" — Rue ABC, 5 — 012345 Locality — Belgium'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider addressDataProviderFRWithBuilding
|
||||
*/
|
||||
@@ -297,6 +237,26 @@ final class AddressRenderTest extends KernelTestCase
|
||||
$this->assertEquals($expectedString, $renderer->renderString($addr, []));
|
||||
}
|
||||
|
||||
public static function addressDataProviderFRWithBuilding(): \Iterator
|
||||
{
|
||||
$addr = new Address();
|
||||
$country = (new Country())
|
||||
->setName(['fr' => 'France'])
|
||||
->setCountryCode('FR');
|
||||
$postCode = new PostalCode();
|
||||
$postCode->setName('Locality')
|
||||
->setCode('012345')
|
||||
->setCountry($country);
|
||||
|
||||
$addr->setStreet('Rue ABC')
|
||||
->setStreetNumber('5')
|
||||
->setPostcode($postCode);
|
||||
|
||||
$addr->setBuildingName('Résidence "Les Bleuets"');
|
||||
|
||||
yield [$addr, 'Résidence "Les Bleuets" — 5, Rue ABC — 012345 Locality — France'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider addressDataProviderBEWithSteps
|
||||
*/
|
||||
@@ -309,6 +269,26 @@ final class AddressRenderTest extends KernelTestCase
|
||||
$this->assertEquals($expectedString, $renderer->renderString($addr, []));
|
||||
}
|
||||
|
||||
public static function addressDataProviderBEWithSteps(): \Iterator
|
||||
{
|
||||
$addr = new Address();
|
||||
$country = (new Country())
|
||||
->setName(['fr' => 'Belgium'])
|
||||
->setCountryCode('BE');
|
||||
$postCode = new PostalCode();
|
||||
$postCode->setName('Locality')
|
||||
->setCode('012345')
|
||||
->setCountry($country);
|
||||
|
||||
$addr->setStreet('Rue ABC')
|
||||
->setStreetNumber('5')
|
||||
->setPostcode($postCode);
|
||||
|
||||
$addr->setSteps('4');
|
||||
|
||||
yield [$addr, 'esc 4 — Rue ABC, 5 — 012345 Locality — Belgium'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider addressDataProviderFRWithSteps
|
||||
*/
|
||||
@@ -320,4 +300,24 @@ final class AddressRenderTest extends KernelTestCase
|
||||
|
||||
$this->assertEquals($expectedString, $renderer->renderString($addr, []));
|
||||
}
|
||||
|
||||
public static function addressDataProviderFRWithSteps(): \Iterator
|
||||
{
|
||||
$addr = new Address();
|
||||
$country = (new Country())
|
||||
->setName(['fr' => 'France'])
|
||||
->setCountryCode('FR');
|
||||
$postCode = new PostalCode();
|
||||
$postCode->setName('Locality')
|
||||
->setCode('012345')
|
||||
->setCountry($country);
|
||||
|
||||
$addr->setStreet('Rue ABC')
|
||||
->setStreetNumber('5')
|
||||
->setPostcode($postCode);
|
||||
|
||||
$addr->setSteps('4');
|
||||
|
||||
yield [$addr, 'esc 4 — 5, Rue ABC — 012345 Locality — France'];
|
||||
}
|
||||
}
|
||||
|
@@ -116,6 +116,20 @@ class EntityWorkflowGuardTransitionTest extends TestCase
|
||||
}
|
||||
}
|
||||
|
||||
public static function provideBlockingTransition(): iterable
|
||||
{
|
||||
yield [self::buildEntityWorkflow([new User()]), 'transition1', new User(), false, 'f3eeb57c-7532-11ec-9495-e7942a2ac7bc'];
|
||||
yield [self::buildEntityWorkflow([]), 'transition1', null, false, 'd9e39a18-704c-11ef-b235-8fe0619caee7'];
|
||||
yield [self::buildEntityWorkflow([new User()]), 'transition1', null, false, 'd9e39a18-704c-11ef-b235-8fe0619caee7'];
|
||||
yield [self::buildEntityWorkflow([$user = new User()]), 'transition3', $user, false, '5b6b95e0-704d-11ef-a5a9-4b6fc11a8eeb'];
|
||||
yield [self::buildEntityWorkflow([$user = new User()]), 'transition3', $user, true, '5b6b95e0-704d-11ef-a5a9-4b6fc11a8eeb'];
|
||||
|
||||
$userGroup = new UserGroup();
|
||||
$userGroup->addUser(new User());
|
||||
|
||||
yield [self::buildEntityWorkflow([$userGroup]), 'transition1', new User(), false, 'f3eeb57c-7532-11ec-9495-e7942a2ac7bc'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideValidTransition
|
||||
*/
|
||||
@@ -139,20 +153,6 @@ class EntityWorkflowGuardTransitionTest extends TestCase
|
||||
self::assertEquals($newStep, $entityWorkflow->getStep());
|
||||
}
|
||||
|
||||
public static function provideBlockingTransition(): iterable
|
||||
{
|
||||
yield [self::buildEntityWorkflow([new User()]), 'transition1', new User(), false, 'f3eeb57c-7532-11ec-9495-e7942a2ac7bc'];
|
||||
yield [self::buildEntityWorkflow([]), 'transition1', null, false, 'd9e39a18-704c-11ef-b235-8fe0619caee7'];
|
||||
yield [self::buildEntityWorkflow([new User()]), 'transition1', null, false, 'd9e39a18-704c-11ef-b235-8fe0619caee7'];
|
||||
yield [self::buildEntityWorkflow([$user = new User()]), 'transition3', $user, false, '5b6b95e0-704d-11ef-a5a9-4b6fc11a8eeb'];
|
||||
yield [self::buildEntityWorkflow([$user = new User()]), 'transition3', $user, true, '5b6b95e0-704d-11ef-a5a9-4b6fc11a8eeb'];
|
||||
|
||||
$userGroup = new UserGroup();
|
||||
$userGroup->addUser(new User());
|
||||
|
||||
yield [self::buildEntityWorkflow([$userGroup]), 'transition1', new User(), false, 'f3eeb57c-7532-11ec-9495-e7942a2ac7bc'];
|
||||
}
|
||||
|
||||
public static function provideValidTransition(): iterable
|
||||
{
|
||||
yield [self::buildEntityWorkflow([$u = new User()]), 'transition1', $u, false, 'step1'];
|
||||
|
@@ -75,45 +75,6 @@ class EntityWorkflowGuardUnsignedTransitionTest extends TestCase
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider guardWaitingForSignatureWithPermissionToApplyAllTransitionsProvider
|
||||
*/
|
||||
public function testGuardWaitingForSignatureWithPermissionToApplyAllTransitions(EntityWorkflow $entityWorkflow, string $transition, bool $expectIsGranted, string $message)
|
||||
{
|
||||
$chillEntityRender = $this->prophesize(ChillEntityRenderManagerInterface::class);
|
||||
$chillEntityRender->renderString(Argument::type('object'), Argument::type('array'))->will(fn ($args) => spl_object_hash($args[0]));
|
||||
|
||||
$security = $this->prophesize(Security::class);
|
||||
$isGranted = $security->isGranted(EntityWorkflowTransitionVoter::APPLY_ALL_TRANSITIONS, Argument::type(EntityWorkflow::class));
|
||||
if ($expectIsGranted) {
|
||||
$isGranted->shouldBeCalled();
|
||||
}
|
||||
$isGranted->willReturn(true);
|
||||
|
||||
$registry = self::buildRegistry($chillEntityRender->reveal(), $security->reveal());
|
||||
|
||||
$workflow = $registry->get($entityWorkflow, 'dummy');
|
||||
|
||||
$actual = $workflow->buildTransitionBlockerList($entityWorkflow, $transition);
|
||||
|
||||
self::assertCount(0, $actual, $message);
|
||||
}
|
||||
|
||||
public static function guardWaitingForSignatureWithPermissionToApplyAllTransitionsProvider(): iterable
|
||||
{
|
||||
$registry = self::buildRegistry();
|
||||
$entityWorkflow = new EntityWorkflow();
|
||||
$dto = new WorkflowTransitionContextDTO($entityWorkflow);
|
||||
$dto->futureDestUsers = [$user = new User()];
|
||||
$dto->futureUserSignature = $user;
|
||||
|
||||
$workflow = $registry->get($entityWorkflow, 'dummy');
|
||||
$workflow->apply($entityWorkflow, 'to_signature', ['context' => $dto, 'transitionAt' => new \DateTimeImmutable(), 'byUser' => new User(), 'transition' => 'to_signature']);
|
||||
|
||||
yield [$entityWorkflow, 'to_post-signature', true, 'A transition forward is allowed, even if a signature is pending, because the user has permission to apply all transition'];
|
||||
yield [$entityWorkflow, 'to_cancel', false, 'A transition backward is allowed, even if a signature is pending'];
|
||||
}
|
||||
|
||||
public static function guardWaitingForSignatureWithoutPermissionToApplyAllTransitionsProvider(): iterable
|
||||
{
|
||||
$registry = self::buildRegistry();
|
||||
@@ -156,6 +117,45 @@ class EntityWorkflowGuardUnsignedTransitionTest extends TestCase
|
||||
yield [$entityWorkflow, 'to_cancel', [], [], 'A transition backward is allowed, even if a signature is pending'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider guardWaitingForSignatureWithPermissionToApplyAllTransitionsProvider
|
||||
*/
|
||||
public function testGuardWaitingForSignatureWithPermissionToApplyAllTransitions(EntityWorkflow $entityWorkflow, string $transition, bool $expectIsGranted, string $message)
|
||||
{
|
||||
$chillEntityRender = $this->prophesize(ChillEntityRenderManagerInterface::class);
|
||||
$chillEntityRender->renderString(Argument::type('object'), Argument::type('array'))->will(fn ($args) => spl_object_hash($args[0]));
|
||||
|
||||
$security = $this->prophesize(Security::class);
|
||||
$isGranted = $security->isGranted(EntityWorkflowTransitionVoter::APPLY_ALL_TRANSITIONS, Argument::type(EntityWorkflow::class));
|
||||
if ($expectIsGranted) {
|
||||
$isGranted->shouldBeCalled();
|
||||
}
|
||||
$isGranted->willReturn(true);
|
||||
|
||||
$registry = self::buildRegistry($chillEntityRender->reveal(), $security->reveal());
|
||||
|
||||
$workflow = $registry->get($entityWorkflow, 'dummy');
|
||||
|
||||
$actual = $workflow->buildTransitionBlockerList($entityWorkflow, $transition);
|
||||
|
||||
self::assertCount(0, $actual, $message);
|
||||
}
|
||||
|
||||
public static function guardWaitingForSignatureWithPermissionToApplyAllTransitionsProvider(): iterable
|
||||
{
|
||||
$registry = self::buildRegistry();
|
||||
$entityWorkflow = new EntityWorkflow();
|
||||
$dto = new WorkflowTransitionContextDTO($entityWorkflow);
|
||||
$dto->futureDestUsers = [$user = new User()];
|
||||
$dto->futureUserSignature = $user;
|
||||
|
||||
$workflow = $registry->get($entityWorkflow, 'dummy');
|
||||
$workflow->apply($entityWorkflow, 'to_signature', ['context' => $dto, 'transitionAt' => new \DateTimeImmutable(), 'byUser' => new User(), 'transition' => 'to_signature']);
|
||||
|
||||
yield [$entityWorkflow, 'to_post-signature', true, 'A transition forward is allowed, even if a signature is pending, because the user has permission to apply all transition'];
|
||||
yield [$entityWorkflow, 'to_cancel', false, 'A transition backward is allowed, even if a signature is pending'];
|
||||
}
|
||||
|
||||
private static function buildRegistry(?ChillEntityRenderManagerInterface $chillEntityRender = null, ?Security $security = null): Registry
|
||||
{
|
||||
$builder = new DefinitionBuilder();
|
||||
|
@@ -61,49 +61,6 @@ class WorkflowRelatedEntityPermissionHelperTest extends TestCase
|
||||
self::assertEquals($expected, $helper->isAllowedByWorkflowForReadOperation(new \stdClass()), $message);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideDataAllowedByWorkflowWriteOperation
|
||||
*
|
||||
* @param list<EntityWorkflow> $entityWorkflows
|
||||
*/
|
||||
public function testAllowedByWorkflowWrite(
|
||||
array $entityWorkflows,
|
||||
User $user,
|
||||
string $expected,
|
||||
?\DateTimeImmutable $atDate,
|
||||
string $message,
|
||||
): void {
|
||||
// all entities must have this workflow name, so we are ok to set it here
|
||||
foreach ($entityWorkflows as $entityWorkflow) {
|
||||
$entityWorkflow->setWorkflowName('dummy');
|
||||
}
|
||||
$helper = $this->buildHelper($entityWorkflows, $user, $atDate);
|
||||
|
||||
self::assertEquals($expected, $helper->isAllowedByWorkflowForWriteOperation(new \stdClass()), $message);
|
||||
}
|
||||
|
||||
public function testNoWorkflow(): void
|
||||
{
|
||||
$helper = $this->buildHelper([], new User(), null);
|
||||
|
||||
self::assertEquals(WorkflowRelatedEntityPermissionHelper::ABSTAIN, $helper->isAllowedByWorkflowForWriteOperation(new \stdClass()));
|
||||
self::assertEquals(WorkflowRelatedEntityPermissionHelper::ABSTAIN, $helper->isAllowedByWorkflowForReadOperation(new \stdClass()));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param list<EntityWorkflow> $entityWorkflows
|
||||
*/
|
||||
private function buildHelper(array $entityWorkflows, User $user, ?\DateTimeImmutable $atDateTime): WorkflowRelatedEntityPermissionHelper
|
||||
{
|
||||
$security = $this->prophesize(Security::class);
|
||||
$security->getUser()->willReturn($user);
|
||||
|
||||
$entityWorkflowManager = $this->prophesize(EntityWorkflowManager::class);
|
||||
$entityWorkflowManager->findByRelatedEntity(Argument::type('object'))->willReturn($entityWorkflows);
|
||||
|
||||
return new WorkflowRelatedEntityPermissionHelper($security->reveal(), $entityWorkflowManager->reveal(), $this->buildRegistry(), new MockClock($atDateTime ?? new \DateTimeImmutable()));
|
||||
}
|
||||
|
||||
public static function provideDataAllowedByWorkflowReadOperation(): iterable
|
||||
{
|
||||
$entityWorkflow = new EntityWorkflow();
|
||||
@@ -164,6 +121,27 @@ class WorkflowRelatedEntityPermissionHelperTest extends TestCase
|
||||
'force grant because there is a signature for person, already signed, a short time ago'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideDataAllowedByWorkflowWriteOperation
|
||||
*
|
||||
* @param list<EntityWorkflow> $entityWorkflows
|
||||
*/
|
||||
public function testAllowedByWorkflowWrite(
|
||||
array $entityWorkflows,
|
||||
User $user,
|
||||
string $expected,
|
||||
?\DateTimeImmutable $atDate,
|
||||
string $message,
|
||||
): void {
|
||||
// all entities must have this workflow name, so we are ok to set it here
|
||||
foreach ($entityWorkflows as $entityWorkflow) {
|
||||
$entityWorkflow->setWorkflowName('dummy');
|
||||
}
|
||||
$helper = $this->buildHelper($entityWorkflows, $user, $atDate);
|
||||
|
||||
self::assertEquals($expected, $helper->isAllowedByWorkflowForWriteOperation(new \stdClass()), $message);
|
||||
}
|
||||
|
||||
public static function provideDataAllowedByWorkflowWriteOperation(): iterable
|
||||
{
|
||||
$entityWorkflow = new EntityWorkflow();
|
||||
@@ -256,6 +234,28 @@ class WorkflowRelatedEntityPermissionHelperTest extends TestCase
|
||||
'abstain: there is a signature on a canceled workflow'];
|
||||
}
|
||||
|
||||
public function testNoWorkflow(): void
|
||||
{
|
||||
$helper = $this->buildHelper([], new User(), null);
|
||||
|
||||
self::assertEquals(WorkflowRelatedEntityPermissionHelper::ABSTAIN, $helper->isAllowedByWorkflowForWriteOperation(new \stdClass()));
|
||||
self::assertEquals(WorkflowRelatedEntityPermissionHelper::ABSTAIN, $helper->isAllowedByWorkflowForReadOperation(new \stdClass()));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param list<EntityWorkflow> $entityWorkflows
|
||||
*/
|
||||
private function buildHelper(array $entityWorkflows, User $user, ?\DateTimeImmutable $atDateTime): WorkflowRelatedEntityPermissionHelper
|
||||
{
|
||||
$security = $this->prophesize(Security::class);
|
||||
$security->getUser()->willReturn($user);
|
||||
|
||||
$entityWorkflowManager = $this->prophesize(EntityWorkflowManager::class);
|
||||
$entityWorkflowManager->findByRelatedEntity(Argument::type('object'))->willReturn($entityWorkflows);
|
||||
|
||||
return new WorkflowRelatedEntityPermissionHelper($security->reveal(), $entityWorkflowManager->reveal(), $this->buildRegistry(), new MockClock($atDateTime ?? new \DateTimeImmutable()));
|
||||
}
|
||||
|
||||
private static function buildRegistry(): Registry
|
||||
{
|
||||
$builder = new DefinitionBuilder();
|
||||
|
Reference in New Issue
Block a user