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/MemberPortalUserServiceTest.php

<?php

namespace App\Tests\Unit\UserBundle;

use App\MemberBundle\Entity\MemberContact;
use App\MemberBundle\Entity\MemberFirm;
use App\MemberBundle\Entity\MemberOffice;
use App\MemberBundle\Repository\MemberContactRepository;
use App\UserBundle\Entity\UserLogin;
use App\UserBundle\Service\MemberPortalUserService;
use PHPUnit\Framework\TestCase;

class MemberPortalUserServiceTest extends TestCase
{
    public function testResolveRolesWithoutMemberFirm(): void
    {
        $repository = $this->createMock(MemberContactRepository::class);
        $repository->method('findByContactIdWithMemberFirm')->willReturn(null);

        $service = new MemberPortalUserService($repository);
        $user = (new UserLogin())->setUsername('member')->setContactId(1);
        $context = $service->buildLoginContext($user);

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

    public function testResolveRolesWithMemberFirm(): void
    {
        $firm = $this->createMock(MemberFirm::class);
        $firm->method('getId')->willReturn(42);

        $office = $this->createMock(MemberOffice::class);
        $office->method('getMemberFirm')->willReturn($firm);

        $contact = $this->createMock(MemberContact::class);
        $contact->method('getMemberOffice')->willReturn($office);

        $repository = $this->createMock(MemberContactRepository::class);
        $repository->method('findByContactIdWithMemberFirm')->willReturn($contact);

        $service = new MemberPortalUserService($repository);
        $user = (new UserLogin())->setUsername('member')->setContactId(99);
        $context = $service->buildLoginContext($user);
        $service->applyLoginContext($user, $context);

        $this->assertTrue($context->hasMemberFirm());
        $this->assertSame(42, $context->getMemberFirmId());
        $this->assertContains('ROLE_MEMBER_FIRM', $user->getRoles());
        $this->assertTrue($user->hasMemberFirm());
        $this->assertSame(42, $user->getMemberFirmId());
    }
}