Skip to content

Commit 80a321d

Browse files
author
Prabhu Ram
committed
MC-32120: Catalog price rules are not included in CartItemPrices
- Added Catalogrule graphql module - added api functional tests
1 parent 047f5b9 commit 80a321d

File tree

6 files changed

+148
-0
lines changed

6 files changed

+148
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"name": "magento/module-catalog-rule-graph-ql",
3+
"description": "N/A",
4+
"type": "magento2-module",
5+
"require": {
6+
"php": "~7.1.3||~7.2.0||~7.3.0",
7+
"magento/framework": "*",
8+
"magento/module-catalog-rule": "*",
9+
},
10+
"license": [
11+
"OSL-3.0",
12+
"AFL-3.0"
13+
],
14+
"autoload": {
15+
"files": [
16+
"registration.php"
17+
],
18+
"psr-4": {
19+
"Magento\\CatalogRuleGraphQl\\": ""
20+
}
21+
}
22+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
9+
<event name="catalog_product_get_final_price">
10+
<observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessFrontFinalPriceObserver" />
11+
</event>
12+
<event name="prepare_catalog_product_collection_prices">
13+
<observer name="catalogrule" instance="Magento\CatalogRule\Observer\PrepareCatalogProductCollectionPricesObserver" />
14+
</event>
15+
</config>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
9+
<module name="Magento_CatalogRuleGraphQl">
10+
<sequence>
11+
<module name="Magento_CatalogRule"/>
12+
</sequence>
13+
</module>
14+
</config>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
use Magento\Framework\Component\ComponentRegistrar;
8+
9+
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Magento_CatalogRuleGraphQl', __DIR__);

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@
135135
"magento/module-catalog-inventory": "*",
136136
"magento/module-catalog-inventory-graph-ql": "*",
137137
"magento/module-catalog-rule": "*",
138+
"magento/module-catalog-rule-graph-ql": "*",
138139
"magento/module-catalog-rule-configurable": "*",
139140
"magento/module-catalog-search": "*",
140141
"magento/module-catalog-url-rewrite": "*",

dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/CartTotalsTest.php

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,90 @@ public function testGetCartTotalsWithTaxApplied()
6464
self::assertEquals('USD', $appliedTaxesResponse[0]['amount']['currency']);
6565
}
6666

67+
/**
68+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
69+
* @magentoApiDataFixture Magento/CatalogRule/_files/catalog_rule_10_off_not_logged.php
70+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php
71+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
72+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_shipping_address.php
73+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_billing_address.php
74+
*/
75+
public function testGetCartTotalsWithCatalogRuleApplied()
76+
{
77+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
78+
$query = $this->getQuery($maskedQuoteId);
79+
$response = $this->graphQlQuery($query);
80+
81+
$cartItem = $response['cart']['items'][0];
82+
self::assertEquals(9, $cartItem['prices']['price']['value']);
83+
self::assertEquals(18, $cartItem['prices']['row_total']['value']);
84+
self::assertEquals(18, $cartItem['prices']['row_total_including_tax']['value']);
85+
86+
self::assertArrayHasKey('prices', $response['cart']);
87+
$pricesResponse = $response['cart']['prices'];
88+
self::assertEquals(18, $pricesResponse['grand_total']['value']);
89+
self::assertEquals(18, $pricesResponse['subtotal_including_tax']['value']);
90+
self::assertEquals(18, $pricesResponse['subtotal_excluding_tax']['value']);
91+
self::assertEquals(18, $pricesResponse['subtotal_with_discount_excluding_tax']['value']);
92+
}
93+
94+
/**
95+
* @magentoApiDataFixture Magento/GraphQl/Tax/_files/tax_rule_for_region_1.php
96+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
97+
* @magentoApiDataFixture Magento/CatalogRule/_files/catalog_rule_10_off_not_logged.php
98+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php
99+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
100+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_shipping_address.php
101+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_billing_address.php
102+
*/
103+
public function testGetCartTotalsWithCatalogRuleAndTaxApplied()
104+
{
105+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
106+
$query = $this->getQuery($maskedQuoteId);
107+
$response = $this->graphQlQuery($query);
108+
109+
$cartItem = $response['cart']['items'][0];
110+
self::assertEquals(9, $cartItem['prices']['price']['value']);
111+
self::assertEquals(18, $cartItem['prices']['row_total']['value']);
112+
self::assertEquals(19.35, $cartItem['prices']['row_total_including_tax']['value']);
113+
114+
self::assertArrayHasKey('prices', $response['cart']);
115+
$pricesResponse = $response['cart']['prices'];
116+
self::assertEquals(19.35, $pricesResponse['grand_total']['value']);
117+
self::assertEquals(19.35, $pricesResponse['subtotal_including_tax']['value']);
118+
self::assertEquals(18, $pricesResponse['subtotal_excluding_tax']['value']);
119+
self::assertEquals(18, $pricesResponse['subtotal_with_discount_excluding_tax']['value']);
120+
}
121+
122+
/**
123+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/cart_rule_discount_no_coupon.php
124+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
125+
* @magentoApiDataFixture Magento/CatalogRule/_files/catalog_rule_10_off_not_logged.php
126+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php
127+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
128+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_shipping_address.php
129+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_billing_address.php
130+
*/
131+
public function testGetCartTotalsWithCatalogRuleAndCartRuleApplied()
132+
{
133+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
134+
$query = $this->getQuery($maskedQuoteId);
135+
$response = $this->graphQlQuery($query);
136+
137+
$cartItem = $response['cart']['items'][0];
138+
self::assertEquals(9, $cartItem['prices']['price']['value']);
139+
self::assertEquals(18, $cartItem['prices']['row_total']['value']);
140+
self::assertEquals(18, $cartItem['prices']['row_total_including_tax']['value']);
141+
self::assertEquals(9, $cartItem['prices']['total_item_discount']['value']);
142+
143+
self::assertArrayHasKey('prices', $response['cart']);
144+
$pricesResponse = $response['cart']['prices'];
145+
self::assertEquals(9, $pricesResponse['grand_total']['value']);
146+
self::assertEquals(18, $pricesResponse['subtotal_including_tax']['value']);
147+
self::assertEquals(18, $pricesResponse['subtotal_excluding_tax']['value']);
148+
self::assertEquals(9, $pricesResponse['subtotal_with_discount_excluding_tax']['value']);
149+
}
150+
67151
/**
68152
* @magentoApiDataFixture Magento/GraphQl/Tax/_files/tax_rule_for_region_1.php
69153
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
@@ -190,6 +274,9 @@ private function getQuery(string $maskedQuoteId): string
190274
value
191275
currency
192276
}
277+
total_item_discount {
278+
value
279+
}
193280
}
194281
}
195282
prices {

0 commit comments

Comments
 (0)