Skip to content

Commit 9e627bf

Browse files
committed
MC-40073: Create automated test for: "Guest and customer comparison lists merging"
1 parent 427f9bf commit 9e627bf

File tree

5 files changed

+201
-0
lines changed

5 files changed

+201
-0
lines changed
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Catalog\Observer\Compare;
9+
10+
use Magento\Catalog\Model\Product\Compare\ListCompareFactory;
11+
use Magento\Customer\Model\Session;
12+
use Magento\Customer\Model\Visitor;
13+
use Magento\Eav\Model\Entity\Collection\AbstractCollection;
14+
use Magento\Framework\ObjectManagerInterface;
15+
use Magento\TestFramework\Helper\Bootstrap;
16+
use PHPUnit\Framework\TestCase;
17+
18+
/**
19+
* Checks customer and visitor compare list merging after customer login
20+
*
21+
* @see \Magento\Catalog\Observer\Compare\BindCustomerLoginObserver
22+
*
23+
* @magentoAppArea frontend
24+
* @magentoDbIsolation enabled
25+
*/
26+
class BindCustomerLoginObserverTest extends TestCase
27+
{
28+
/** @var ObjectManagerInterface */
29+
private $objectManager;
30+
31+
/** @var Session */
32+
private $session;
33+
34+
/** @var Visitor */
35+
private $visitor;
36+
37+
/** @var ListCompareFactory */
38+
private $listCompareFactory;
39+
40+
/**
41+
* @inheritdoc
42+
*/
43+
protected function setUp(): void
44+
{
45+
parent::setUp();
46+
47+
$this->objectManager = Bootstrap::getObjectManager();
48+
$this->session = $this->objectManager->get(Session::class);
49+
$this->visitor = $this->objectManager->get(Visitor::class);
50+
$this->listCompareFactory = $this->objectManager->get(ListCompareFactory::class);
51+
}
52+
53+
/**
54+
* @magentoDataFixture Magento/Catalog/_files/visitor_compare_list.php
55+
* @magentoDataFixture Magento/Customer/_files/customer.php
56+
*
57+
* @return void
58+
*/
59+
public function testExecute(): void
60+
{
61+
$this->visitor->setId(123);
62+
$this->session->loginById(1);
63+
$this->assertCustomerItems(1, ['simple']);
64+
$this->assertVisitorItems(123, []);
65+
}
66+
67+
/**
68+
* @magentoDataFixture Magento/Catalog/_files/customer_compare_list_with_simple_product.php
69+
* @magentoDataFixture Magento/Catalog/_files/product_in_compare_list_with_customer.php
70+
* @magentoDataFixture Magento/Catalog/_files/visitor_compare_list.php
71+
*
72+
* @return void
73+
*/
74+
public function testExecuteWithSameProducts(): void
75+
{
76+
$this->visitor->setId(123);
77+
$this->session->loginById(1);
78+
$this->assertCustomerItems(1, ['simple', 'simple2']);
79+
$this->assertVisitorItems(123, []);
80+
}
81+
82+
/**
83+
* Check customer compare items
84+
*
85+
* @param int $customerId
86+
* @param array $expectedProductSkus
87+
* @return void
88+
*/
89+
private function assertCustomerItems(int $customerId, array $expectedProductSkus): void
90+
{
91+
$collection = $this->listCompareFactory->create()->getItemCollection()->useProductItem()
92+
->setCustomerId($customerId);
93+
$this->checkCollection($collection, $expectedProductSkus);
94+
}
95+
96+
/**
97+
* Checks visitor compare items
98+
*
99+
* @param int $visitorId
100+
* @param array $expectedProductSkus
101+
* @return void
102+
*/
103+
private function assertVisitorItems(int $visitorId, array $expectedProductSkus): void
104+
{
105+
$collection = $this->listCompareFactory->create()->getItemCollection()->useProductItem()
106+
->setVisitorId($visitorId);
107+
$collection->addFieldToFilter('customer_id', ['null' => true]);
108+
$this->checkCollection($collection, $expectedProductSkus);
109+
}
110+
111+
/**
112+
* Check collection
113+
*
114+
* @param AbstractCollection $collection
115+
* @param array $expectedSkus
116+
* @return void
117+
*/
118+
private function checkCollection(AbstractCollection $collection, array $expectedSkus): void
119+
{
120+
$this->assertCount(count($expectedSkus), $collection);
121+
foreach ($expectedSkus as $expectedSku) {
122+
$this->assertNotNull($collection->getItemByColumnValue('sku', $expectedSku));
123+
}
124+
}
125+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Catalog\Model\Product\Compare\ListCompare;
9+
use Magento\Catalog\Model\Product\Compare\ListCompareFactory;
10+
use Magento\Customer\Model\Session;
11+
use Magento\Customer\Model\Visitor;
12+
use Magento\TestFramework\Helper\Bootstrap;
13+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
14+
15+
Resolver::getInstance()->requireDataFixture('Magento/Catalog/_files/product_simple.php');
16+
Resolver::getInstance()->requireDataFixture('Magento/Customer/_files/customer.php');
17+
18+
$objectManager = Bootstrap::getObjectManager();
19+
/** @var Session $session */
20+
$session = $objectManager->get(Session::class);
21+
22+
try {
23+
$session->loginById(1);
24+
/** @var Visitor $visitor */
25+
$visitor = $objectManager->get(Visitor::class);
26+
$visitor->setVisitorId(1);
27+
/** @var ListCompare $compareList */
28+
$compareList = $objectManager->get(ListCompareFactory::class)->create();
29+
$compareList->addProduct(1);
30+
} finally {
31+
$session->logout();
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
9+
10+
Resolver::getInstance()->requireDataFixture('Magento/Customer/_files/customer_rollback.php');
11+
Resolver::getInstance()->requireDataFixture('Magento/Catalog/_files/product_simple_rollback.php');
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Catalog\Model\Product\Compare\ListCompare;
9+
use Magento\Catalog\Model\Product\Compare\ListCompareFactory;
10+
use Magento\Customer\Model\Visitor;
11+
use Magento\TestFramework\Helper\Bootstrap;
12+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
13+
14+
Resolver::getInstance()->requireDataFixture('Magento/Catalog/_files/product_simple.php');
15+
16+
$objectManager = Bootstrap::getObjectManager();
17+
18+
/** @var Visitor $visitor */
19+
$visitor = $objectManager->get(Visitor::class);
20+
$visitor->setVisitorId(123);
21+
/** @var ListCompare $compareList */
22+
$compareList = $objectManager->get(ListCompareFactory::class)->create();
23+
$compareList->addProduct(1);
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
9+
10+
Resolver::getInstance()->requireDataFixture('Magento/Catalog/_files/product_simple_rollback.php');

0 commit comments

Comments
 (0)