Spaces:
No application file
No application file
| namespace Mautic\FormBundle\Tests\Helper; | |
| use Mautic\CoreBundle\Translation\Translator; | |
| use Mautic\FormBundle\Entity\Field; | |
| use Mautic\FormBundle\Helper\FormFieldHelper; | |
| use Symfony\Component\Validator\Validator\ValidatorInterface; | |
| class FormFieldHelperTest extends \PHPUnit\Framework\TestCase | |
| { | |
| /** | |
| * @var FormFieldHelper | |
| */ | |
| protected $fixture; | |
| protected function setUp(): void | |
| { | |
| $translatorMock = $this->getMockBuilder(Translator::class) | |
| ->disableOriginalConstructor() | |
| ->getMock(); | |
| $validatorMock = $this->getMockBuilder(ValidatorInterface::class) | |
| ->disableOriginalConstructor() | |
| ->getMock(); | |
| $this->fixture = new FormFieldHelper($translatorMock, $validatorMock); | |
| } | |
| /** | |
| * @dataProvider fieldProvider | |
| */ | |
| public function testPopulateField($field, $value, $formHtml, $expectedValue, $message): void | |
| { | |
| $this->fixture->populateField($field, $value, 'mautic', $formHtml); | |
| $this->assertEquals($expectedValue, $formHtml, $message); | |
| } | |
| /** | |
| * @return array | |
| */ | |
| public static function fieldProvider() | |
| { | |
| return [ | |
| [ | |
| self::getField('First Name', 'text'), | |
| '%22%2F%3E%3Cscript%3Ealert%280%29%3C%2Fscript%3E', | |
| '<input value="" id="mauticform_input_mautic_firstname" />', | |
| '<input id="mauticform_input_mautic_firstname" value=""/>alert(0)" />', | |
| 'Tags should be stripped from textet field values submitted via GET to prevent XSS.', | |
| ], | |
| [ | |
| self::getField('First Name', 'text'), | |
| '%22%20onfocus=%22alert(123)', | |
| '<input value="" id="mauticform_input_mautic_firstname" />', | |
| '<input id="mauticform_input_mautic_firstname" value="" onfocus="alert(123)" />', | |
| 'Inline JS values should not be allowed via GET to prevent XSS.', | |
| ], | |
| [ | |
| self::getField('Phone', 'tel'), | |
| '+41 123 456 7890', | |
| '<input value="" id="mauticform_input_mautic_phone" />', | |
| '<input id="mauticform_input_mautic_phone" value="+41 123 456 7890" />', | |
| 'Phone number are populated properly', | |
| ], | |
| [ | |
| self::getField('Description', 'textarea'), | |
| '%22%2F%3E%3Cscript%3Ealert%280%29%3C%2Fscript%3E', | |
| '<textarea id="mauticform_input_mautic_description"></textarea>', | |
| '<textarea id="mauticform_input_mautic_description">"/>alert(0)</textarea>', | |
| 'Tags should be stripped from textarea field values submitted via GET to prevent XSS.', | |
| ], | |
| [ | |
| self::getField('Description', 'textarea'), | |
| '%22%20onfocus=%22alert(123)', | |
| '<textarea id="mauticform_input_mautic_description"></textarea>', | |
| '<textarea id="mauticform_input_mautic_description">" onfocus="alert(123)</textarea>', | |
| 'Tags should be stripped from textarea field values submitted via GET to prevent XSS.', | |
| ], | |
| [ | |
| self::getField('Checkbox Single', 'checkboxgrp'), | |
| 'myvalue', | |
| '<input id="mauticform_checkboxgrp_checkbox_'.self::getAliasFromName('Checkbox Single').'1" value="myvalue"/><input id="mauticform_checkboxgrp_checkbox_'.self::getAliasFromName('Checkbox Single').'2" value="notmyvalue"/>', | |
| '<input id="mauticform_checkboxgrp_checkbox_'.self::getAliasFromName('Checkbox Single').'1" value="myvalue" checked /><input id="mauticform_checkboxgrp_checkbox_'.self::getAliasFromName('Checkbox Single').'2" value="notmyvalue"/>', | |
| 'Single value checkbox groups should have their values set appropriately via GET.', | |
| ], | |
| [ | |
| self::getField('Checkbox Multi', 'checkboxgrp'), | |
| 'myvalue%7Calsomyvalue', | |
| '<input id="mauticform_checkboxgrp_checkbox_'.self::getAliasFromName('Checkbox Multi').'1" value="myvalue"/><input id="mauticform_checkboxgrp_checkbox_'.self::getAliasFromName('Checkbox Multi').'2" value="alsomyvalue"/><input id="mauticform_checkboxgrp_checkbox_'.self::getAliasFromName('Checkbox Multi').'3" value="notmyvalue"/>', | |
| '<input id="mauticform_checkboxgrp_checkbox_'.self::getAliasFromName('Checkbox Multi').'1" value="myvalue" checked /><input id="mauticform_checkboxgrp_checkbox_'.self::getAliasFromName('Checkbox Multi').'2" value="alsomyvalue" checked /><input id="mauticform_checkboxgrp_checkbox_'.self::getAliasFromName('Checkbox Multi').'3" value="notmyvalue"/>', | |
| 'Multi-value checkbox groups should have their values set appropriately via GET.', | |
| ], | |
| [ | |
| self::getField('Radio Single', 'radiogrp'), | |
| 'myvalue', | |
| '<input id="mauticform_radiogrp_radio_'.self::getAliasFromName('Radio Single').'1" value="myvalue"/><input id="mauticform_radiogrp_radio_'.self::getAliasFromName('Radio Single').'1" value="notmyvalue"/>', | |
| '<input id="mauticform_radiogrp_radio_'.self::getAliasFromName('Radio Single').'1" value="myvalue" checked /><input id="mauticform_radiogrp_radio_'.self::getAliasFromName('Radio Single').'1" value="notmyvalue"/>', | |
| 'Single value radio groups should have their values set appropriately via GET.', | |
| ], | |
| [ | |
| self::getField('Select', 'select'), | |
| 'myvalue', | |
| '<select id="mauticform_input_mautic_select"><option value="myvalue">My Value</option></select>', | |
| '<select id="mauticform_input_mautic_select"><option value="myvalue" selected="selected">My Value</option></select>', | |
| 'Select lists should have their values set appropriately via GET.', | |
| ], | |
| ]; | |
| } | |
| /** | |
| * @param string $name | |
| * @param string $type | |
| * | |
| * @return Field | |
| */ | |
| protected static function getField($name, $type) | |
| { | |
| $field = new Field(); | |
| $field->setLabel($name); | |
| $field->setAlias(self::getAliasFromName($name)); | |
| $field->setType($type); | |
| return $field; | |
| } | |
| /** | |
| * @param string $name | |
| * | |
| * @return string | |
| */ | |
| private static function getAliasFromName($name) | |
| { | |
| return strtolower(str_replace(' ', '', $name)); | |
| } | |
| } | |