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); } }