Skip to content

Commit b909411

Browse files
committed
ACP2E-209: "Table rate" shipping method displays as "Not yet calculated" on checkout
1 parent dcf79f2 commit b909411

14 files changed

+568
-183
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
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\SalesRule\Test\Fixture;
9+
10+
use Magento\Framework\DataObject;
11+
use Magento\Framework\DataObjectFactory;
12+
use Magento\SalesRule\Model\Rule\Condition\Address;
13+
use Magento\TestFramework\Fixture\DataFixtureInterface;
14+
15+
class AddressCondition implements DataFixtureInterface
16+
{
17+
public const DEFAULT_DATA = [
18+
'type' => Address::class,
19+
'attribute' => null,
20+
'operator' => '==',
21+
'value' => null,
22+
'is_value_processed' => false,
23+
];
24+
25+
/**
26+
* @var DataObjectFactory
27+
*/
28+
private $dataObjectFactory;
29+
30+
/**
31+
* @param DataObjectFactory $dataObjectFactory
32+
*/
33+
public function __construct(
34+
DataObjectFactory $dataObjectFactory
35+
) {
36+
$this->dataObjectFactory = $dataObjectFactory;
37+
}
38+
39+
/**
40+
* {@inheritdoc}
41+
* @param array $data Parameters. Same format as AddressCondition::DEFAULT_DATA.
42+
*/
43+
public function apply(array $data = []): ?DataObject
44+
{
45+
return $this->dataObjectFactory->create(['data' => array_merge(self::DEFAULT_DATA, $data)]);
46+
}
47+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
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\SalesRule\Test\Fixture;
9+
10+
use Magento\Framework\DataObject;
11+
use Magento\Framework\DataObjectFactory;
12+
use Magento\SalesRule\Model\Rule\Condition\Product\Combine;
13+
use Magento\TestFramework\Fixture\DataFixtureInterface;
14+
15+
class Conditions implements DataFixtureInterface
16+
{
17+
public const DEFAULT_DATA = [
18+
'type' => Combine::class,
19+
'attribute' => null,
20+
'operator' => null,
21+
'value' => true,
22+
'is_value_processed' => null,
23+
'aggregator' => 'all',
24+
'conditions' => [
25+
26+
],
27+
];
28+
29+
/**
30+
* @var DataObjectFactory
31+
*/
32+
private $dataObjectFactory;
33+
34+
/**
35+
* @param DataObjectFactory $dataObjectFactory
36+
*/
37+
public function __construct(
38+
DataObjectFactory $dataObjectFactory
39+
) {
40+
$this->dataObjectFactory = $dataObjectFactory;
41+
}
42+
43+
/**
44+
* {@inheritdoc}
45+
* @param array $data Parameters. Same format as ProductConditions::DEFAULT_DATA.
46+
* - $data['conditions']: An array of conditions ProductConditions and ProductCondition
47+
*/
48+
public function apply(array $data = []): ?DataObject
49+
{
50+
return $this->dataObjectFactory->create(['data' => $this->prepareData($data)]);
51+
}
52+
53+
/**
54+
* Prepare combine data
55+
*
56+
* @param array $data
57+
* @return array
58+
*/
59+
private function prepareData(array $data): array
60+
{
61+
$data = array_merge(self::DEFAULT_DATA, $data);
62+
$data['conditions'] = $this->prepareConditionsData($data);
63+
64+
return $data;
65+
}
66+
67+
/**
68+
* Prepare conditions data
69+
*
70+
* @param array $data
71+
* @return array
72+
*/
73+
private function prepareConditionsData(array $data): array
74+
{
75+
$conditions = [];
76+
77+
foreach ($data['conditions'] as $condition) {
78+
$conditionData = $condition instanceof DataObject ? $condition->toArray() : $condition;
79+
if (!isset($condition['conditions'])) {
80+
$conditionData += AddressCondition::DEFAULT_DATA;
81+
}
82+
$conditions[] = $conditionData;
83+
}
84+
85+
return $conditions;
86+
}
87+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
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\SalesRule\Test\Fixture;
9+
10+
use Magento\Framework\DataObject;
11+
use Magento\Framework\DataObjectFactory;
12+
use Magento\SalesRule\Model\Rule\Condition\Product;
13+
use Magento\TestFramework\Fixture\DataFixtureInterface;
14+
15+
class ProductCondition implements DataFixtureInterface
16+
{
17+
public const DEFAULT_DATA = [
18+
'type' => Product::class,
19+
'attribute' => null,
20+
'operator' => '==',
21+
'value' => null,
22+
'is_value_processed' => false,
23+
];
24+
25+
/**
26+
* @var DataObjectFactory
27+
*/
28+
private $dataObjectFactory;
29+
30+
/**
31+
* @param DataObjectFactory $dataObjectFactory
32+
*/
33+
public function __construct(
34+
DataObjectFactory $dataObjectFactory
35+
) {
36+
$this->dataObjectFactory = $dataObjectFactory;
37+
}
38+
39+
/**
40+
* {@inheritdoc}
41+
* @param array $data Parameters. Same format as ProductCondition::DEFAULT_DATA.
42+
*/
43+
public function apply(array $data = []): ?DataObject
44+
{
45+
return $this->dataObjectFactory->create(['data' => array_merge(self::DEFAULT_DATA, $data)]);
46+
}
47+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
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\SalesRule\Test\Fixture;
9+
10+
use Magento\Framework\DataObject;
11+
use Magento\Framework\DataObjectFactory;
12+
use Magento\SalesRule\Model\Rule\Condition\Product\Combine;
13+
use Magento\TestFramework\Fixture\DataFixtureInterface;
14+
15+
class ProductConditions implements DataFixtureInterface
16+
{
17+
public const DEFAULT_DATA = [
18+
'type' => Combine::class,
19+
'attribute' => null,
20+
'operator' => null,
21+
'value' => true,
22+
'is_value_processed' => null,
23+
'aggregator' => 'all',
24+
'conditions' => [
25+
26+
],
27+
];
28+
29+
/**
30+
* @var DataObjectFactory
31+
*/
32+
private $dataObjectFactory;
33+
34+
/**
35+
* @param DataObjectFactory $dataObjectFactory
36+
*/
37+
public function __construct(
38+
DataObjectFactory $dataObjectFactory
39+
) {
40+
$this->dataObjectFactory = $dataObjectFactory;
41+
}
42+
43+
/**
44+
* {@inheritdoc}
45+
* @param array $data Parameters. Same format as ProductConditions::DEFAULT_DATA.
46+
* - $data['conditions']: An array of conditions ProductConditions and ProductCondition
47+
*/
48+
public function apply(array $data = []): ?DataObject
49+
{
50+
return $this->dataObjectFactory->create(['data' => $this->prepareData($data)]);
51+
}
52+
53+
/**
54+
* Prepare combine data
55+
*
56+
* @param array $data
57+
* @return array
58+
*/
59+
private function prepareData(array $data): array
60+
{
61+
$data = array_merge(self::DEFAULT_DATA, $data);
62+
$data['conditions'] = $this->prepareConditionsData($data);
63+
64+
return $data;
65+
}
66+
67+
/**
68+
* Prepare conditions data
69+
*
70+
* @param array $data
71+
* @return array
72+
*/
73+
private function prepareConditionsData(array $data): array
74+
{
75+
$conditions = [];
76+
77+
foreach ($data['conditions'] as $condition) {
78+
$conditionData = $condition instanceof DataObject ? $condition->toArray() : $condition;
79+
if (!isset($condition['conditions'])) {
80+
$conditionData += ProductCondition::DEFAULT_DATA;
81+
}
82+
$conditions[] = $conditionData;
83+
}
84+
85+
return $conditions;
86+
}
87+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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\SalesRule\Test\Fixture;
9+
10+
use Magento\Framework\DataObject;
11+
use Magento\SalesRule\Model\Rule\Condition\Product\Found;
12+
13+
class ProductFoundInCartConditions extends ProductConditions
14+
{
15+
public const DEFAULT_DATA = [
16+
'type' => Found::class,
17+
];
18+
19+
/**
20+
* @inheritdoc
21+
*/
22+
public function apply(array $data = []): ?DataObject
23+
{
24+
return parent::apply(array_merge(self::DEFAULT_DATA, $data));
25+
}
26+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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\SalesRule\Test\Fixture;
9+
10+
use Magento\Framework\DataObject;
11+
use Magento\SalesRule\Model\Rule\Condition\Product\Subselect;
12+
13+
class ProductSubselectionInCartConditions extends ProductConditions
14+
{
15+
public const DEFAULT_DATA = [
16+
'type' => Subselect::class,
17+
];
18+
19+
/**
20+
* @inheritdoc
21+
*/
22+
public function apply(array $data = []): ?DataObject
23+
{
24+
return parent::apply(array_merge(self::DEFAULT_DATA, $data));
25+
}
26+
}

0 commit comments

Comments
 (0)