File size: 3,929 Bytes
d2897cd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php

declare(strict_types=1);

namespace Mautic\LeadBundle\Tests\Helper;

use Mautic\CoreBundle\Helper\CoreParametersHelper;
use Mautic\CoreBundle\Helper\PathsHelper;
use Mautic\CoreBundle\Twig\Helper\AssetsHelper;
use Mautic\CoreBundle\Twig\Helper\GravatarHelper;
use Mautic\LeadBundle\Entity\Lead;
use Mautic\LeadBundle\Twig\Helper\AvatarHelper;
use Mautic\LeadBundle\Twig\Helper\DefaultAvatarHelper;
use PHPUnit\Framework\MockObject\MockObject;
use Symfony\Component\Asset\Packages;
use Symfony\Component\HttpFoundation\RequestStack;

class AvatarHelperTest extends \PHPUnit\Framework\TestCase
{
    private AssetsHelper $assetsHelperMock;

    /**
     * @var MockObject&PathsHelper
     */
    private MockObject $pathsHelperMock;

    private GravatarHelper $gravatarHelperMock;

    private DefaultAvatarHelper $defaultAvatarHelperMock;

    /**
     * @var MockObject&Lead
     */
    private MockObject $leadMock;

    private AvatarHelper $avatarHelper;

    protected function setUp(): void
    {
        $root = realpath(__DIR__.'/../../../../../');

        /** @var Packages&MockObject $packagesMock */
        $packagesMock = $this->createMock(Packages::class);

        /** @var CoreParametersHelper&MockObject $coreParametersHelper */
        $coreParametersHelper = $this->createMock(CoreParametersHelper::class);

        $this->assetsHelperMock = new AssetsHelper($packagesMock, $coreParametersHelper);
        $this->pathsHelperMock  = $this->createMock(PathsHelper::class);
        $this->pathsHelperMock->method('getSystemPath')
        ->willReturn('http://localhost');
        $this->pathsHelperMock->method('getAssetsPath')
          ->willReturn($root.'/app/assets');
        $this->pathsHelperMock->method('getMediaPath')
          ->willReturn($root.'/media');

        $this->assetsHelperMock->setPathsHelper($this->pathsHelperMock);
        $this->defaultAvatarHelperMock = new DefaultAvatarHelper($this->assetsHelperMock);
        $this->gravatarHelperMock      = new GravatarHelper($this->defaultAvatarHelperMock, $coreParametersHelper, $this->createMock(RequestStack::class));
        $this->leadMock                = $this->createMock(Lead::class);
        $this->avatarHelper            = new AvatarHelper($this->assetsHelperMock, $this->pathsHelperMock, $this->gravatarHelperMock, $this->defaultAvatarHelperMock);
    }

    /**
     * Test to get gravatar.
     */
    public function testGetAvatarWhenGravatar(): void
    {
        $_SERVER['SERVER_PROTOCOL'] = 'HTTP/1.1';
        $_SERVER['SERVER_PORT']     = '80';
        $_SERVER['SERVER_NAME']     = 'localhost';
        $_SERVER['REQUEST_URI']     = 'localhost';

        $this->leadMock->method('getPreferredProfileImage')
            ->willReturn('gravatar');
        $this->leadMock->method('getSocialCache')
            ->willReturn([]);
        $this->leadMock->method('getEmail')
            ->willReturn('[email protected]');
        $avatar = $this->avatarHelper->getAvatar($this->leadMock);
        $this->assertSame('https://www.gravatar.com/avatar/96f1b78c73c1ee806cf6a4168fe9bf77?s=250&d=http%3A%2F%2Flocalhost%2Fimages%2Favatar.svg', $avatar, 'Gravatar image should be returned');

        $_SERVER['SERVER_PROTOCOL'] = null;
        $_SERVER['SERVER_PORT']     = null;
        $_SERVER['SERVER_NAME']     = null;
        $_SERVER['REQUEST_URI']     = null;
    }

    /**
     * Test to get default image.
     */
    public function testGetAvatarWhenDefault(): void
    {
        $this->leadMock->method('getPreferredProfileImage')
            ->willReturn('gravatar');
        $this->leadMock->method('getSocialCache')
            ->willReturn([]);
        $this->leadMock->method('getEmail')
            ->willReturn('');
        $avatar = $this->avatarHelper->getAvatar($this->leadMock);

        $this->assertSame('http://localhost/images/avatar.svg', $avatar, 'Default image image should be returned');
    }
}