File size: 3,027 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
106
107
108
109
110
111
112
113
114
<?php

namespace Mautic\ApiBundle\Tests;

use Doctrine\ORM\Tools\Pagination\Paginator;
use Mautic\ApiBundle\Helper\EntityResultHelper;
use Mautic\LeadBundle\Entity\Lead;
use PHPUnit\Framework\TestCase;

class EntityResultHelperTest extends TestCase
{
    public const NEW_TITLE = 'Callback Title';

    public function testGetArrayEntities(): void
    {
        $resultHelper = new EntityResultHelper();

        $lead2 = new Lead();
        $lead2->setId(2);

        $lead5 = new Lead();
        $lead5->setId(5);

        $results = [2 => $lead2, 5 => $lead5];

        $arrayResult = $resultHelper->getArray($results);

        $this->assertEquals($results, $arrayResult);

        $arrayResult = $resultHelper->getArray($results, function ($entity): void {
            $this->modifyEntityData($entity);
        });

        foreach ($arrayResult as $entity) {
            $this->assertEquals($entity->getTitle(), self::NEW_TITLE);
        }
    }

    public function testGetArrayPaginator(): void
    {
        $resultHelper = new EntityResultHelper();

        $lead2 = new Lead();
        $lead2->setId(2);

        $lead5 = new Lead();
        $lead5->setId(5);

        $results = [$lead2, $lead5];

        $iterator = new \ArrayIterator($results);

        $paginator = $this->getMockBuilder(Paginator::class)
            ->disableOriginalConstructor()
            ->onlyMethods(['getIterator'])
            ->getMock();

        $paginator->expects($this->any())
            ->method('getIterator')
            ->willReturn($iterator);

        $arrayResult = $resultHelper->getArray($paginator);

        $this->assertEquals($results, $arrayResult);

        $arrayResult = $resultHelper->getArray($results, function ($entity): void {
            $this->modifyEntityData($entity);
        });

        foreach ($arrayResult as $entity) {
            $this->assertEquals($entity->getTitle(), self::NEW_TITLE);
        }
    }

    public function testGetArrayAppendedData(): void
    {
        $resultHelper = new EntityResultHelper();

        $lead2 = new Lead();
        $lead2->setId(2);

        $lead5 = new Lead();
        $lead5->setId(5);

        $lead7 = new Lead();
        $lead7->setId(7);

        $data = [[$lead2, 'title' => 'Title 2'], [$lead5, 'title' => 'Title 5'], [$lead7, 'title' => 'Title 7']];

        $expectedResult = [$lead2, $lead5, $lead7];

        $arrayResult = $resultHelper->getArray($data);

        $this->assertEquals($expectedResult, $arrayResult);

        foreach ($arrayResult as $entity) {
            $this->assertEquals($entity->getTitle(), 'Title '.$entity->getId());
        }

        $arrayResult = $resultHelper->getArray($data, function ($entity): void {
            $this->modifyEntityData($entity);
        });

        foreach ($arrayResult as $entity) {
            $this->assertEquals($entity->getTitle(), self::NEW_TITLE);
        }
    }

    private function modifyEntityData(Lead $entity): void
    {
        $entity->setTitle(self::NEW_TITLE);
    }
}