Skip to content

Commit 03a56e2

Browse files
committed
ACP2E-56 : [On Prem] Magento invoice order date filter not working
1 parent 2919ffc commit 03a56e2

File tree

2 files changed

+199
-0
lines changed

2 files changed

+199
-0
lines changed
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
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\Sales\Model\ResourceModel\Order;
9+
10+
use Magento\Framework\ObjectManagerInterface;
11+
use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
12+
use Magento\Sales\Model\ResourceModel\Order\CollectionFilter as Collection;
13+
use Magento\TestFramework\Helper\Bootstrap;
14+
use PHPUnit\Framework\TestCase;
15+
16+
class CollectionFilterTest extends TestCase
17+
{
18+
/**
19+
* @var ObjectManagerInterface
20+
*/
21+
private ObjectManagerInterface $objectManager;
22+
23+
/**
24+
* @inheritDoc
25+
*/
26+
protected function setUp(): void
27+
{
28+
$this->objectManager = Bootstrap::getObjectManager();
29+
}
30+
31+
/**
32+
* Tests collection properties.
33+
*
34+
* @throws \ReflectionException
35+
* @return void
36+
*/
37+
public function testCollectionCreate(): void
38+
{
39+
/** @var Collection $gridCollection */
40+
$gridCollection = $this->objectManager->get(Collection::class);
41+
$tableDescription = $gridCollection->getConnection()
42+
->describeTable($gridCollection->getMainTable());
43+
44+
$mapper = new \ReflectionMethod(
45+
Collection::class,
46+
'_getMapper'
47+
);
48+
$mapper->setAccessible(true);
49+
$map = $mapper->invoke($gridCollection);
50+
51+
self::assertIsArray($map);
52+
self::assertArrayHasKey('fields', $map);
53+
self::assertIsArray($map['fields']);
54+
self::assertCount(count($tableDescription), $map['fields']);
55+
56+
foreach ($map['fields'] as $mappedName) {
57+
self::assertStringContainsString('main_table.', $mappedName);
58+
}
59+
}
60+
61+
/**
62+
* Verifies that filter condition date is being converted to config timezone before select sql query
63+
*
64+
* @dataProvider getCollectionFiltersDataProvider
65+
* @return void
66+
*/
67+
public function testAddFieldToFilter($mainTable, $resourceModel, $field): void
68+
{
69+
$filterDate = "2021-12-03 00:00:00";
70+
71+
/** @var TimezoneInterface $timeZone */
72+
$timeZone = $this->objectManager->get(TimezoneInterface::class);
73+
/** @var Collection $gridCollection */
74+
$gridCollection = $this->objectManager->create(
75+
Collection::class,
76+
[
77+
'mainTable' => $mainTable,
78+
'resourceModel' => $resourceModel
79+
]
80+
);
81+
82+
$convertedDate = $timeZone->convertConfigTimeToUtc($filterDate);
83+
$collection = $gridCollection->addFieldToFilter($field, ['qteq' => $filterDate]);
84+
$expectedSelect = "SELECT `main_table`.* FROM `{$mainTable}` AS `main_table` " .
85+
"WHERE (((`main_table`.`{$field}` = '{$convertedDate}')))";
86+
87+
$this->assertEquals($expectedSelect, $collection->getSelectSql(true));
88+
}
89+
90+
/**
91+
* @return array
92+
*/
93+
public function getCollectionFiltersDataProvider(): array
94+
{
95+
return [
96+
'shipment_grid_collection_for_created_at' => [
97+
'mainTable' => 'sales_shipment_grid',
98+
'resourceModel' => Shipment::class,
99+
'field' => 'created_at',
100+
],
101+
'shipment_grid_collection_for_order_created_at' => [
102+
'mainTable' => 'sales_shipment_grid',
103+
'resourceModel' => Shipment::class,
104+
'field' => 'order_created_at',
105+
],
106+
'creditmemo_grid_collection_for_created_at' => [
107+
'mainTable' => 'sales_creditmemo_grid',
108+
'resourceModel' => Creditmemo::class,
109+
'field' => 'created_at',
110+
],
111+
'creditmemo_grid_collection_for_order_created_at' => [
112+
'mainTable' => 'sales_creditmemo_grid',
113+
'resourceModel' => Creditmemo::class,
114+
'field' => 'order_created_at',
115+
]
116+
];
117+
}
118+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
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\Sales\Model\ResourceModel\Order\Invoice\Grid;
9+
10+
use Magento\Framework\ObjectManagerInterface;
11+
use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
12+
use Magento\Sales\Model\ResourceModel\Order\Invoice\Grid\CollectionFilter as Collection;
13+
use Magento\TestFramework\Helper\Bootstrap;
14+
use PHPUnit\Framework\TestCase;
15+
16+
class CollectionFilterTest extends TestCase
17+
{
18+
/**
19+
* @var ObjectManagerInterface
20+
*/
21+
private $objectManager;
22+
23+
/**
24+
* @inheritDoc
25+
*/
26+
protected function setUp(): void
27+
{
28+
$this->objectManager = Bootstrap::getObjectManager();
29+
}
30+
31+
/**
32+
* Tests collection properties.
33+
*
34+
* @throws \ReflectionException
35+
* @return void
36+
*/
37+
public function testCollectionCreate(): void
38+
{
39+
/** @var Collection $gridCollection */
40+
$gridCollection = $this->objectManager->get(Collection::class);
41+
$tableDescription = $gridCollection->getConnection()
42+
->describeTable($gridCollection->getMainTable());
43+
44+
$mapper = new \ReflectionMethod(
45+
Collection::class,
46+
'_getMapper'
47+
);
48+
$mapper->setAccessible(true);
49+
$map = $mapper->invoke($gridCollection);
50+
51+
self::assertIsArray($map);
52+
self::assertArrayHasKey('fields', $map);
53+
self::assertIsArray($map['fields']);
54+
self::assertCount(count($tableDescription), $map['fields']);
55+
56+
foreach ($map['fields'] as $mappedName) {
57+
self::assertStringContainsString('main_table.', $mappedName);
58+
}
59+
}
60+
61+
/**
62+
* Verifies that filter condition date is being converted to config timezone before select sql query
63+
*
64+
* @return void
65+
*/
66+
public function testAddFieldToFilter(): void
67+
{
68+
$filterDate = "2021-12-03 00:00:00";
69+
/** @var TimezoneInterface $timeZone */
70+
$timeZone = $this->objectManager->get(TimezoneInterface::class);
71+
/** @var Collection $gridCollection */
72+
$gridCollection = $this->objectManager->get(Collection::class);
73+
$convertedDate = $timeZone->convertConfigTimeToUtc($filterDate);
74+
75+
$collection = $gridCollection->addFieldToFilter('created_at', ['qteq' => $filterDate]);
76+
$expectedSelect = "SELECT `main_table`.* FROM `sales_invoice_grid` AS `main_table` " .
77+
"WHERE (((`main_table`.`created_at` = '{$convertedDate}')))";
78+
79+
$this->assertEquals($expectedSelect, $collection->getSelectSql(true));
80+
}
81+
}

0 commit comments

Comments
 (0)