diff --git a/lib/Form/Renderer.php b/lib/Form/Renderer.php
index 56f32a3155..310ac9b2ac 100644
--- a/lib/Form/Renderer.php
+++ b/lib/Form/Renderer.php
@@ -64,7 +64,7 @@ class Renderer {
}
private function renderHoneypot(): string {
- return '';
+ return '';
}
private function renderReCaptcha(): string {
diff --git a/tests/unit/Form/HtmlParser.php b/tests/unit/Form/HtmlParser.php
new file mode 100644
index 0000000000..b3cc09ff70
--- /dev/null
+++ b/tests/unit/Form/HtmlParser.php
@@ -0,0 +1,12 @@
+loadHTML($html);
+ $value = (new \DOMXPath($dom))->query($xpath);
+ return $value ?: new \DOMNodeList();
+ }
+}
diff --git a/tests/unit/Form/RendererTest.php b/tests/unit/Form/RendererTest.php
new file mode 100644
index 0000000000..9262058c6a
--- /dev/null
+++ b/tests/unit/Form/RendererTest.php
@@ -0,0 +1,100 @@
+stylesMock = $this->createMock(Styles::class);
+ $this->settingsMock = $this->createMock(SettingsController::class);
+ $this->blocksRendererMock = $this->createMock(BlocksRenderer::class);
+ $this->renderer = new Renderer($this->stylesMock, $this->settingsMock, $this->blocksRendererMock);
+ $this->htmlParser = new HtmlParser();
+ }
+
+ public function testItShouldRenderBlocks() {
+ $this->blocksRendererMock
+ ->expects($this->exactly(2))
+ ->method('renderBlock')
+ ->willReturn('
Dummy
');
+ $this->settingsMock
+ ->method('get')
+ ->with('captcha.type')
+ ->willReturn(Captcha::TYPE_DISABLED);
+ $html = $this->renderer->renderBlocks(Fixtures::get('simple_form_body'));
+ $blocks = $this->htmlParser->findByXpath($html, "//div[@class='block']");
+ expect($blocks->count())->equals(2);
+ }
+
+ public function testItShouldRenderHoneypot() {
+ $this->blocksRendererMock->method('renderBlock')->willReturn('Dummy
');
+ $this->settingsMock
+ ->method('get')
+ ->with('captcha.type')
+ ->willReturn(Captcha::TYPE_DISABLED);
+ $html = $this->renderer->renderBlocks(Fixtures::get('simple_form_body'));
+ $hpLabel = $this->htmlParser->findByXpath($html, "//label[@class='mailpoet_hp_email_label']");
+ expect($hpLabel->count())->equals(1);
+ $hpInput = $this->htmlParser->findByXpath($html, "//input[@type='email']");
+ expect($hpInput->count())->equals(1);
+ }
+
+ public function testItShouldRenderReCaptcha() {
+ $token = '123456';
+ $this->blocksRendererMock->method('renderBlock')->willReturn('Dummy
');
+ $this->settingsMock
+ ->method('get')
+ ->will($this->returnValueMap([
+ ['captcha.type', null, Captcha::TYPE_RECAPTCHA],
+ ['captcha.recaptcha_site_token', null, $token],
+ ]));
+ $html = $this->renderer->renderBlocks(Fixtures::get('simple_form_body'));
+ $recaptcha = $this->htmlParser->findByXpath($html, "//div[@class='mailpoet_recaptcha']");
+ expect($recaptcha->count())->equals(1);
+ $recaptchaIframes = $this->htmlParser->findByXpath($html, "//iframe");
+ expect($recaptchaIframes->count())->equals(1);
+ $iframe = $recaptchaIframes->item(0);
+ assert($iframe instanceof \DOMNode);
+ $source = $iframe->attributes->getNamedItem('src');
+ assert($source instanceof \DOMAttr);
+ expect($source->value)->equals("https://www.google.com/recaptcha/api/fallback?k=$token");
+ }
+
+ public function testItShouldNotRenderHoneypotAndRecaptcha() {
+ $this->blocksRendererMock->method('renderBlock')->willReturn('Dummy
');
+ $this->settingsMock
+ ->method('get')
+ ->with('captcha.type')
+ ->willReturn(Captcha::TYPE_DISABLED);
+ $html = $this->renderer->renderBlocks(Fixtures::get('simple_form_body'), false);
+ $hpLabel = $this->htmlParser->findByXpath($html, "//label[@class='mailpoet_hp_email_label']");
+ expect($hpLabel->count())->equals(0);
+ $recaptcha = $this->htmlParser->findByXpath($html, "//div[@class='mailpoet_recaptcha']");
+ expect($recaptcha->count())->equals(0);
+ }
+}
diff --git a/tests/unit/_fixtures.php b/tests/unit/_fixtures.php
index 93123cd509..65029bc706 100644
--- a/tests/unit/_fixtures.php
+++ b/tests/unit/_fixtures.php
@@ -48,6 +48,36 @@ Fixtures::add(
]
);
+Fixtures::add(
+ 'simple_form_body',
+ [
+ [
+ 'id' => 'email',
+ 'name' => 'Email',
+ 'position' => '1',
+ 'type' => 'text',
+ 'unique' => '0',
+ 'static' => '1',
+ 'params' => [
+ 'label' => 'Email',
+ 'label_within' => '1',
+ 'required' => '1',
+ ],
+ ],
+ [
+ 'id' => 'submit',
+ 'name' => 'Submit',
+ 'position' => '2',
+ 'type' => 'submit',
+ 'unique' => '0',
+ 'static' => '1',
+ 'params' => [
+ 'label' => 'Subscribe!',
+ ],
+ ],
+ ]
+);
+
Fixtures::add(
'form_body_template',
[