assertEquals(FORM_ELEMENTS_NATIVE, $build->getProcessFilter()); } /** * */ public function testGetFormId() { $build = new \qfq\BuildFormPlain(array(), array(), array()); $formId1 = $build->getFormId(); $this->assertRegExp('/qfq-form-[0-9a-f]{13}/', $formId1); $formId2 = $build->getFormId(); $this->assertEquals($formId1, $formId2); } public function testWrapItem() { $build = new \qfq\BuildFormPlain(array(), array(), array()); $result = $build->wrapItem(WRAP_SETUP_ELEMENT, 'Hello World', false); $this->assertEquals('
Hello World
', $result); $result = $build->wrapItem(WRAP_SETUP_ELEMENT, 'Hello World', true); $this->assertEquals('Hello World
', $result); $result = $build->wrapItem(WRAP_SETUP_ELEMENT, '', false); $this->assertEquals('', $result); $result = $build->wrapItem(WRAP_SETUP_ELEMENT, '', true); $this->assertEquals('', $result); } public function testBuildLabel() { $build = new \qfq\BuildFormPlain(array(), array(), array()); $result = $build->buildLabel('myLabel:123', "Hello World"); $this->assertEquals('', $result); } public function testBuildInput() { $form = array(); $formElement = array(); $json = array(); $this->setFormFormElement($form, $formElement); $build = new \qfq\BuildFormPlain($form, array(), [$formElement]); // $formElement = $this->db->sql("SELECT * FROM FormElement AS fe WHERE fe.id=114", ROW_EXACT_1); // $this->assertEquals('', $formElement); // $formElement = [ // 'id' => 123, // 'formId' => 2, // 'feIdContainer' => 0, // 'enabled' => 'yes', // 'name' => 'name', // 'label' => 'Name', // 'mode' => 'show', // 'class' => 'native', // 'type' => 'input', // 'value' => '', // 'sql1' => '', // 'parameter' => '', // 'debug' => 'no', // 'deleted' => 'no', // // 'size' => '', // 'maxLength' => '', // 'tooltip' => '', // 'placeholder' => '', // 'checkType' => '', // 'checkPattern' => '', // // 'tabindex' => 0 // ]; // Defaults $result = $build->buildInput($formElement, 'name:1', '', $json); $this->assertEquals('', $result); $this->assertEquals(['form-element' => 'name:1', 'value' => '', 'disabled' => false, 'readonly' => false], $json); // CheckType $formElement['checkType'] = SANITIZE_ALLOW_MIN_MAX; $formElement['checkPattern'] = '1|10'; $result = $build->buildInput($formElement, 'name:1', '', $json); $this->assertEquals('', $result); $this->assertEquals(['form-element' => 'name:1', 'value' => '', 'disabled' => false, 'readonly' => false], $json); $formElement['checkType'] = SANITIZE_ALLOW_PATTERN; $formElement['checkPattern'] = '^[a-z]*$'; $result = $build->buildInput($formElement, 'name:1', '', $json); $this->assertEquals('', $result); $this->assertEquals(['form-element' => 'name:1', 'value' => '', 'disabled' => false, 'readonly' => false], $json); $formElement['checkType'] = SANITIZE_ALLOW_DIGIT; $formElement['checkPattern'] = ''; $result = $build->buildInput($formElement, 'name:1', '', $json); $this->assertEquals('', $result); $this->assertEquals(['form-element' => 'name:1', 'value' => '', 'disabled' => false, 'readonly' => false], $json); $formElement['checkType'] = SANITIZE_ALLOW_EMAIL; $formElement['checkPattern'] = ''; $result = $build->buildInput($formElement, 'name:1', '', $json); $this->assertEquals('', $result); $this->assertEquals(['form-element' => 'name:1', 'value' => '', 'disabled' => false, 'readonly' => false], $json); $formElement['checkType'] = ''; $formElement['checkPattern'] = ''; // Explizit size $formElement['size'] = 40; $formElement['maxLength'] = 40; $result = $build->buildInput($formElement, 'name:1', '', $json); $this->assertEquals('', $result); $this->assertEquals(['form-element' => 'name:1', 'value' => '', 'disabled' => false, 'readonly' => false], $json); // maxlength bigger than physical spec: $formElement['maxLength'] = 1000; $result = $build->buildInput($formElement, 'name:1', '', $json); $this->assertEquals('', $result); $this->assertEquals(['form-element' => 'name:1', 'value' => '', 'disabled' => false, 'readonly' => false], $json); // Explicit: further $formElement['tooltip'] = 'Nice Tooltip'; $formElement['placeholder'] = 'Please type a name'; $result = $build->buildInput($formElement, 'name:1', 'Hello World', $json); $this->assertEquals('', $result); $this->assertEquals(['form-element' => 'name:1', 'value' => 'Hello World', 'disabled' => false, 'readonly' => false], $json); // textarea $formElement['size'] = '40,10'; $result = $build->buildInput($formElement, 'name:1', 'Hello World', $json); $this->assertEquals('', $result); $this->assertEquals(['form-element' => 'name:1', 'value' => 'Hello World', 'disabled' => false, 'readonly' => false], $json); $formElement['size'] = ' 40 , 10 '; $result = $build->buildInput($formElement, 'name:1', 'Hello World', $json); $this->assertEquals('', $result); $this->assertEquals(['form-element' => 'name:1', 'value' => 'Hello World', 'disabled' => false, 'readonly' => false], $json); } private function setFormFormElement(array &$form, array &$formElement) { $form = [ 'id' => '1', 'name' => 'form', 'title' => 'Form Editor: {{SELECT id, " / ", title FROM Form WHERE id => {{recordId:S0}}}}', 'noteInternal' => 'Please secure the form', 'tableName' => 'Form', 'permitNew' => 'always', 'permitEdit' => 'always', 'permitUrlParameter' => '', 'render' => 'bootstrap', 'multiMode' => 'none', 'multiSql' => '', 'multiDetailForm' => '', 'multiDetailFormParameter' => '', 'forwardMode' => 'auto', 'forwardPage' => '', 'bsLabelColumns' => '', 'bsInputColumns' => '', 'bsNoteColumns' => '', 'parameter' => 'maxVisiblePill=>3', 'deleted' => 'no' ]; $formElement = [ 'id' => 123, 'formId' => 1, 'feIdContainer' => 0, 'dynamicUpdate' => 'no', 'enabled' => 'yes', 'name' => 'name', 'label' => 'Name', FE_MODE => 'show', 'class' => 'native', FE_TYPE => 'input', 'value' => '', 'sql1' => '', 'parameter' => '', 'debug' => 'no', 'deleted' => 'no', 'size' => '', 'maxLength' => '', 'tooltip' => '', 'placeholder' => '', 'checkType' => '', 'checkPattern' => '', 'tabindex' => 0 ]; } /** * @expectedException \qfq\UserFormException * */ public function testBuildInputException() { $form = array(); $formElement = array(); $json = array(); $this->setFormFormElement($form, $formElement); $build = new \qfq\BuildFormPlain($form, array(), [$formElement]); $formElement['checkType'] = SANITIZE_ALLOW_MIN_MAX; $formElement['checkPattern'] = ''; $result = $build->buildInput($formElement, 'name:1', '', $json); } public function testGetKeyValueListFromSqlEnumSpec() { $form = array(); $formElement = array(); $this->setFormFormElement($form, $formElement); $formElement['name'] = 'deleted'; $build = new \qfq\BuildFormPlain($form, array(), [$formElement]); $keys = array(); $values = array(); // Spec Enum $expect = ['yes', 'no']; $build->getKeyValueListFromSqlEnumSpec($formElement, $keys, $values); $this->assertEquals($expect, $keys); $this->assertEquals($expect, $values); // Spec Enum + emptyItemAtStart $expect = ['', 'yes', 'no']; $formElement['emptyItemAtStart'] = ''; $build->getKeyValueListFromSqlEnumSpec($formElement, $keys, $values); $this->assertEquals($expect, $keys); $this->assertEquals($expect, $values); // Spec Enum + emptyItemAtEnd $expect = ['', 'yes', 'no', '']; $formElement['emptyItemAtEnd'] = ''; $build->getKeyValueListFromSqlEnumSpec($formElement, $keys, $values); $this->assertEquals($expect, $keys); $this->assertEquals($expect, $values); // clean unset($formElement['emptyItemAtStart']); unset($formElement['emptyItemAtEnd']); // listItem: only value $expect = ['a', 'b', 'c']; $formElement['itemList'] = 'a,b,c'; $build->getKeyValueListFromSqlEnumSpec($formElement, $keys, $values); $this->assertEquals($expect, $keys); $this->assertEquals($expect, $values); // listItem: key/value $expectKeys = ['A', 'B', 'C']; $expectValues = ['a', 'b', 'c']; $formElement['itemList'] = 'A:a,B:b,C:c'; $build->getKeyValueListFromSqlEnumSpec($formElement, $keys, $values); $this->assertEquals($expectKeys, $keys); $this->assertEquals($expectValues, $values); // listItem: key/value + emptyItemAtEnd $formElement['emptyItemAtEnd'] = ''; $expectKeys = ['A', 'B', 'C', '']; $expectValues = ['a', 'b', 'c', '']; $build->getKeyValueListFromSqlEnumSpec($formElement, $keys, $values); $this->assertEquals($expectKeys, $keys); $this->assertEquals($expectValues, $values); unset($formElement['emptyItemAtEnd']); // SQL $formElement['sql1'] = $this->db->sql('SELECT name FROM Form AS f ORDER BY f.id LIMIT 3'); $expect = ['form', 'formElement', 'phpunit_person']; $build->getKeyValueListFromSqlEnumSpec($formElement, $keys, $values); $this->assertEquals($expect, $keys); $this->assertEquals($expect, $values); // SQL (one column, no keyword) + emptyItemAtStart $formElement['emptyItemAtStart'] = ''; $formElement['sql1'] = $this->db->sql('SELECT name FROM Form AS f ORDER BY f.id LIMIT 3'); $expect = ['', 'form', 'formElement', 'phpunit_person']; $build->getKeyValueListFromSqlEnumSpec($formElement, $keys, $values); $this->assertEquals($expect, $keys); $this->assertEquals($expect, $values); unset($formElement['emptyItemAtStart']); // SQL (4 columns, none 'id' nor 'label') - Take the first two columns $expectKeys = ['10', '20', '30']; $expectValues = ['basic', 'permission', 'various']; $formElement['sql1'] = $this->db->sql('SELECT ord, name, created, modified FROM FormElement AS fe ORDER BY fe.id LIMIT 3'); $build->getKeyValueListFromSqlEnumSpec($formElement, $keys, $values); $this->assertEquals($expectKeys, $keys); $this->assertEquals($expectValues, $values); // SQL (4 columns, none 'id', one 'label' ) - Take the first and the fourth two columns $expectKeys = ['10', '20', '30']; $expectValues = ['basic', 'permission', 'various']; $formElement['sql1'] = $this->db->sql('SELECT ord, created, modified, name AS label FROM FormElement AS fe ORDER BY fe.id LIMIT 3'); $build->getKeyValueListFromSqlEnumSpec($formElement, $keys, $values); $this->assertEquals($expectKeys, $keys); $this->assertEquals($expectValues, $values); // SQL (4 columns, none 'id', one 'label' ) - Take the first and the fourth two columns $expectKeys = ['1', '2', '3']; $expectValues = ['basic', 'permission', 'various']; $formElement['sql1'] = $this->db->sql('SELECT ord, created, modified, name AS label, id FROM FormElement AS fe ORDER BY fe.id LIMIT 3'); $build->getKeyValueListFromSqlEnumSpec($formElement, $keys, $values); $this->assertEquals($expectKeys, $keys); $this->assertEquals($expectValues, $values); } /** * @expectedException \qfq\UserFormException * */ public function testGetKeyValueListFromSqlEnumSpecException() { $form = array(); $formElement = array(); $this->setFormFormElement($form, $formElement); $build = new \qfq\BuildFormPlain($form, array(), [$formElement]); $formElement['name'] = 'noteInternal'; $build->getKeyValueListFromSqlEnumSpec($formElement, $keys, $values); } /** * @throws Exception */ protected function setUp() { $_GET['form'] = 'phpunit_person'; parent::setUp(); $this->executeSQLFile(__DIR__ . '/fixtures/Generic.sql', true); // $this->executeSQLFile(__DIR__ . '/fixtures/TestFormEditor.sql', true); $GLOBALS["TSFE"] = new FakeTSFE(); // $this->form = new \qfq\QuickFormQuery(['bodytext' => "form=form\nr=3", 'uid' => 1234], true); $form = new \qfq\QuickFormQuery(['bodytext' => "form=form\nr=3", 'uid' => 1234], true); // this is necessary to initialize SIP // $content = $this->form->process(); $form->process(); } } class FakeTSFE { public $id = 1; public $type = 1; public $sys_language_uid = 1; }