feat: align role assignment logic with myep-team
This commit is contained in:
@@ -1,89 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\Form\Admin;
|
||||
|
||||
use App\Entity\User;
|
||||
use App\Form\Admin\UserType;
|
||||
use App\Security\Role;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\Form\Forms;
|
||||
|
||||
class UserTypeTest extends TestCase
|
||||
{
|
||||
public function testOnlyThePrivilegedRolesArePreselected(): void
|
||||
{
|
||||
$user = (new User('[email protected]'))->setRoles([Role::TEAMER, Role::GROUPS_MANAGER]);
|
||||
|
||||
self::assertSame([Role::GROUPS_MANAGER], $this->createForm($user)->get('roles')->getData());
|
||||
}
|
||||
|
||||
public function testOnlyPrivilegedRolesAreOffered(): void
|
||||
{
|
||||
$choices = $this->createForm(new User('[email protected]'))->get('roles')->getConfig()->getOption('choices');
|
||||
|
||||
// The rest is synced from BusPro on every login and would be overwritten right away.
|
||||
self::assertSame(Role::PRIVILEGED, array_values($choices));
|
||||
}
|
||||
|
||||
public function testSubmittingRolesKeepsTheSyncedOnesAndNotTheImplicitRoleUser(): void
|
||||
{
|
||||
$user = (new User('[email protected]'))->setRoles([Role::TEAMER]);
|
||||
|
||||
$form = $this->createForm($user);
|
||||
$form->submit(['roles' => [Role::GROUPS_MANAGER], 'hotelCodes' => []]);
|
||||
|
||||
self::assertTrue($form->isSynchronized());
|
||||
// getRoles() prepends ROLE_USER; it must not have been persisted a second time.
|
||||
self::assertSame(['ROLE_USER', Role::TEAMER, Role::GROUPS_MANAGER], $user->getRoles());
|
||||
}
|
||||
|
||||
public function testClearingEveryCheckboxKeepsTheSyncedRoles(): void
|
||||
{
|
||||
$user = (new User('[email protected]'))
|
||||
->setRoles([Role::TEAMER, Role::GROUPS_MANAGER])
|
||||
->setHotelCodes(['SSL'])
|
||||
;
|
||||
|
||||
$form = $this->createForm($user);
|
||||
$form->submit([]);
|
||||
|
||||
self::assertTrue($form->isSynchronized());
|
||||
self::assertSame(['ROLE_USER', Role::TEAMER], $user->getRoles());
|
||||
self::assertSame([], $user->getHotelCodes());
|
||||
}
|
||||
|
||||
public function testHotelCodeMissingFromTheCatalogSurvivesAnEdit(): void
|
||||
{
|
||||
$user = (new User('[email protected]'))->setHotelCodes(['SSL', 'XYZ']);
|
||||
|
||||
$form = $this->createForm($user);
|
||||
$form->submit(['roles' => [], 'hotelCodes' => ['SSL', 'XYZ']]);
|
||||
|
||||
self::assertTrue($form->isSynchronized());
|
||||
self::assertSame(['SSL', 'XYZ'], $user->getHotelCodes());
|
||||
}
|
||||
|
||||
public function testHotelCodesAreOfferedAlphabetically(): void
|
||||
{
|
||||
$user = (new User('[email protected]'))->setHotelCodes(['ASB']);
|
||||
|
||||
$choices = $this->createForm($user)->get('hotelCodes')->getConfig()->getOption('choices');
|
||||
|
||||
self::assertSame(['ASB', 'DKS', 'SSL'], array_values($choices));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return FormInterface<User>
|
||||
*/
|
||||
private function createForm(User $user): FormInterface
|
||||
{
|
||||
return Forms::createFormFactoryBuilder()
|
||||
->addType(new UserType(['SSL' => 'SSL', 'DKS' => 'DKS']))
|
||||
->getFormFactory()
|
||||
->create(UserType::class, $user)
|
||||
;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user