Show error in form if confirmation email fails
[MAILPOET-4736]
This commit is contained in:
committed by
Aschepikov
parent
ee83e4d748
commit
5a53406d33
@ -151,7 +151,7 @@ class SubscriberSubscribeController {
|
|||||||
*/
|
*/
|
||||||
$this->wp->doAction('mailpoet_subscription_before_subscribe', $data, $segmentIds, $form);
|
$this->wp->doAction('mailpoet_subscription_before_subscribe', $data, $segmentIds, $form);
|
||||||
|
|
||||||
[$subscriber] = $this->subscriberActions->subscribe($data, $segmentIds);
|
[$subscriber, $subscriptionMeta] = $this->subscriberActions->subscribe($data, $segmentIds);
|
||||||
|
|
||||||
if (!empty($captchaSettings['type']) && $captchaSettings['type'] === CaptchaConstants::TYPE_BUILTIN) {
|
if (!empty($captchaSettings['type']) && $captchaSettings['type'] === CaptchaConstants::TYPE_BUILTIN) {
|
||||||
// Captcha has been verified, invalidate the session vars
|
// Captcha has been verified, invalidate the session vars
|
||||||
@ -166,6 +166,12 @@ class SubscriberSubscribeController {
|
|||||||
// add tags to subscriber if they are filled
|
// add tags to subscriber if they are filled
|
||||||
$this->addTagsToSubscriber($formSettings['tags'] ?? [], $subscriber);
|
$this->addTagsToSubscriber($formSettings['tags'] ?? [], $subscriber);
|
||||||
|
|
||||||
|
// Confirmation email failed. We want to show the error message
|
||||||
|
if ($subscriptionMeta['confirmationEmailResult'] instanceof \Exception) {
|
||||||
|
$meta['error'] = $subscriptionMeta['confirmationEmailResult']->getMessage();
|
||||||
|
return $meta;
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($formSettings['on_success'])) {
|
if (!empty($formSettings['on_success'])) {
|
||||||
if ($formSettings['on_success'] === 'page') {
|
if ($formSettings['on_success'] === 'page') {
|
||||||
// redirect to a page on a success, pass the page url in the meta
|
// redirect to a page on a success, pass the page url in the meta
|
||||||
|
@ -91,6 +91,28 @@ class SubscriberSubscribeControllerTest extends \MailPoetTest {
|
|||||||
expect($subscriber->getStatus())->equals(SubscriberEntity::STATUS_UNCONFIRMED);
|
expect($subscriber->getStatus())->equals(SubscriberEntity::STATUS_UNCONFIRMED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testItReturnsInfoAboutErrorWhenConfirmationEmailFails(): void {
|
||||||
|
$confirmationEmailMailerMock = $this->createMock(ConfirmationEmailMailer::class);
|
||||||
|
$confirmationEmailMailerMock->method('sendConfirmationEmailOnce')
|
||||||
|
->willThrowException(new \Exception('Confirmation email error'));
|
||||||
|
$subscriberActions = $this->getServiceWithOverrides(SubscriberActions::class, ['confirmationEmailMailer' => $confirmationEmailMailerMock]);
|
||||||
|
$subscriberController = $this->getServiceWithOverrides(SubscriberSubscribeController::class, ['subscriberActions' => $subscriberActions]);
|
||||||
|
$segment = $this->segmentsRepository->createOrUpdate('Segment 1');
|
||||||
|
$form = $this->createForm($segment);
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
$this->obfuscatedEmail => 'subscriber' . rand(0, 10000) . '@example.com',
|
||||||
|
$this->obfuscatedSegments => [$segment->getId()],
|
||||||
|
'form_id' => $form->getId(),
|
||||||
|
];
|
||||||
|
$result = $subscriberController->subscribe($data);
|
||||||
|
|
||||||
|
$subscriber = $this->subscribersRepository->findOneBy(['email' => $data[$this->obfuscatedEmail]]);
|
||||||
|
$this->assertInstanceOf(SubscriberEntity::class, $subscriber);
|
||||||
|
expect($result)->hasKey('error');
|
||||||
|
expect($result['error'])->equals('Confirmation email error');
|
||||||
|
}
|
||||||
|
|
||||||
public function testItCanSubscribeSubscriberWithCustomField(): void {
|
public function testItCanSubscribeSubscriberWithCustomField(): void {
|
||||||
$this->settings->set('signup_confirmation.enabled', false);
|
$this->settings->set('signup_confirmation.enabled', false);
|
||||||
$segment = $this->segmentsRepository->createOrUpdate('Segment 1');
|
$segment = $this->segmentsRepository->createOrUpdate('Segment 1');
|
||||||
|
Reference in New Issue
Block a user