Skip to content

Commit 6a8c89b

Browse files
author
Vitaliy Boyko
committed
graphQl-309: checkout agreements support multistore
1 parent f17893d commit 6a8c89b

File tree

5 files changed

+135
-33
lines changed

5 files changed

+135
-33
lines changed

app/code/Magento/CheckoutAgreementsGraphQl/Model/Resolver/CheckoutAgreements.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
1414

1515
/**
16-
* CMS page field resolver, used for GraphQL request processing
16+
* Checkout Agreements resolver, used for GraphQL request processing
1717
*/
1818
class CheckoutAgreements implements ResolverInterface
1919
{

app/code/Magento/CheckoutAgreementsGraphQl/Model/Resolver/DataProvider/CheckoutAgreements.php

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,35 +7,36 @@
77

88
namespace Magento\CheckoutAgreementsGraphQl\Model\Resolver\DataProvider;
99

10-
use Magento\CheckoutAgreements\Api\CheckoutAgreementsListInterface;
1110
use Magento\CheckoutAgreements\Api\Data\AgreementInterface;
12-
use Magento\Framework\Api\SearchCriteriaBuilder;
11+
use Magento\CheckoutAgreements\Model\Agreement;
12+
use Magento\CheckoutAgreements\Model\ResourceModel\Agreement\CollectionFactory;
13+
use Magento\Store\Model\StoreManagerInterface;
1314

1415
/**
1516
* Checkout Agreements data provider
1617
*/
1718
class CheckoutAgreements
1819
{
1920
/**
20-
* @var SearchCriteriaBuilder
21+
* @var CollectionFactory
2122
*/
22-
private $searchCriteriaBuilder;
23+
private $agreementCollectionFactory;
2324

2425
/**
25-
* @var CheckoutAgreementsListInterface
26+
* @var StoreManagerInterface
2627
*/
27-
private $checkoutAgreementsList;
28+
private $storeManager;
2829

2930
/**
30-
* @param CheckoutAgreementsListInterface $checkoutAgreementsList
31-
* @param SearchCriteriaBuilder $searchCriteriaBuilder
31+
* @param CollectionFactory $agreementCollectionFactory
32+
* @param StoreManagerInterface $storeManager
3233
*/
3334
public function __construct(
34-
CheckoutAgreementsListInterface $checkoutAgreementsList,
35-
SearchCriteriaBuilder $searchCriteriaBuilder
35+
CollectionFactory $agreementCollectionFactory,
36+
StoreManagerInterface $storeManager
3637
) {
37-
$this->checkoutAgreementsList = $checkoutAgreementsList;
38-
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
38+
$this->agreementCollectionFactory = $agreementCollectionFactory;
39+
$this->storeManager = $storeManager;
3940
}
4041

4142
/**
@@ -45,12 +46,13 @@ public function __construct(
4546
*/
4647
public function getData(): array
4748
{
48-
$this->searchCriteriaBuilder->addFilter(AgreementInterface::IS_ACTIVE, true);
49-
$searchCriteria = $this->searchCriteriaBuilder->create();
50-
$checkoutAgreements = $this->checkoutAgreementsList->getList($searchCriteria);
49+
$agreementsCollection = $this->agreementCollectionFactory->create();
50+
$agreementsCollection->addStoreFilter($this->storeManager->getStore()->getId()); // TODO: store should be get from query context
51+
$agreementsCollection->addFieldToFilter('is_active', 1);
5152

5253
$checkoutAgreementData = [];
53-
foreach ($checkoutAgreements as $checkoutAgreement) {
54+
/** @var Agreement $checkoutAgreement */
55+
foreach ($agreementsCollection->getItems() as $checkoutAgreement) {
5456
$checkoutAgreementData[] = [
5557
AgreementInterface::AGREEMENT_ID => $checkoutAgreement->getAgreementId(),
5658
AgreementInterface::CONTENT => $checkoutAgreement->getContent(),

app/code/Magento/CheckoutAgreementsGraphQl/etc/module.xml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,5 @@
66
*/
77
-->
88
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
9-
<module name="Magento_CheckoutAgreementsGraphQl">
10-
<sequence>
11-
<module name="Magento_GraphQl"/>
12-
</sequence>
13-
</module>
9+
<module name="Magento_CheckoutAgreementsGraphQl" />
1410
</config>

app/code/Magento/CheckoutAgreementsGraphQl/etc/schema.graphqls

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# See COPYING.txt for license details.
33

44
type Query {
5-
checkoutAgreements: [CheckoutAgreement] @resolver(class: "Magento\\CheckoutAgreementsGraphQl\\Model\\Resolver\\CheckoutAgreements") @doc(description: "The Checkout Agreements query returns information about a Checkout Agreements")
5+
checkoutAgreements: [CheckoutAgreement] @resolver(class: "Magento\\CheckoutAgreementsGraphQl\\Model\\Resolver\\CheckoutAgreements") @doc(description: "The Checkout Agreements information")
66
}
77

88
type CheckoutAgreement @doc(description: "Defines all Checkout Agreement information") {

dev/tests/api-functional/testsuite/Magento/GraphQl/CheckoutAgreements/Api/CheckoutAgreementsListTest.php

Lines changed: 114 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,111 @@
77

88
namespace Magento\GraphQl\CheckoutAgreements\Api;
99

10+
use Magento\CheckoutAgreements\Api\Data\AgreementInterface;
11+
use Magento\CheckoutAgreements\Model\Agreement as AgreementModel;
12+
use Magento\CheckoutAgreements\Model\AgreementFactory;
13+
use Magento\CheckoutAgreements\Model\ResourceModel\Agreement;
14+
use Magento\Framework\ObjectManagerInterface;
15+
use Magento\Store\Model\StoreManagerInterface;
16+
use Magento\TestFramework\Helper\Bootstrap;
1017
use Magento\TestFramework\TestCase\GraphQlAbstract;
1118

1219
class CheckoutAgreementsListTest extends GraphQlAbstract
1320
{
21+
/**
22+
* @var ObjectManagerInterface
23+
*/
24+
private $objectManager;
25+
26+
protected function setUp()
27+
{
28+
parent::setUp();
29+
$this->objectManager = Bootstrap::getObjectManager();
30+
}
31+
1432
/**
1533
* @magentoApiDataFixture Magento/CheckoutAgreements/_files/agreement_active_with_html_content.php
1634
* @magentoApiDataFixture Magento/CheckoutAgreements/_files/agreement_inactive_with_text_content.php
1735
*/
1836
public function testGetActiveAgreement()
1937
{
20-
$query =
38+
$query = $this->getQuery();
39+
40+
$response = $this->graphQlQuery($query);
41+
42+
$this->assertArrayHasKey('checkoutAgreements', $response);
43+
$agreements = $response['checkoutAgreements'];
44+
$this->assertCount(1, $agreements);
45+
$this->assertEquals('Checkout Agreement (active)', $agreements[0]['name']);
46+
$this->assertEquals('Checkout agreement content: <b>HTML</b>', $agreements[0]['content']);
47+
$this->assertEquals('200px', $agreements[0]['content_height']);
48+
$this->assertEquals('Checkout agreement checkbox text.', $agreements[0]['checkbox_text']);
49+
$this->assertEquals(true, $agreements[0]['is_html']);
50+
}
51+
52+
/**
53+
* @magentoApiDataFixture Magento/CheckoutAgreements/_files/agreement_active_with_html_content.php
54+
* @magentoApiDataFixture Magento/CheckoutAgreements/_files/agreement_inactive_with_text_content.php
55+
* @magentoApiDataFixture Magento/Store/_files/second_store.php
56+
*/
57+
public function testGetActiveAgreementOnSecondStore()
58+
{
59+
$secondStoreCode = 'fixture_second_store';
60+
$agreementsName = 'Checkout Agreement (active)';
61+
62+
$query = $this->getQuery();
63+
$this->assignAgreementsToStore($secondStoreCode, $agreementsName);
64+
65+
$headerMap['Store'] = $secondStoreCode;
66+
$response = $this->graphQlQuery($query, [], '', $headerMap);
67+
68+
$this->assertArrayHasKey('checkoutAgreements', $response);
69+
$agreements = $response['checkoutAgreements'];
70+
$this->assertCount(1, $agreements);
71+
$this->assertEquals($agreementsName, $agreements[0]['name']);
72+
$this->assertEquals('Checkout agreement content: <b>HTML</b>', $agreements[0]['content']);
73+
$this->assertEquals('200px', $agreements[0]['content_height']);
74+
$this->assertEquals('Checkout agreement checkbox text.', $agreements[0]['checkbox_text']);
75+
$this->assertEquals(true, $agreements[0]['is_html']);
76+
}
77+
78+
/**
79+
* @magentoApiDataFixture Magento/CheckoutAgreements/_files/agreement_active_with_html_content.php
80+
* @magentoApiDataFixture Magento/CheckoutAgreements/_files/agreement_inactive_with_text_content.php
81+
* @magentoApiDataFixture Magento/Store/_files/second_store.php
82+
*/
83+
public function testGetActiveAgreementFromSecondStoreOnDefaultStore()
84+
{
85+
$secondStoreCode = 'fixture_second_store';
86+
$agreementsName = 'Checkout Agreement (active)';
87+
88+
$query = $this->getQuery();
89+
$this->assignAgreementsToStore($secondStoreCode, $agreementsName);
90+
91+
$response = $this->graphQlQuery($query);
92+
93+
$this->assertArrayHasKey('checkoutAgreements', $response);
94+
$agreements = $response['checkoutAgreements'];
95+
$this->assertCount(0, $agreements);
96+
}
97+
98+
public function testGetAgreementNotSet()
99+
{
100+
$query = $this->getQuery();
101+
102+
$response = $this->graphQlQuery($query);
103+
104+
$this->assertArrayHasKey('checkoutAgreements', $response);
105+
$agreements = $response['checkoutAgreements'];
106+
$this->assertCount(0, $agreements);
107+
}
108+
109+
/**
110+
* @return string
111+
*/
112+
private function getQuery(): string
113+
{
114+
return
21115
<<<QUERY
22116
{
23117
checkoutAgreements {
@@ -30,15 +124,25 @@ public function testGetActiveAgreement()
30124
}
31125
}
32126
QUERY;
127+
}
33128

34-
$response = $this->graphQlQuery($query);
35-
$this->assertArrayHasKey('checkoutAgreements', $response);
36-
$agreements = $response['checkoutAgreements'];
37-
$this->assertEquals(1, count($agreements));
38-
$this->assertEquals('Checkout Agreement (active)', $agreements[0]['name']);
39-
$this->assertEquals('Checkout agreement content: <b>HTML</b>', $agreements[0]['content']);
40-
$this->assertEquals('200px', $agreements[0]['content_height']);
41-
$this->assertEquals('Checkout agreement checkbox text.', $agreements[0]['checkbox_text']);
42-
$this->assertEquals(true, $agreements[0]['is_html']);
129+
/**
130+
* @param string $storeCode
131+
* @param string $agreementsName
132+
* @return void
133+
*/
134+
private function assignAgreementsToStore(string $storeCode, string $agreementsName): void
135+
{
136+
$agreementsFactory = $this->objectManager->get(AgreementFactory::class);
137+
/** @var Agreement $agreementsResource */
138+
$agreementsResource = $this->objectManager->get(Agreement::class);
139+
/** @var StoreManagerInterface $storeManager */
140+
$storeManager = $this->objectManager->get(StoreManagerInterface::class);
141+
$store = $storeManager->getStore($storeCode);
142+
/** @var AgreementModel $agreements */
143+
$agreements = $agreementsFactory->create();
144+
$agreementsResource->load($agreements, $agreementsName, AgreementInterface::NAME);
145+
$agreements->setData('stores', [$store->getId()]);
146+
$agreementsResource->save($agreements);
43147
}
44148
}

0 commit comments

Comments
 (0)