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', '', '', 'Tags should be stripped from textet field values submitted via GET to prevent XSS.', ], [ self::getField('First Name', 'text'), '%22%20onfocus=%22alert(123)', '', '', 'Inline JS values should not be allowed via GET to prevent XSS.', ], [ self::getField('Phone', 'tel'), '+41 123 456 7890', '', '', 'Phone number are populated properly', ], [ self::getField('Description', 'textarea'), '%22%2F%3E%3Cscript%3Ealert%280%29%3C%2Fscript%3E', '', '', 'Tags should be stripped from textarea field values submitted via GET to prevent XSS.', ], [ self::getField('Description', 'textarea'), '%22%20onfocus=%22alert(123)', '', '', 'Tags should be stripped from textarea field values submitted via GET to prevent XSS.', ], [ self::getField('Checkbox Single', 'checkboxgrp'), 'myvalue', '', '', 'Single value checkbox groups should have their values set appropriately via GET.', ], [ self::getField('Checkbox Multi', 'checkboxgrp'), 'myvalue%7Calsomyvalue', '', '', 'Multi-value checkbox groups should have their values set appropriately via GET.', ], [ self::getField('Radio Single', 'radiogrp'), 'myvalue', '', '', 'Single value radio groups should have their values set appropriately via GET.', ], [ self::getField('Select', 'select'), 'myvalue', '', '', '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)); } }