Your IP : 216.73.217.79


Current Path : /var/www/v3.cesa.co.za/tests/Unit/UserBundle/
Upload File :
Current File : /var/www/v3.cesa.co.za/tests/Unit/UserBundle/Echasl23UserServiceTest.php

<?php

namespace App\Tests\Unit\UserBundle;

use App\UserBundle\Entity\UserOld;
use App\UserBundle\Entity\UserLevel;
use App\UserBundle\Service\Echasl23UserService;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use PHPUnit\Framework\TestCase;

class Echasl23UserServiceTest extends TestCase
{
    public function testHashPlainPasswordUsesMd5(): void
    {
        $service = new Echasl23UserService($this->createStub(EntityManagerInterface::class));

        $this->assertSame('5f4dcc3b5aa765d61d8327deb882cf99', $service->hashPlainPassword('password'));
    }

    public function testApplyPlainPasswordUpdatesHashAndDate(): void
    {
        $service = new Echasl23UserService($this->createStub(EntityManagerInterface::class));
        $user = (new UserOld())->setUsername('staff');

        $service->applyPlainPassword($user, 'secret');

        $this->assertSame('5ebe2294ecd0e0f08eab7690d2a6ee69', $user->getPassword());
        $this->assertInstanceOf(\DateTimeInterface::class, $user->getPwdchanged());
    }

    public function testResolveRolesForInactiveUser(): void
    {
        $service = new Echasl23UserService($this->createStub(EntityManagerInterface::class));
        $user = (new UserOld())
            ->setUsername('inactive')
            ->setActivated(false)
            ->setAccessLevel(3);

        $this->assertSame(['NONE'], $service->resolveRoles($user));
    }

    public function testResolveRolesForSuperAdminLevel(): void
    {
        $service = new Echasl23UserService($this->createStub(EntityManagerInterface::class));
        $user = (new UserOld())
            ->setUsername('suadmin')
            ->setActivated(true)
            ->setAccessLevel(-1);

        $roles = $service->resolveRoles($user);

        $this->assertContains('ROLE_SUPER_ADMIN', $roles);
        $this->assertContains('ROLE_ADMIN', $roles);
        $this->assertContains('ROLE_SONATA_ADMIN', $roles);
    }

    public function testResolveRolesMergesUserLevelRoles(): void
    {
        $userLevel = $this->createMock(UserLevel::class);
        $userLevel->method('getRoles')->willReturn('reports_only,custom');

        $repository = $this->createMock(EntityRepository::class);
        $repository->method('findOneBy')->with(['user_level_id' => 3])->willReturn($userLevel);

        $em = $this->createMock(EntityManagerInterface::class);
        $em->method('getRepository')->with(UserLevel::class)->willReturn($repository);

        $service = new Echasl23UserService($em);
        $user = (new UserOld())
            ->setUsername('editor')
            ->setActivated(true)
            ->setAccessLevel(3);

        $roles = $service->resolveRoles($user);

        $this->assertContains('ROLE_REPORTS_ONLY', $roles);
        $this->assertContains('ROLE_CUSTOM', $roles);
        $this->assertContains('ROLE_ADMIN', $roles);
    }
}