trait FieldUiAssertTrait

Provides assertions and helpers for Field UI test classes.

Hierarchy

1 file declares its use of FieldUiAssertTrait
ManageFieldsTest.php in core/modules/field_ui/tests/src/Kernel/ManageFieldsTest.php

File

core/modules/field_ui/tests/src/Traits/FieldUiAssertTrait.php, line 10

Namespace

Drupal\Tests\field_ui\Traits
View source
trait FieldUiAssertTrait {
  
  /**
   * Helper function that returns the name of the group that a field is in.
   *
   * @param string $field_type
   *   The name of the field type.
   *
   * @return string|null
   *   Group name
   */
  protected function getFieldFromGroup($field_type) : ?string {
    /** @var \Drupal\Core\Field\FieldTypePluginManagerInterface $field_type_plugin_manager */
    $field_type_plugin_manager = \Drupal::service('plugin.manager.field.field_type');
    $grouped_field_types = $field_type_plugin_manager->getGroupedDefinitions($field_type_plugin_manager->getUiDefinitions());
    foreach ($grouped_field_types as $group => $field_types) {
      if (array_key_exists($field_type, $field_types)) {
        return $group;
      }
    }
    return NULL;
  }
  
  /**
   * Asserts that the field appears on the overview form.
   *
   * @param string $label
   *   The field label.
   *
   * @throws \Behat\Mink\Exception\ElementNotFoundException
   */
  protected function assertFieldExistsOnOverview(string $label) : void {
    $field_labels = array_map(fn($element): string => html_entity_decode($element->getHtml()), $this->getSession()
      ->getPage()
      ->findAll('css', 'table#field-overview tr td:first-child .field-label-text'));
    $this->assertContains($label, $field_labels);
  }
  
  /**
   * Asserts that the field does not appear on the overview form.
   *
   * @param string $label
   *   The field label.
   */
  protected function assertFieldDoesNotExistOnOverview(string $label) : void {
    $xpath = $this->assertSession()
      ->buildXPathQuery("//table[@id=\"field-overview\"]//tr/td[1 and text() = :label]", [
      ':label' => $label,
    ]);
    $element = $this->getSession()
      ->getPage()
      ->find('xpath', $xpath);
    $this->assertSession()
      ->assert($element === NULL, sprintf('A field "%s" appears on this page, but it should not.', $label));
  }
  
  /**
   * Asserts that a header cell appears on a table.
   *
   * @param string $table_id
   *   The HTML attribute value to target a given table.
   * @param string $label
   *   The cell label.
   */
  protected function assertTableHeaderExistsByLabel(string $table_id, string $label) : void {
    $expression = '//table[@id=:id]//tr//th[1 and text() = :label]';
    $xpath = $this->assertSession()
      ->buildXPathQuery($expression, [
      ':id' => $table_id,
      ':label' => $label,
    ]);
    $element = $this->getSession()
      ->getPage()
      ->find('xpath', $xpath);
    $this->assertSession()
      ->assert($element !== NULL, sprintf('Table header not found by label: "%s".', $label));
  }

}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.