Skip to content

Commit 7b89c86

Browse files
committed
ADO-313: improved phpunit tests
1 parent f7e8e7c commit 7b89c86

File tree

3 files changed

+142
-20
lines changed

3 files changed

+142
-20
lines changed

app/code/Meta/Conversion/Test/Unit/Model/CapiEventHandlerTest.php

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,70 @@ public function testProcess()
5858
->with($message)
5959
->willReturn($payload);
6060

61+
$this->fbeHelperMock->expects($this->once())
62+
->method('getSource')
63+
->willReturn('adobe_commerce');
64+
65+
$this->fbeHelperMock->expects($this->once())
66+
->method('getPluginVersion')
67+
->willReturn('1.0.0');
68+
69+
70+
$this->subject->process($message);
71+
}
72+
73+
public function testProcessUsingCustomData()
74+
{
75+
$message = '{"event_id":"kjfabfkhba-afkbahb","event_type":"addtocart","event":"addtocart","sku":"test_sku","qty":1,"userDataFromOrder":"{"name":"john doe"}"}';
76+
$payload = [
77+
'event_id' => 'kjfabfkhba-afkbahb',
78+
'event_type' => 'addtocart',
79+
'sku' => 'test_sku',
80+
'qty' => 1,
81+
'event' => 'addtocart',
82+
'userDataFromOrder' => ['name' => 'john doe']
83+
];
84+
85+
$this->jsonSerializerMock->expects($this->once())
86+
->method('unserialize')
87+
->with($message)
88+
->willReturn($payload);
89+
90+
$this->fbeHelperMock->expects($this->once())
91+
->method('getSource')
92+
->willReturn('adobe_commerce');
93+
94+
$this->fbeHelperMock->expects($this->once())
95+
->method('getPluginVersion')
96+
->willReturn('1.0.0');
97+
98+
99+
$this->subject->process($message);
100+
}
101+
102+
public function testProcessWithException()
103+
{
104+
$message = '{"event_type":"addtocart","event":"addtocart","sku":"test_sku","qty":1,"userDataFromOrder":"{"name":"john doe"}"}';
105+
$payload = [
106+
'event_type' => 'addtocart',
107+
'sku' => 'test_sku',
108+
'qty' => 1,
109+
'event' => 'addtocart',
110+
'userDataFromOrder' => ['name' => 'john doe']
111+
];
112+
113+
$this->jsonSerializerMock->expects($this->once())
114+
->method('unserialize')
115+
->with($message)
116+
->willReturn($payload);
117+
118+
$this->fbeHelperMock->expects($this->once())
119+
->method('logException')
120+
->with($this->callback(function ($exception) {
121+
return $exception instanceof \Exception &&
122+
str_contains($exception->getMessage(), 'event_id');
123+
}));
124+
61125
$this->subject->process($message);
62126
}
63127
}

app/code/Meta/Conversion/Test/Unit/Model/CapiEventIdHandlerTest.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,19 @@ public function setUp(): void
1717
$this->subject = $object->getObject(CapiEventIdHandler::class);
1818
}
1919

20-
public function testGetMetaEventId()
20+
public function testMetaEventId()
2121
{
2222
$eventName = 'test_event_name';
23-
$this->subject->getMetaEventId($eventName);
23+
$eventId = 'test_event_id';
24+
$this->subject->setMetaEventId($eventName, $eventId);
25+
$this->assertEquals($eventId, $this->subject->getMetaEventId($eventName));
2426
}
2527

26-
public function testSetMetaEventId()
28+
public function testMissingEventId()
2729
{
2830
$eventName = 'test_event_name';
2931
$eventId = 'test_event_id';
3032
$this->subject->setMetaEventId($eventName, $eventId);
33+
$this->assertNull($this->subject->getMetaEventId('new-event'));
3134
}
3235
}

app/code/Meta/Conversion/Test/Unit/Model/CapiTrackerTest.php

Lines changed: 72 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,56 +3,111 @@
33

44
namespace Meta\Conversion\Test\Unit\Model;
55

6-
use PHPUnit\Framework\TestCase;
7-
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
8-
use Meta\Conversion\Model\CapiTracker;
9-
use Magento\Customer\Model\Session as CustomerSession;
10-
use Magento\Framework\Serialize\Serializer\Json as JsonSerializer;
6+
use Magento\Customer\Model\Session;
117
use Magento\Framework\MessageQueue\PublisherInterface;
8+
use Magento\Framework\Serialize\Serializer\Json;
129
use Meta\Conversion\Model\CapiEventIdHandler;
10+
use Meta\Conversion\Model\CapiTracker;
11+
use PHPUnit\Framework\TestCase;
12+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
1313

1414
class CapiTrackerTest extends TestCase
1515
{
1616
private $customerSessionMock;
1717
private $capiEventIdHandlerMock;
1818
private $jsonSerializerMock;
1919
private $publisherMock;
20-
private $object;
2120
private $subject;
2221

2322
public function setUp(): void
2423
{
25-
$this->customerSessionMock = $this->getMockBuilder(CustomerSession::class)
24+
$this->customerSessionMock = $this->getMockBuilder(Session::class)
25+
->addMethods(['setMetaEventIds'])
2626
->disableOriginalConstructor()
2727
->getMock();
28+
2829
$this->capiEventIdHandlerMock = $this->getMockBuilder(CapiEventIdHandler::class)
2930
->disableOriginalConstructor()
3031
->getMock();
31-
$this->jsonSerializerMock = $this->getMockBuilder(JsonSerializer::class)
32+
33+
$this->jsonSerializerMock = $this->getMockBuilder(Json::class)
3234
->disableOriginalConstructor()
3335
->getMock();
36+
3437
$this->publisherMock = $this->getMockBuilder(PublisherInterface::class)
3538
->disableOriginalConstructor()
3639
->getMockForAbstractClass();
3740

38-
$object = new ObjectManager($this);
39-
$this->subject = $object->getObject(CapiTracker::class, [
41+
$objectManager = new ObjectManager($this);
42+
$this->subject = $objectManager->getObject(CapiTracker::class, [
4043
'customerSession' => $this->customerSessionMock,
4144
'capiEventIdHandler' => $this->capiEventIdHandlerMock,
4245
'jsonSerializer' => $this->jsonSerializerMock,
4346
'publisher' => $this->publisherMock
4447
]);
4548
}
4649

47-
public function testExecute()
50+
public function testExecuteWithSessionStorage()
51+
{
52+
$eventName = 'test_event';
53+
$eventType = 'event_type';
54+
$payload = ['sku' => 'ABC123'];
55+
56+
$savedEventIds = [];
57+
58+
$this->customerSessionMock->expects($this->once())
59+
->method('setMetaEventIds')
60+
->willReturnCallback(function ($value) use (&$savedEventIds) {
61+
$savedEventIds = $value;
62+
});
63+
64+
$this->jsonSerializerMock->expects($this->once())
65+
->method('serialize')
66+
->willReturnCallback(function ($data) use (&$serializedData) {
67+
$serializedData = $data;
68+
return json_encode($data);
69+
});
70+
71+
$this->publisherMock->expects($this->once())
72+
->method('publish');
73+
74+
$this->subject->execute($payload, $eventName, $eventType, true);
75+
76+
$this->assertArrayHasKey($eventName, $savedEventIds);
77+
$this->assertEquals($savedEventIds[$eventName], $serializedData['event_id']);
78+
}
79+
80+
public function testExecuteWithHandlerStorage()
4881
{
49-
$payload = [
50-
'event' => 'addtocart',
51-
'sku' => 'test_sku',
52-
'qty' => 1
53-
];
82+
$eventName = 'event_name';
83+
$eventType = 'event_type';
84+
$payload = ['sku' => 'XYZ789'];
85+
86+
$capturedEventId = null;
87+
$serializedPayload = null;
88+
89+
$this->capiEventIdHandlerMock->expects($this->once())
90+
->method('setMetaEventId')
91+
->willReturnCallback(function ($passedEventName, $eventId) use ($eventName, &$capturedEventId) {
92+
// Capture the event ID for assertion
93+
$this->assertEquals($eventName, $passedEventName);
94+
$capturedEventId = $eventId;
95+
});
96+
97+
$this->jsonSerializerMock->expects($this->once())
98+
->method('serialize')
99+
->willReturnCallback(function ($data) use (&$serializedPayload) {
100+
$serializedPayload = $data;
101+
return json_encode($data);
102+
});
103+
104+
$this->publisherMock->expects($this->once())
105+
->method('publish')
106+
->with('send.conversion.event.to.meta', $this->isType('string'));
54107

55-
$this->subject->execute($payload, 'addtocart', 'addtocart', true);
108+
$this->subject->execute($payload, $eventName, $eventType, false);
56109

110+
$this->assertArrayHasKey('event_id', $serializedPayload);
111+
$this->assertEquals($capturedEventId, $serializedPayload['event_id']);
57112
}
58113
}

0 commit comments

Comments
 (0)