Skip to content

Commit f2d7be3

Browse files
#29549: Scheduled price rule time zone correction - test coverage.
1 parent 6bf3dfc commit f2d7be3

File tree

7 files changed

+176
-217
lines changed

7 files changed

+176
-217
lines changed

app/code/Magento/CatalogRule/Test/Unit/Model/Indexer/IndexBuilderTest.php

Lines changed: 0 additions & 195 deletions
This file was deleted.

dev/tests/integration/testsuite/Magento/CatalogRule/Model/Indexer/IndexerBuilderTest.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
*/
66
namespace Magento\CatalogRule\Model\Indexer;
77

8+
use Magento\Catalog\Api\ProductRepositoryInterface;
9+
use Magento\Store\Model\StoreManagerInterface;
810
use Magento\TestFramework\Helper\Bootstrap;
911

1012
class IndexerBuilderTest extends \PHPUnit\Framework\TestCase
@@ -34,13 +36,25 @@ class IndexerBuilderTest extends \PHPUnit\Framework\TestCase
3436
*/
3537
protected $productThird;
3638

39+
/**
40+
* @var StoreManagerInterface
41+
*/
42+
private $storeManager;
43+
44+
/**
45+
* @var ProductRepositoryInterface
46+
*/
47+
private $productRepository;
48+
3749
protected function setUp(): void
3850
{
3951
$this->indexerBuilder = Bootstrap::getObjectManager()->get(
4052
\Magento\CatalogRule\Model\Indexer\IndexBuilder::class
4153
);
4254
$this->resourceRule = Bootstrap::getObjectManager()->get(\Magento\CatalogRule\Model\ResourceModel\Rule::class);
4355
$this->product = Bootstrap::getObjectManager()->get(\Magento\Catalog\Model\Product::class);
56+
$this->storeManager = Bootstrap::getObjectManager()->get(StoreManagerInterface::class);
57+
$this->productRepository = Bootstrap::getObjectManager()->get(ProductRepositoryInterface::class);
4458
}
4559

4660
protected function tearDown(): void
@@ -82,6 +96,31 @@ public function testReindexById()
8296
$this->assertEquals(9.8, $this->resourceRule->getRulePrice(new \DateTime(), 1, 1, $product->getId()));
8397
}
8498

99+
/**
100+
* @magentoDbIsolation disabled
101+
* @magentoAppIsolation enabled
102+
* @magentoDataFixture Magento/CatalogRule/_files/simple_product_with_catalog_rule_50_percent_off_tomorrow.php
103+
* @magentoConfigFixture base_website general/locale/timezone Europe/Amsterdam
104+
* @magentoConfigFixture general/locale/timezone America/Chicago
105+
*/
106+
public function testReindexByIdDifferentTimezones()
107+
{
108+
$productId = $this->productRepository->get('simple')->getId();
109+
$this->indexerBuilder->reindexById($productId);
110+
111+
$mainWebsiteId = $this->storeManager->getWebsite('base')->getId();
112+
$secondWebsiteId = $this->storeManager->getWebsite('test')->getId();
113+
$rawTimestamp = (new \DateTime('+1 day'))->getTimestamp();
114+
$timestamp = $rawTimestamp - ($rawTimestamp % (60 * 60 * 24));
115+
$mainWebsiteActiveRules =
116+
$this->resourceRule->getRulesFromProduct($timestamp, $mainWebsiteId, 1, $productId);
117+
$secondWebsiteActiveRules =
118+
$this->resourceRule->getRulesFromProduct($timestamp, $secondWebsiteId, 1, $productId);
119+
120+
$this->assertCount(1, $mainWebsiteActiveRules);
121+
$this->assertCount(0, $secondWebsiteActiveRules);
122+
}
123+
85124
/**
86125
* @magentoDbIsolation disabled
87126
* @magentoAppIsolation enabled

dev/tests/integration/testsuite/Magento/CatalogRule/Model/Indexer/Product/PriceTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,11 @@ public function testPriceForSecondStore():void
9696
{
9797
$websiteId = $this->websiteRepository->get('test')->getId();
9898
$simpleProduct = $this->productRepository->get('simple');
99+
$simpleProduct->setPriceCalculation(true);
99100
$this->assertEquals('simple', $simpleProduct->getSku());
101+
$this->assertFalse(
102+
$this->resourceRule->getRulePrice(new \DateTime(), $websiteId, 1, $simpleProduct->getId())
103+
);
100104
$this->indexerBuilder->reindexById($simpleProduct->getId());
101105
$this->assertEquals(
102106
25,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
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\Api\Data\ProductInterfaceFactory;
9+
use Magento\Catalog\Api\ProductRepositoryInterface;
10+
use Magento\Catalog\Model\Product\Attribute\Source\Status;
11+
use Magento\Catalog\Model\Product\Visibility;
12+
use Magento\CatalogRule\Api\CatalogRuleRepositoryInterface;
13+
use Magento\CatalogRule\Model\Indexer\IndexBuilder;
14+
use Magento\CatalogRule\Model\Rule;
15+
use Magento\CatalogRule\Model\RuleFactory;
16+
use Magento\Customer\Model\Group;
17+
use Magento\Store\Api\WebsiteRepositoryInterface;
18+
use Magento\TestFramework\Helper\Bootstrap;
19+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
20+
21+
Resolver::getInstance()->requireDataFixture('Magento/Store/_files/second_website_with_two_stores.php');
22+
23+
$objectManager = Bootstrap::getObjectManager();
24+
/** @var WebsiteRepositoryInterface $websiteRepository */
25+
$websiteRepository = $objectManager->get(WebsiteRepositoryInterface::class);
26+
/** @var IndexBuilder $indexBuilder */
27+
$indexBuilder = $objectManager->get(IndexBuilder::class);
28+
/** @var CatalogRuleRepositoryInterface $catalogRuleRepository */
29+
$catalogRuleRepository = $objectManager->get(CatalogRuleRepositoryInterface::class);
30+
/** @var ProductInterfaceFactory $productFactory */
31+
$productFactory = $objectManager->get(ProductInterfaceFactory::class);
32+
/** @var ProductRepositoryInterface $productRepository */
33+
$productRepository = $objectManager->get(ProductRepositoryInterface::class);
34+
/** @var RuleFactory $ruleFactory */
35+
$ruleFactory = $objectManager->get(RuleFactory::class);
36+
37+
$secondWebsite = $websiteRepository->get('test');
38+
$product = $productFactory->create();
39+
$product->setTypeId('simple')
40+
->setAttributeSetId($product->getDefaultAttributeSetId())
41+
->setWebsiteIds([1, $secondWebsite->getId()])
42+
->setName('Simple Product')
43+
->setSku('simple')
44+
->setPrice(50)
45+
->setVisibility(Visibility::VISIBILITY_BOTH)
46+
->setStatus(Status::STATUS_ENABLED)
47+
->setStockData(
48+
[
49+
'use_config_manage_stock' => 1,
50+
'qty' => 100,
51+
'is_qty_decimal' => 0,
52+
'is_in_stock' => 1,
53+
]
54+
);
55+
$productRepository->save($product);
56+
/** @var Rule $rule */
57+
$catalogRule = $ruleFactory->create();
58+
$catalogRule->loadPost(
59+
[
60+
'name' => 'Test Catalog Rule 50% off tomorrow',
61+
'is_active' => '1',
62+
'stop_rules_processing' => 0,
63+
'website_ids' => [1, $secondWebsite->getId()],
64+
'customer_group_ids' => [Group::NOT_LOGGED_IN_ID, 1],
65+
'discount_amount' => 50,
66+
'simple_action' => 'by_percent',
67+
'from_date' => (new \DateTime('+1 day'))->format('m/d/Y'),
68+
'to_date' => '',
69+
'sort_order' => 0,
70+
'sub_is_enable' => 0,
71+
'sub_discount_amount' => 0,
72+
'conditions' => [],
73+
]
74+
);
75+
$catalogRuleRepository->save($catalogRule);
76+
$indexBuilder->reindexFull();

0 commit comments

Comments
 (0)