magento2-docker/dev/tests/api-functional/testsuite/Magento/GraphQl/Newsletter/Guest/SubscribeEmailToNewsletterT...

115 lines
3.0 KiB
PHP
Executable File

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\GraphQl\Newsletter\Guest;
use Exception;
use Magento\Newsletter\Model\ResourceModel\Subscriber as SubscriberResourceModel;
use Magento\TestFramework\Helper\Bootstrap;
use Magento\TestFramework\TestCase\GraphQlAbstract;
/**
* Test newsletter email subscription for guest
*/
class SubscribeEmailToNewsletterTest extends GraphQlAbstract
{
/**
* @var SubscriberResourceModel
*/
private $subscriberResource;
/**
* @inheritDoc
*/
protected function setUp(): void
{
$objectManager = Bootstrap::getObjectManager();
$this->subscriberResource = $objectManager->get(SubscriberResourceModel::class);
}
public function testAddEmailIntoNewsletterSubscription()
{
$query = $this->getQuery('guest@example.com');
$response = $this->graphQlMutation($query);
self::assertArrayHasKey('subscribeEmailToNewsletter', $response);
self::assertNotEmpty($response['subscribeEmailToNewsletter']);
self::assertEquals('SUBSCRIBED', $response['subscribeEmailToNewsletter']['status']);
}
public function testNewsletterSubscriptionWithIncorrectEmailFormat()
{
$query = $this->getQuery('guest.example.com');
$this->expectException(Exception::class);
$this->expectExceptionMessage('Enter a valid email address.' . "\n");
$this->graphQlMutation($query);
}
/**
* @magentoConfigFixture default_store newsletter/subscription/allow_guest_subscribe 0
*/
public function testNewsletterSubscriptionWithDisallowedGuestSubscription()
{
$query = $this->getQuery('guest@example.com');
$this->expectException(Exception::class);
$this->expectExceptionMessage(
'Guests can not subscribe to the newsletter. You must create an account to subscribe.' . "\n"
);
$this->graphQlMutation($query);
}
/**
* @magentoApiDataFixture Magento/Newsletter/_files/guest_subscriber.php
*/
public function testNewsletterSubscriptionWithAlreadySubscribedEmail()
{
$query = $this->getQuery('guest@example.com');
$this->expectException(Exception::class);
$this->expectExceptionMessage('This email address is already subscribed.' . "\n");
$this->graphQlMutation($query);
}
/**
* Returns a mutation query
*
* @param string $email
* @return string
*/
private function getQuery(string $email = ''): string
{
return <<<QUERY
mutation {
subscribeEmailToNewsletter(
email: "$email"
) {
status
}
}
QUERY;
}
/**
* @inheritDoc
*/
public function tearDown(): void
{
$this->subscriberResource
->getConnection()
->delete(
$this->subscriberResource->getMainTable()
);
parent::tearDown();
}
}