Test: No subscription made when before_subscribe hook throws error

This commit is contained in:
David Remer
2022-01-28 08:42:16 +02:00
committed by Veljko V
parent 6ad48a116e
commit 83490540df

View File

@@ -157,6 +157,78 @@ class SubscriberSubscribeControllerUnitTest extends \MailPoetUnitTest {
]); ]);
} }
public function testNoSubscriptionWhenActionHookBeforeSubscriptionThrowsError() {
$subscriptionCaptcha = Stub::makeEmpty(Captcha::class);
$captchaSession = Stub::makeEmpty(CaptchaSession::class);
$subscriberActions = Stub::makeEmpty(
SubscriberActions::class,
[
'subscribe' => Expected::never(),
]
);
$subscriptionUrlFactory = Stub::makeEmpty(SubscriptionUrlFactory::class);
$throttling = Stub::makeEmpty(SubscriptionThrottling::class);
$fieldNameObfuscator = Stub::makeEmpty(FieldNameObfuscator::class,
[
'deobfuscateFormPayload' => function($data) { return $data;
},
]);
$requiredCustomFieldValidator = Stub::makeEmpty(RequiredCustomFieldValidator::class);
$settings = Stub::makeEmpty(SettingsController::class);
$submitData = [];
$segmentIds = [1];
$form = Stub::makeEmpty(
FormEntity::class,
[
'getSettingsSegmentIds' => function() use ($segmentIds): array {
return $segmentIds;
},
]
);
$formsRepository = Stub::makeEmpty(
FormsRepository::class,
[
'findOneById' => function() use ($form): FormEntity {
return $form;
},
]
);
$statisticsFormsRepository = Stub::makeEmpty(
StatisticsFormsRepository::class,
[
'subscribe' => Expected::never(),
]
);
$wp = Stub::make(
WPFunctions::class,
[
'doAction' => function($hook) {
if ($hook === 'mailpoet_subscription_before_subscribe') {
throw new \MailPoet\UnexpectedValueException("Value not expected.");
}
},
],
$this
);
$testee = new SubscriberSubscribeController(
$subscriptionCaptcha,
$captchaSession,
$subscriberActions,
$subscriptionUrlFactory,
$throttling,
$fieldNameObfuscator,
$requiredCustomFieldValidator,
$settings,
$formsRepository,
$statisticsFormsRepository,
$wp
);
$this->expectException(UnexpectedValueException::class);
$testee->subscribe(array_merge(['form_id' => 1], $submitData));
}
public function testBuiltinCaptchaNotFilledOut() { public function testBuiltinCaptchaNotFilledOut() {
$captchaSessionId = 'captcha_session_id'; $captchaSessionId = 'captcha_session_id';