File size: 2,514 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
<?php

namespace Mautic\LeadBundle\Tests\Event;

use Mautic\LeadBundle\Event\LeadTimelineEvent;

class LeadTimelineEventTest extends \PHPUnit\Framework\TestCase
{
    /**
     * @testdox Every event in the timeline should have a unique eventId so test that one is generated if the subscriber forgets
     *
     * @covers \Mautic\LeadBundle\Event\LeadTimelineEvent::addEvent
     * @covers \Mautic\LeadBundle\Event\LeadTimelineEvent::getEvents
     * @covers \Mautic\LeadBundle\Event\LeadTimelineEvent::generateEventId
     */
    public function testEventIdIsGeneratedIfNotSetBySubscriber(): void
    {
        $payload = [
            [
                'event'      => 'foo',
                'eventLabel' => 'Foo',
                'eventType'  => 'foo',
                'timestamp'  => new \DateTime(),
                'extra'      => [
                    'something' => 'something',
                ],
                'icon'      => 'ri-speed-up-line',
                'contactId' => 1,
            ],
            [
                'event'      => 'bar',
                'eventLabel' => 'Bar',
                'eventType'  => 'bar',
                'timestamp'  => new \DateTime(),
                'extra'      => [
                    'something' => 'something else',
                ],
                'icon'      => 'ri-speed-up-line',
                'contactId' => 2,
            ],
            [
                'event'      => 'foobar',
                'eventId'    => 'foobar123',
                'eventLabel' => 'Foo Bar',
                'eventType'  => 'foobar',
                'timestamp'  => new \DateTime(),
                'extra'      => [
                    'something' => 'something else',
                ],
                'icon'      => 'ri-speed-up-line',
                'contactId' => 2,
            ],
        ];

        $event = new LeadTimelineEvent();

        foreach ($payload as $data) {
            $event->addEvent($data);
        }

        $events = $event->getEvents();

        $id1 = hash('crc32', json_encode($payload[0]), false);
        $this->assertTrue(isset($events[0]['eventId']));
        $this->assertEquals('foo'.$id1, $events[0]['eventId']);

        $id2 = hash('crc32', json_encode($payload[1]), false);
        $this->assertTrue(isset($events[1]['eventId']));
        $this->assertEquals('bar'.$id2, $events[1]['eventId']);

        $this->assertTrue(isset($events[2]['eventId']));
        $this->assertEquals('foobar123', $events[2]['eventId']);
    }
}