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