Refactor getCaptchaUrl to instance method

[MAILPOET-2381]
This commit is contained in:
Rostislav Wolny
2019-09-23 14:28:25 +02:00
committed by Jack Kitterhing
parent 3d78d6b550
commit 54632b20c2
4 changed files with 37 additions and 9 deletions

View File

@ -65,6 +65,9 @@ class Subscribers extends APIEndpoint {
/** @var ConfirmationEmailMailer; */ /** @var ConfirmationEmailMailer; */
private $confirmation_email_mailer; private $confirmation_email_mailer;
/** @var SubscriptionUrl */
private $subscription_url_factory;
public function __construct( public function __construct(
Listing\BulkActionController $bulk_action_controller, Listing\BulkActionController $bulk_action_controller,
SubscribersListings $subscribers_listings, SubscribersListings $subscribers_listings,
@ -75,7 +78,8 @@ class Subscribers extends APIEndpoint {
WPFunctions $wp, WPFunctions $wp,
SettingsController $settings, SettingsController $settings,
CaptchaSession $captcha_session, CaptchaSession $captcha_session,
ConfirmationEmailMailer $confirmation_email_mailer ConfirmationEmailMailer $confirmation_email_mailer,
SubscriptionUrl $subscription_url_factory
) { ) {
$this->bulk_action_controller = $bulk_action_controller; $this->bulk_action_controller = $bulk_action_controller;
$this->subscribers_listings = $subscribers_listings; $this->subscribers_listings = $subscribers_listings;
@ -87,6 +91,7 @@ class Subscribers extends APIEndpoint {
$this->settings = $settings; $this->settings = $settings;
$this->captcha_session = $captcha_session; $this->captcha_session = $captcha_session;
$this->confirmation_email_mailer = $confirmation_email_mailer; $this->confirmation_email_mailer = $confirmation_email_mailer;
$this->subscription_url_factory = $subscription_url_factory;
} }
function get($data = []) { function get($data = []) {
@ -279,7 +284,7 @@ class Subscribers extends APIEndpoint {
$is_builtin_captcha_required = $this->subscription_captcha->isRequired(isset($data['email']) ? $data['email'] : ''); $is_builtin_captcha_required = $this->subscription_captcha->isRequired(isset($data['email']) ? $data['email'] : '');
if ($is_builtin_captcha_required && empty($data['captcha'])) { if ($is_builtin_captcha_required && empty($data['captcha'])) {
$meta = []; $meta = [];
$meta['redirect_url'] = SubscriptionUrl::getCaptchaUrl(); $meta['redirect_url'] = $this->subscription_url_factory->getCaptchaUrl();
return $this->badRequest([ return $this->badRequest([
APIError::BAD_REQUEST => WPFunctions::get()->__('Please fill in the CAPTCHA.', 'mailpoet'), APIError::BAD_REQUEST => WPFunctions::get()->__('Please fill in the CAPTCHA.', 'mailpoet'),
], $meta); ], $meta);

View File

@ -10,8 +10,19 @@ use MailPoet\Subscribers\LinkTokens;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
class Url { class Url {
static function getCaptchaUrl() { /** @var WPFunctions */
$post = self::getPost(self::getSetting('subscription.pages.captcha')); private $wp;
/** @var SettingsController */
private $settings;
public function __construct(WPFunctions $wp, SettingsController $settings) {
$this->wp = $wp;
$this->settings = $settings;
}
function getCaptchaUrl() {
$post = self::getPost($this->settings->get('subscription.pages.captcha'));
return self::getSubscriptionUrl($post, 'captcha', null); return self::getSubscriptionUrl($post, 'captcha', null);
} }

View File

@ -29,6 +29,7 @@ use MailPoet\Subscribers\Source;
use MailPoet\Subscribers\SubscriberActions; use MailPoet\Subscribers\SubscriberActions;
use MailPoet\Subscription\Captcha; use MailPoet\Subscription\Captcha;
use MailPoet\Subscription\CaptchaSession; use MailPoet\Subscription\CaptchaSession;
use MailPoet\Subscription\Url;
use MailPoet\Util\Cookies; use MailPoet\Util\Cookies;
use MailPoet\WP\Functions; use MailPoet\WP\Functions;
@ -51,6 +52,8 @@ class SubscribersTest extends \MailPoetTest {
->willReturn('abcd'); ->willReturn('abcd');
$session = new Session($cookies_mock); $session = new Session($cookies_mock);
$container = ContainerWrapper::getInstance(); $container = ContainerWrapper::getInstance();
$settings = $container->get(SettingsController::class);
$wp = $container->get(Functions::class);
$this->captcha_session = new CaptchaSession($container->get(Functions::class), $session); $this->captcha_session = new CaptchaSession($container->get(Functions::class), $session);
$this->endpoint = new Subscribers( $this->endpoint = new Subscribers(
$container->get(BulkActionController::class), $container->get(BulkActionController::class),
@ -59,10 +62,11 @@ class SubscribersTest extends \MailPoetTest {
$container->get(RequiredCustomFieldValidator::class), $container->get(RequiredCustomFieldValidator::class),
$container->get(Handler::class), $container->get(Handler::class),
$container->get(Captcha::class), $container->get(Captcha::class),
$container->get(Functions::class), $wp,
$container->get(SettingsController::class), $settings,
$this->captcha_session, $this->captcha_session,
$container->get(ConfirmationEmailMailer::class) $container->get(ConfirmationEmailMailer::class),
new Url($wp, $settings)
); );
$obfuscator = new FieldNameObfuscator(); $obfuscator = new FieldNameObfuscator();
$this->obfuscatedEmail = $obfuscator->obfuscate('email'); $this->obfuscatedEmail = $obfuscator->obfuscate('email');

View File

@ -15,6 +15,13 @@ use MailPoet\WooCommerce\TransactionalEmails;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
class UrlTest extends \MailPoetTest { class UrlTest extends \MailPoetTest {
/** @var Url */
private $url;
/** @var SettingsController */
private $settings;
function _before() { function _before() {
parent::_before(); parent::_before();
$this->settings = new SettingsController; $this->settings = new SettingsController;
@ -23,12 +30,13 @@ class UrlTest extends \MailPoetTest {
$wc_transactional_emails = new TransactionalEmails(WPFunctions::get(), $this->settings); $wc_transactional_emails = new TransactionalEmails(WPFunctions::get(), $this->settings);
$populator = new Populator($this->settings, WPFunctions::get(), new Captcha, $referral_detector, $features_controller, $wc_transactional_emails); $populator = new Populator($this->settings, WPFunctions::get(), new Captcha, $referral_detector, $features_controller, $wc_transactional_emails);
$populator->up(); $populator->up();
$this->url = new Url(WPFunctions::get(), $this->settings);
} }
function testItReturnsTheDefaultPageUrlIfNoPageIsSetInSettings() { function testItReturnsTheDefaultPageUrlIfNoPageIsSetInSettings() {
$this->settings->delete('subscription'); $this->settings->delete('subscription');
$url = Url::getCaptchaUrl(); $url = $this->url->getCaptchaUrl();
expect($url)->notNull(); expect($url)->notNull();
expect($url)->contains('action=captcha'); expect($url)->contains('action=captcha');
expect($url)->contains('endpoint=subscription'); expect($url)->contains('endpoint=subscription');
@ -40,7 +48,7 @@ class UrlTest extends \MailPoetTest {
} }
function testItReturnsTheCaptchaUrl() { function testItReturnsTheCaptchaUrl() {
$url = Url::getCaptchaUrl(); $url = $this->url->getCaptchaUrl();
expect($url)->notNull(); expect($url)->notNull();
expect($url)->contains('action=captcha'); expect($url)->contains('action=captcha');
expect($url)->contains('endpoint=subscription'); expect($url)->contains('endpoint=subscription');