Skip to content

Commit 17b7c0a

Browse files
author
Vitaliy Boyko
committed
graphQl-309: added agreement coverage
1 parent 0e8428c commit 17b7c0a

File tree

10 files changed

+230
-2
lines changed

10 files changed

+230
-2
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
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\CheckoutAgreementsGraphQl\Model\Resolver;
9+
10+
use Magento\CheckoutAgreementsGraphQl\Model\Resolver\DataProvider\CheckoutAgreements as CheckoutAgreementsDataProvider;
11+
use Magento\Framework\GraphQl\Config\Element\Field;
12+
use Magento\Framework\GraphQl\Query\ResolverInterface;
13+
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
14+
15+
/**
16+
* CMS page field resolver, used for GraphQL request processing
17+
*/
18+
class CheckoutAgreements implements ResolverInterface
19+
{
20+
/**
21+
* @var CheckoutAgreementsDataProvider
22+
*/
23+
private $checkoutAgreementsDataProvider;
24+
25+
/**
26+
* @param CheckoutAgreementsDataProvider $checkoutAgreementsDataProvider
27+
*/
28+
public function __construct(
29+
CheckoutAgreementsDataProvider $checkoutAgreementsDataProvider
30+
) {
31+
$this->checkoutAgreementsDataProvider = $checkoutAgreementsDataProvider;
32+
}
33+
34+
/**
35+
* @inheritdoc
36+
*/
37+
public function resolve(
38+
Field $field,
39+
$context,
40+
ResolveInfo $info,
41+
array $value = null,
42+
array $args = null
43+
) {
44+
$checkoutAgreementsData = $this->checkoutAgreementsDataProvider->getData();
45+
46+
return $checkoutAgreementsData;
47+
}
48+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
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\CheckoutAgreementsGraphQl\Model\Resolver\DataProvider;
9+
10+
use Magento\CheckoutAgreements\Api\CheckoutAgreementsListInterface;
11+
use Magento\CheckoutAgreements\Api\Data\AgreementInterface;
12+
use Magento\Cms\Api\Data\PageInterface;
13+
use Magento\Framework\Api\SearchCriteriaBuilder;
14+
use Magento\Framework\Exception\NoSuchEntityException;
15+
16+
/**
17+
* Checkout Agreements data provider
18+
*/
19+
class CheckoutAgreements
20+
{
21+
/**
22+
* @var SearchCriteriaBuilder
23+
*/
24+
private $searchCriteriaBuilder;
25+
26+
/**
27+
* @var CheckoutAgreementsListInterface
28+
*/
29+
private $checkoutAgreementsList;
30+
31+
/**
32+
* @param CheckoutAgreementsListInterface $checkoutAgreementsList
33+
* @param SearchCriteriaBuilder $searchCriteriaBuilder
34+
*/
35+
public function __construct(
36+
CheckoutAgreementsListInterface $checkoutAgreementsList,
37+
SearchCriteriaBuilder $searchCriteriaBuilder
38+
) {
39+
$this->checkoutAgreementsList = $checkoutAgreementsList;
40+
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
41+
}
42+
43+
/**
44+
* Get All Active Checkout Agreements Data
45+
*
46+
* @return array
47+
*/
48+
public function getData(): array
49+
{
50+
$this->searchCriteriaBuilder->addFilter(AgreementInterface::IS_ACTIVE, true);
51+
$searchCriteria = $this->searchCriteriaBuilder->create();
52+
$checkoutAgreements = $this->checkoutAgreementsList->getList($searchCriteria);
53+
54+
$checkoutAgreementData = [];
55+
foreach ($checkoutAgreements as $checkoutAgreement) {
56+
$checkoutAgreementData[] = [
57+
AgreementInterface::AGREEMENT_ID => $checkoutAgreement->getAgreementId(),
58+
AgreementInterface::CONTENT => $checkoutAgreement->getContent(),
59+
AgreementInterface::NAME => $checkoutAgreement->getName(),
60+
AgreementInterface::CONTENT_HEIGHT => $checkoutAgreement->getContentHeight(),
61+
AgreementInterface::CHECKBOX_TEXT => $checkoutAgreement->getCheckboxText(),
62+
AgreementInterface::IS_HTML => $checkoutAgreement->getIsHtml(),
63+
];
64+
}
65+
66+
return $checkoutAgreementData;
67+
}
68+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# CheckoutAgreementsGraphQl
2+
3+
**CheckoutAgreementsGraphQl** provides type information for the GraphQl module
4+
to generate Checkout Agreements fields for Checkout Agreements information endpoints.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"name": "magento/module-checkout-agreements-graph-ql",
3+
"description": "N/A",
4+
"type": "magento2-module",
5+
"require": {
6+
"php": "~7.1.3||~7.2.0",
7+
"magento/framework": "*",
8+
"magento/module-checkout-agreements": "*"
9+
},
10+
"suggest": {
11+
"magento/module-graph-ql": "*",
12+
"magento/module-store-graph-ql": "*"
13+
},
14+
"license": [
15+
"OSL-3.0",
16+
"AFL-3.0"
17+
],
18+
"autoload": {
19+
"files": [
20+
"registration.php"
21+
],
22+
"psr-4": {
23+
"Magento\\CheckoutAgreementsGraphQl\\": ""
24+
}
25+
}
26+
}
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_CheckoutAgreementsGraphQl">
10+
<sequence>
11+
<module name="Magento_GraphQl"/>
12+
</sequence>
13+
</module>
14+
</config>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Copyright © Magento, Inc. All rights reserved.
2+
# See COPYING.txt for license details.
3+
4+
type Query {
5+
checkoutAgreements: [CheckoutAgreement] @resolver(class: "Magento\\CheckoutAgreementsGraphQl\\Model\\Resolver\\CheckoutAgreements") @doc(description: "The Checkout Agreements query returns information about a Checkout Agreements")
6+
}
7+
8+
type CheckoutAgreement @doc(description: "Defines all Checkout Agreement information") {
9+
agreement_id: Int @doc(description: "Checkout Agreement identifier")
10+
name: String @doc(description: "Checkout Agreement name")
11+
content: String @doc(description: "Checkout Agreement content")
12+
content_height: String @doc(description: "Checkout Agreement content height")
13+
checkbox_text: String @doc(description: "Checkout Agreement checkbox tex")
14+
is_html: Boolean @doc(description: "Is Checkout Agreement content in HTML format")
15+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
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\Framework\Component\ComponentRegistrar;
9+
10+
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Magento_CheckoutAgreementsGraphQl', __DIR__);

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@
126126
"magento/module-catalog-widget": "*",
127127
"magento/module-checkout": "*",
128128
"magento/module-checkout-agreements": "*",
129+
"magento/module-checkout-agreements-graph-ql": "*",
129130
"magento/module-cms": "*",
130131
"magento/module-cms-url-rewrite": "*",
131132
"magento/module-config": "*",

composer.lock

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\GraphQL\CheckoutAgreements\Api;
8+
9+
use Magento\TestFramework\TestCase\GraphQlAbstract;
10+
11+
class CheckoutAgreementsListTest extends GraphQlAbstract
12+
{
13+
/**
14+
* @magentoApiDataFixture Magento/CheckoutAgreements/_files/agreement_active_with_html_content.php
15+
* @magentoApiDataFixture Magento/CheckoutAgreements/_files/agreement_inactive_with_text_content.php
16+
*/
17+
public function testGetActiveAgreement()
18+
{
19+
$query =
20+
<<<QUERY
21+
{
22+
checkoutAgreements {
23+
agreement_id
24+
name
25+
content
26+
content_height
27+
checkbox_text
28+
is_html
29+
}
30+
}
31+
QUERY;
32+
33+
$response = $this->graphQlQuery($query);
34+
$this->assertArrayHasKey('checkoutAgreements', $response);
35+
$agreements = $response['checkoutAgreements'];
36+
$this->assertEquals(1, count($agreements));
37+
$this->assertEquals('Checkout Agreement (active)', $agreements[0]['name']);
38+
$this->assertEquals('Checkout agreement content: <b>HTML</b>', $agreements[0]['content']);
39+
$this->assertEquals('200px', $agreements[0]['content_height']);
40+
$this->assertEquals('Checkout agreement checkbox text.', $agreements[0]['checkbox_text']);
41+
$this->assertEquals(true, $agreements[0]['is_html']);
42+
}
43+
}

0 commit comments

Comments
 (0)