stylesMock = $this->createMock(Styles::class);
$this->settingsMock = $this->createMock(SettingsController::class);
$this->blocksRendererMock = $this->createMock(BlocksRenderer::class);
$this->customFonts = $this->createMock(CustomFonts::class);
$this->renderer = new Renderer($this->stylesMock, $this->settingsMock, $this->customFonts, $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(CaptchaConstants::TYPE_DISABLED);
$html = $this->renderer->renderBlocks(Fixtures::get('simple_form_body'));
$blocks = $this->htmlParser->findByXpath($html, "//div[@class='block']");
verify($blocks->length)->equals(2);
}
public function testItShouldRenderHoneypot() {
$this->blocksRendererMock->method('renderBlock')->willReturn('Dummy
');
$this->settingsMock
->method('get')
->with('captcha.type')
->willReturn(CaptchaConstants::TYPE_DISABLED);
$html = $this->renderer->renderBlocks(Fixtures::get('simple_form_body'));
$hpLabel = $this->htmlParser->findByXpath($html, "//label[@class='mailpoet_hp_email_label']");
verify($hpLabel->length)->equals(1);
$hpInput = $this->htmlParser->findByXpath($html, "//input[@type='email']");
verify($hpInput->length)->equals(1);
}
public function testItShouldRenderReCaptcha() {
$token = '123456';
$this->blocksRendererMock->method('renderBlock')->willReturn('Dummy
');
$this->settingsMock
->method('get')
->will($this->returnValueMap([
['captcha.type', null, CaptchaConstants::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']");
verify($recaptcha->length)->equals(1);
$recaptchaIframes = $this->htmlParser->findByXpath($html, "//iframe");
verify($recaptchaIframes->length)->equals(1);
$iframe = $recaptchaIframes->item(0);
$this->assertInstanceOf(\DOMNode::class, $iframe);
$this->assertInstanceOf(\DOMNamedNodeMap::class, $iframe->attributes);
$source = $iframe->attributes->getNamedItem('src');
$this->assertInstanceOf(\DOMAttr::class, $source);
verify($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(CaptchaConstants::TYPE_DISABLED);
$html = $this->renderer->renderBlocks(Fixtures::get('simple_form_body'), [], null, false);
$hpLabel = $this->htmlParser->findByXpath($html, "//label[@class='mailpoet_hp_email_label']");
verify($hpLabel->length)->equals(0);
$recaptcha = $this->htmlParser->findByXpath($html, "//div[@class='mailpoet_recaptcha']");
verify($recaptcha->length)->equals(0);
}
}