Verified Commit f4f57257 authored by Alex Pott's avatar Alex Pott
Browse files

Issue #3291520 by sardara, Ratan Priya, alexpott, smustgrave: Incorrect label...

Issue #3291520 by sardara, Ratan Priya, alexpott, smustgrave: Incorrect label in taxonomy glossary for terms that start with zero

(cherry picked from commit 5496d64a)
(cherry picked from commit 2277e2e1)
parent 2a2a13c3
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -954,8 +954,8 @@ public function summaryArgument($data) {
   *   The query results for the row.
   */
  public function summaryName($data) {
    $value = $data->{$this->name_alias};
    if (empty($value) && !empty($this->definition['empty field name'])) {
    $value = (string) $data->{$this->name_alias};
    if ($value === '' && isset($this->definition['empty field name'])) {
      $value = $this->definition['empty field name'];
    }
    return $value;
+134 −67
Original line number Diff line number Diff line
@@ -12,84 +12,34 @@ base_table: taxonomy_term_field_data
base_field: tid
display:
  default:
    display_plugin: default
    id: default
    display_title: Default
    display_plugin: default
    position: 0
    display_options:
      access:
        type: none
        options: {  }
      cache:
        type: tag
        options: {  }
      query:
        type: views_query
        options:
          disable_sql_rewrite: false
          distinct: false
          replica: false
          query_comment: ''
          query_tags: {  }
      exposed_form:
        type: basic
        options:
          submit_button: Apply
          reset_button: false
          reset_button_label: Reset
          exposed_sorts_label: 'Sort by'
          expose_sort_order: true
          sort_asc_label: Asc
          sort_desc_label: Desc
      pager:
        type: mini
        options:
          items_per_page: 10
          offset: 0
          id: 0
          total_pages: null
          expose:
            items_per_page: false
            items_per_page_label: 'Items per page'
            items_per_page_options: '5, 10, 25, 50'
            items_per_page_options_all: false
            items_per_page_options_all_label: '- All -'
            offset: false
            offset_label: Offset
          tags:
            previous: ‹‹
            next: ››
      style:
        type: default
      row:
        type: fields
      title: test_taxonomy_glossary
      fields:
        name:
          id: name
          table: taxonomy_term_field_data
          field: name
          relationship: none
          group_type: group
          admin_label: ''
          entity_type: taxonomy_term
          entity_field: name
          plugin_id: term_name
          label: ''
          exclude: false
          alter:
            alter_text: false
            make_link: false
            absolute: false
            trim: false
            word_boundary: false
            ellipsis: false
            strip_tags: false
            trim: false
            html: false
          hide_empty: false
          empty_zero: false
          type: string
          settings:
            link_to_entity: true
          plugin_id: term_name
          relationship: none
          group_type: group
          admin_label: ''
          exclude: false
          element_type: ''
          element_class: ''
          element_label_type: ''
@@ -99,8 +49,13 @@ display:
          element_wrapper_class: ''
          element_default_classes: true
          empty: ''
          hide_empty: false
          empty_zero: false
          hide_alter_empty: true
          click_sort_column: value
          type: string
          settings:
            link_to_entity: true
          group_column: value
          group_columns: {  }
          group_rows: true
@@ -112,13 +67,42 @@ display:
          separator: ', '
          field_api_classes: false
          convert_spaces: false
      filters: {  }
      sorts: {  }
      title: test_taxonomy_glossary
      header: {  }
      footer: {  }
      pager:
        type: mini
        options:
          offset: 0
          items_per_page: 10
          total_pages: null
          id: 0
          tags:
            next: ››
            previous: ‹‹
          expose:
            items_per_page: false
            items_per_page_label: 'Items per page'
            items_per_page_options: '5, 10, 25, 50'
            items_per_page_options_all: false
            items_per_page_options_all_label: '- All -'
            offset: false
            offset_label: Offset
      exposed_form:
        type: basic
        options:
          submit_button: Apply
          reset_button: false
          reset_button_label: Reset
          exposed_sorts_label: 'Sort by'
          expose_sort_order: true
          sort_asc_label: Asc
          sort_desc_label: Desc
      access:
        type: none
        options: {  }
      cache:
        type: tag
        options: {  }
      empty: {  }
      relationships: {  }
      sorts: {  }
      arguments:
        name:
          id: name
@@ -127,6 +111,9 @@ display:
          relationship: none
          group_type: group
          admin_label: ''
          entity_type: taxonomy_term
          entity_field: name
          plugin_id: string
          default_action: ignore
          exception:
            value: all
@@ -141,8 +128,8 @@ display:
          summary_options:
            base_path: ''
            count: true
            items_per_page: 25
            override: false
            items_per_page: 25
          summary:
            sort_order: asc
            number_of_records: 0
@@ -160,22 +147,102 @@ display:
          break_phrase: false
          add_table: false
          require_value: false
      filters: {  }
      style:
        type: default
      row:
        type: fields
      query:
        type: views_query
        options:
          query_comment: ''
          disable_sql_rewrite: false
          distinct: false
          replica: false
          query_tags: {  }
      relationships: {  }
      header: {  }
      footer: {  }
      display_extenders: {  }
    cache_metadata:
      max-age: -1
      contexts:
        - 'languages:language_content'
        - 'languages:language_interface'
        - url
        - url.query_args
      tags: {  }
  attachment_1:
    id: attachment_1
    display_title: Attachment
    display_plugin: attachment
    position: 2
    display_options:
      pager:
        type: none
        options:
          offset: 0
      arguments:
        name:
          id: name
          table: taxonomy_term_field_data
          field: name
          relationship: none
          group_type: group
          admin_label: ''
          entity_type: taxonomy_term
          entity_field: name
          plugin_id: string
          default_action: summary
          exception:
            value: all
            title_enable: false
            title: All
          title_enable: false
          title: ''
          default_argument_type: fixed
          default_argument_options:
            argument: ''
          default_argument_skip_url: false
          summary_options:
            base_path: ''
            count: true
            override: false
            items_per_page: 25
          summary:
            sort_order: asc
            number_of_records: 0
            format: default_summary
          specify_validation: true
          validate:
            type: none
            fail: 'not found'
          validate_options: {  }
          glossary: true
          limit: 1
          case: lower
          path_case: lower
          transform_dash: false
          break_phrase: false
          add_table: false
          require_value: false
      defaults:
        arguments: false
      display_extenders: {  }
      displays:
        default: default
        page_1: page_1
    cache_metadata:
      max-age: -1
      contexts:
        - 'languages:language_content'
        - 'languages:language_interface'
        - url
        - url.query_args
      tags: {  }
  page_1:
    display_plugin: page
    id: page_1
    display_title: Page
    display_plugin: page
    position: 1
    display_options:
      display_extenders: {  }
+34 −1
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@

namespace Drupal\Tests\views\Functional;

use Drupal\Core\Url;
use Drupal\Tests\taxonomy\Traits\TaxonomyTestTrait;

/**
@@ -39,6 +40,9 @@ class TaxonomyGlossaryTest extends ViewTestBase {
   */
  protected $taxonomyTerms;

  /**
   * {@inheritdoc}
   */
  protected function setUp($import_test_views = TRUE, $modules = ['views_test_config']): void {
    parent::setUp($import_test_views, $modules);

@@ -49,15 +53,44 @@ protected function setUp($import_test_views = TRUE, $modules = ['views_test_conf
    for ($i = 0; $i < 10; $i++) {
      $this->taxonomyTerms[] = $this->createTerm($vocabulary);
    }
    $this->taxonomyTerms[] = $this->createTerm($vocabulary, ['name' => '0' . $this->randomMachineName()]);
  }

  /**
   * Tests a taxonomy glossary view.
   */
  public function testTaxonomyGlossaryView() {
    $initials = [];
    foreach ($this->taxonomyTerms as $term) {
      $char = mb_strtolower(substr($term->label(), 0, 1));
      $initials += [$char => 0];
      $initials[$char]++;
    }

    $this->drupalGet('test_taxonomy_glossary');
    $assert_session = $this->assertSession();

    foreach ($initials as $char => $count) {
      $href = Url::fromUserInput('/test_taxonomy_glossary/' . $char)->toString();

      $xpath = $assert_session->buildXPathQuery('//a[@href=:href and normalize-space(text())=:label]', [
        ':href' => $href,
        ':label' => $char,
      ]);
      $link = $assert_session->elementExists('xpath', $xpath);

      // Assert that the expected number of results is indicated in the link.
      preg_match("/{$char} \(([0-9]+)\)/", $link->getParent()->getText(), $matches);
      $this->assertEquals($count, $matches[1]);
    }

    // Check that no other glossary links but the expected ones have been
    // rendered.
    $assert_session->elementsCount('xpath', '/ancestor::ul//a', count($initials), $link);

    // Go the taxonomy glossary page for the first term.
    $this->drupalGet('test_taxonomy_glossary/' . substr($this->taxonomyTerms[0]->getName(), 0, 1));
    $this->assertSession()->pageTextContains($this->taxonomyTerms[0]->getName());
    $assert_session->pageTextContains($this->taxonomyTerms[0]->getName());
  }

}