FilterTest - Add basic unit test for the 'defn="..."` injection
authorTim Otten <totten@civicrm.org>
Fri, 1 Nov 2019 20:14:33 +0000 (13:14 -0700)
committerCiviCRM <info@civicrm.org>
Wed, 16 Sep 2020 02:13:19 +0000 (19:13 -0700)
ext/afform/core/tests/phpunit/Civi/Afform/FilterTest.php [new file with mode: 0644]

diff --git a/ext/afform/core/tests/phpunit/Civi/Afform/FilterTest.php b/ext/afform/core/tests/phpunit/Civi/Afform/FilterTest.php
new file mode 100644 (file)
index 0000000..ec441c2
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+namespace Civi\Afform;
+
+use Civi\Test\HeadlessInterface;
+use Civi\Test\TransactionalInterface;
+
+/**
+ * Class FilterTest
+ *
+ * Ensure that the HTML post-processing/filtering works as expected.
+ *
+ * @package Civi\Afform
+ * @group headless
+ */
+class FilterTest extends \PHPUnit\Framework\TestCase implements HeadlessInterface, TransactionalInterface {
+
+  const PERSON_TPL = '<af-form ctrl="modelListCtrl" ><af-entity type="Contact" name="person" />%s</af-form>';
+
+  public function setUpHeadless() {
+    return \Civi\Test::headless()->installMe(__DIR__)->apply();
+  }
+
+  public function testDefnInjection() {
+    $inputHtml = sprintf(self::PERSON_TPL,
+      '<div af-fieldset="person"><af-field name="first_name" /></div>');
+    $filteredHtml = _afform_html_filter('~afform/MyForm.html', $inputHtml);
+    $converter = new \CRM_Afform_ArrayHtml(TRUE);
+    $parsed = $converter->convertHtmlToArray($filteredHtml);
+
+    $myField = $parsed[0]['#children'][1]['#children'][0];
+    $this->assertEquals('af-field', $myField['#tag']);
+    $this->assertEquals('First Name', $myField['defn']['title']);
+  }
+
+  public function testDefnInjectionNested() {
+    $inputHtml = sprintf(self::PERSON_TPL,
+      '<span><div af-fieldset="person"><foo><af-field name="first_name" /></foo></div></span>');
+    $filteredHtml = _afform_html_filter('~afform/MyForm.html', $inputHtml);
+    $converter = new \CRM_Afform_ArrayHtml(TRUE);
+    $parsed = $converter->convertHtmlToArray($filteredHtml);
+
+    $myField = $parsed[0]['#children'][1]['#children'][0]['#children'][0]['#children'][0];
+    $this->assertEquals('af-field', $myField['#tag']);
+    $this->assertEquals('First Name', $myField['defn']['title']);
+  }
+
+  //public function testDefnOverrideTitle() {
+  //  $inputHtml = sprintf(self::PERSON_TPL,
+  //    '<div af-fieldset="person"><af-field name="first_name" defn="{title: \'Given name\'}" /></div>');
+  //  $filteredHtml = _afform_html_filter('~afform/MyForm.html', $inputHtml);
+  //  $converter = new \CRM_Afform_ArrayHtml(TRUE);
+  //  $parsed = $converter->convertHtmlToArray($filteredHtml);
+  //
+  //  $myField = $parsed[0]['#children'][1]['#children'][0];
+  //  $this->assertEquals('af-field', $myField['#tag']);
+  //  $this->assertEquals('Given name', $myField['defn']['title']);
+  //}
+
+}