Update to Drupal 8.1.1. For more information, see https://www.drupal.org/node/2718713
This commit is contained in:
parent
c0a0d5a94c
commit
9eae24d844
669 changed files with 3873 additions and 1553 deletions
|
@ -5,9 +5,11 @@
|
|||
* Provides hook implementations for testing purposes.
|
||||
*/
|
||||
|
||||
use Drupal\taxonomy\VocabularyInterface;
|
||||
|
||||
/**
|
||||
* Implements hook_ENTITY_TYPE_presave() for taxonomy_vocabulary entities.
|
||||
*/
|
||||
function taxonomy_crud_taxonomy_vocabulary_presave(\Drupal\taxonomy\VocabularyInterface $vocabulary) {
|
||||
function taxonomy_crud_taxonomy_vocabulary_presave(VocabularyInterface $vocabulary) {
|
||||
$vocabulary->setThirdPartySetting('taxonomy_crud', 'foo', 'bar');
|
||||
}
|
||||
|
|
|
@ -0,0 +1,187 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- node
|
||||
- taxonomy
|
||||
- user
|
||||
id: test_filter_taxonomy_index_tid__non_existing_dependency
|
||||
label: test_filter_taxonomy_index_tid__non_existing_dependency
|
||||
module: views
|
||||
description: ''
|
||||
tag: ''
|
||||
base_table: node_field_data
|
||||
base_field: nid
|
||||
core: 8.x
|
||||
display:
|
||||
default:
|
||||
display_plugin: default
|
||||
id: default
|
||||
display_title: Master
|
||||
position: 1
|
||||
display_options:
|
||||
access:
|
||||
type: perm
|
||||
options:
|
||||
perm: 'access content'
|
||||
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: full
|
||||
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: '‹ Previous'
|
||||
next: 'Next ›'
|
||||
first: '« First'
|
||||
last: 'Last »'
|
||||
quantity: 9
|
||||
style:
|
||||
type: default
|
||||
options:
|
||||
grouping: { }
|
||||
row_class: ''
|
||||
default_row_class: true
|
||||
uses_fields: false
|
||||
row:
|
||||
type: fields
|
||||
options:
|
||||
inline: { }
|
||||
separator: ''
|
||||
hide_empty: false
|
||||
default_field_elements: true
|
||||
fields:
|
||||
title:
|
||||
id: title
|
||||
table: node_field_data
|
||||
field: title
|
||||
label: ''
|
||||
alter:
|
||||
alter_text: false
|
||||
make_link: false
|
||||
absolute: false
|
||||
trim: false
|
||||
word_boundary: false
|
||||
ellipsis: false
|
||||
strip_tags: false
|
||||
html: false
|
||||
hide_empty: false
|
||||
empty_zero: false
|
||||
relationship: none
|
||||
group_type: group
|
||||
admin_label: ''
|
||||
exclude: false
|
||||
element_type: ''
|
||||
element_class: ''
|
||||
element_label_type: ''
|
||||
element_label_class: ''
|
||||
element_label_colon: true
|
||||
element_wrapper_type: ''
|
||||
element_wrapper_class: ''
|
||||
element_default_classes: true
|
||||
empty: ''
|
||||
hide_alter_empty: true
|
||||
plugin_id: field
|
||||
entity_type: node
|
||||
entity_field: title
|
||||
filters:
|
||||
status:
|
||||
value: true
|
||||
table: node_field_data
|
||||
field: status
|
||||
id: status
|
||||
expose:
|
||||
operator: '0'
|
||||
group: 1
|
||||
plugin_id: boolean
|
||||
entity_type: node
|
||||
entity_field: status
|
||||
tid:
|
||||
id: tid
|
||||
table: taxonomy_index
|
||||
field: tid
|
||||
relationship: none
|
||||
group_type: group
|
||||
admin_label: ''
|
||||
operator: or
|
||||
value:
|
||||
- 3
|
||||
- 4
|
||||
group: 1
|
||||
exposed: false
|
||||
expose:
|
||||
operator_id: '0'
|
||||
label: ''
|
||||
description: ''
|
||||
use_operator: false
|
||||
operator: ''
|
||||
identifier: ''
|
||||
required: false
|
||||
remember: false
|
||||
multiple: false
|
||||
remember_roles:
|
||||
authenticated: authenticated
|
||||
reduce: false
|
||||
is_grouped: false
|
||||
group_info:
|
||||
label: ''
|
||||
description: ''
|
||||
identifier: ''
|
||||
optional: true
|
||||
widget: select
|
||||
multiple: false
|
||||
remember: false
|
||||
default_group: All
|
||||
default_group_multiple: { }
|
||||
group_items: { }
|
||||
reduce_duplicates: false
|
||||
type: select
|
||||
limit: true
|
||||
vid: tags
|
||||
hierarchy: true
|
||||
error_message: true
|
||||
plugin_id: taxonomy_index_tid
|
||||
sorts: { }
|
||||
header: { }
|
||||
footer: { }
|
||||
empty: { }
|
||||
relationships: { }
|
||||
arguments: { }
|
||||
page_1:
|
||||
display_plugin: page
|
||||
id: page_1
|
||||
display_title: Page
|
||||
position: 2
|
||||
display_options:
|
||||
display_extenders: { }
|
||||
path: test-filter-taxonomy-index-tid
|
151
core/modules/taxonomy/tests/src/Kernel/TermKernelTest.php
Normal file
151
core/modules/taxonomy/tests/src/Kernel/TermKernelTest.php
Normal file
|
@ -0,0 +1,151 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Tests\taxonomy\Kernel;
|
||||
|
||||
use Drupal\taxonomy\Entity\Term;
|
||||
use Drupal\KernelTests\KernelTestBase;
|
||||
use Drupal\taxonomy\Tests\TaxonomyTestTrait;
|
||||
|
||||
/**
|
||||
* Kernel tests for taxonomy term functions.
|
||||
*
|
||||
* @group taxonomy
|
||||
*/
|
||||
class TermKernelTest extends KernelTestBase {
|
||||
|
||||
use TaxonomyTestTrait;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static $modules = array( 'filter', 'taxonomy', 'text', 'user' );
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
$this->installConfig(array('filter'));
|
||||
$this->installEntitySchema('taxonomy_term');
|
||||
}
|
||||
|
||||
/**
|
||||
* Deleting terms should also remove related vocabulary.
|
||||
* Deleting an invalid term should silently fail.
|
||||
*/
|
||||
public function testTermDelete() {
|
||||
$vocabulary = $this->createVocabulary();
|
||||
$valid_term = $this->createTerm($vocabulary);
|
||||
// Delete a valid term.
|
||||
$valid_term->delete();
|
||||
$terms = entity_load_multiple_by_properties('taxonomy_term', array('vid' => $vocabulary->id()));
|
||||
$this->assertTrue(empty($terms), 'Vocabulary is empty after deletion');
|
||||
|
||||
// Delete an invalid term. Should not throw any notices.
|
||||
entity_delete_multiple('taxonomy_term', array(42));
|
||||
}
|
||||
|
||||
/**
|
||||
* Deleting a parent of a term with multiple parents does not delete the term.
|
||||
*/
|
||||
public function testMultipleParentDelete() {
|
||||
$vocabulary = $this->createVocabulary();
|
||||
$parent_term1 = $this->createTerm($vocabulary);
|
||||
$parent_term2 = $this->createTerm($vocabulary);
|
||||
$child_term = $this->createTerm($vocabulary);
|
||||
$child_term->parent = array($parent_term1->id(), $parent_term2->id());
|
||||
$child_term->save();
|
||||
$child_term_id = $child_term->id();
|
||||
|
||||
$parent_term1->delete();
|
||||
$term_storage = $this->container->get('entity.manager')->getStorage('taxonomy_term');
|
||||
$term_storage->resetCache(array($child_term_id));
|
||||
$child_term = Term::load($child_term_id);
|
||||
$this->assertTrue(!empty($child_term), 'Child term is not deleted if only one of its parents is removed.');
|
||||
|
||||
$parent_term2->delete();
|
||||
$term_storage->resetCache(array($child_term_id));
|
||||
$child_term = Term::load($child_term_id);
|
||||
$this->assertTrue(empty($child_term), 'Child term is deleted if all of its parents are removed.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test a taxonomy with terms that have multiple parents of different depths.
|
||||
*/
|
||||
public function testTaxonomyVocabularyTree() {
|
||||
// Create a new vocabulary with 6 terms.
|
||||
$vocabulary = $this->createVocabulary();
|
||||
$term = array();
|
||||
for ($i = 0; $i < 6; $i++) {
|
||||
$term[$i] = $this->createTerm($vocabulary);
|
||||
}
|
||||
|
||||
// Get the taxonomy storage.
|
||||
$taxonomy_storage = $this->container->get('entity.manager')->getStorage('taxonomy_term');
|
||||
|
||||
// Set the weight on $term[1] so it appears before $term[5] when fetching
|
||||
// the parents for $term[2], in order to test for a regression on
|
||||
// \Drupal\taxonomy\TermStorageInterface::loadAllParents().
|
||||
$term[1]->weight = -1;
|
||||
$term[1]->save();
|
||||
|
||||
// $term[2] is a child of 1 and 5.
|
||||
$term[2]->parent = array($term[1]->id(), $term[5]->id());
|
||||
$term[2]->save();
|
||||
// $term[3] is a child of 2.
|
||||
$term[3]->parent = array($term[2]->id());
|
||||
$term[3]->save();
|
||||
// $term[5] is a child of 4.
|
||||
$term[5]->parent = array($term[4]->id());
|
||||
$term[5]->save();
|
||||
|
||||
/**
|
||||
* Expected tree:
|
||||
* term[0] | depth: 0
|
||||
* term[1] | depth: 0
|
||||
* -- term[2] | depth: 1
|
||||
* ---- term[3] | depth: 2
|
||||
* term[4] | depth: 0
|
||||
* -- term[5] | depth: 1
|
||||
* ---- term[2] | depth: 2
|
||||
* ------ term[3] | depth: 3
|
||||
*/
|
||||
// Count $term[1] parents with $max_depth = 1.
|
||||
$tree = $taxonomy_storage->loadTree($vocabulary->id(), $term[1]->id(), 1);
|
||||
$this->assertEqual(1, count($tree), 'We have one parent with depth 1.');
|
||||
|
||||
// Count all vocabulary tree elements.
|
||||
$tree = $taxonomy_storage->loadTree($vocabulary->id());
|
||||
$this->assertEqual(8, count($tree), 'We have all vocabulary tree elements.');
|
||||
|
||||
// Count elements in every tree depth.
|
||||
foreach ($tree as $element) {
|
||||
if (!isset($depth_count[$element->depth])) {
|
||||
$depth_count[$element->depth] = 0;
|
||||
}
|
||||
$depth_count[$element->depth]++;
|
||||
}
|
||||
$this->assertEqual(3, $depth_count[0], 'Three elements in taxonomy tree depth 0.');
|
||||
$this->assertEqual(2, $depth_count[1], 'Two elements in taxonomy tree depth 1.');
|
||||
$this->assertEqual(2, $depth_count[2], 'Two elements in taxonomy tree depth 2.');
|
||||
$this->assertEqual(1, $depth_count[3], 'One element in taxonomy tree depth 3.');
|
||||
|
||||
/** @var \Drupal\taxonomy\TermStorageInterface $storage */
|
||||
$storage = \Drupal::entityManager()->getStorage('taxonomy_term');
|
||||
// Count parents of $term[2].
|
||||
$parents = $storage->loadParents($term[2]->id());
|
||||
$this->assertEqual(2, count($parents), 'The term has two parents.');
|
||||
|
||||
// Count parents of $term[3].
|
||||
$parents = $storage->loadParents($term[3]->id());
|
||||
$this->assertEqual(1, count($parents), 'The term has one parent.');
|
||||
|
||||
// Identify all ancestors of $term[2].
|
||||
$ancestors = $storage->loadAllParents($term[2]->id());
|
||||
$this->assertEqual(4, count($ancestors), 'The term has four ancestors including the term itself.');
|
||||
|
||||
// Identify all ancestors of $term[3].
|
||||
$ancestors = $storage->loadAllParents($term[3]->id());
|
||||
$this->assertEqual(5, count($ancestors), 'The term has five ancestors including the term itself.');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Tests\taxonomy\Kernel;
|
||||
|
||||
use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
|
||||
|
||||
/**
|
||||
* Tests term validation constraints.
|
||||
*
|
||||
* @group taxonomy
|
||||
*/
|
||||
class TermValidationTest extends EntityKernelTestBase {
|
||||
|
||||
/**
|
||||
* Modules to enable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = array('taxonomy');
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
$this->installEntitySchema('taxonomy_term');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the term validation constraints.
|
||||
*/
|
||||
public function testValidation() {
|
||||
$this->entityManager->getStorage('taxonomy_vocabulary')->create(array(
|
||||
'vid' => 'tags',
|
||||
'name' => 'Tags',
|
||||
))->save();
|
||||
$term = $this->entityManager->getStorage('taxonomy_term')->create(array(
|
||||
'name' => 'test',
|
||||
'vid' => 'tags',
|
||||
));
|
||||
$violations = $term->validate();
|
||||
$this->assertEqual(count($violations), 0, 'No violations when validating a default term.');
|
||||
|
||||
$term->set('name', $this->randomString(256));
|
||||
$violations = $term->validate();
|
||||
$this->assertEqual(count($violations), 1, 'Violation found when name is too long.');
|
||||
$this->assertEqual($violations[0]->getPropertyPath(), 'name.0.value');
|
||||
$field_label = $term->get('name')->getFieldDefinition()->getLabel();
|
||||
$this->assertEqual($violations[0]->getMessage(), t('%name: may not be longer than @max characters.', array('%name' => $field_label, '@max' => 255)));
|
||||
|
||||
$term->set('name', NULL);
|
||||
$violations = $term->validate();
|
||||
$this->assertEqual(count($violations), 1, 'Violation found when name is NULL.');
|
||||
$this->assertEqual($violations[0]->getPropertyPath(), 'name');
|
||||
$this->assertEqual($violations[0]->getMessage(), t('This value should not be null.'));
|
||||
$term->set('name', 'test');
|
||||
|
||||
$term->set('parent', 9999);
|
||||
$violations = $term->validate();
|
||||
$this->assertEqual(count($violations), 1, 'Violation found when term parent is invalid.');
|
||||
$this->assertEqual($violations[0]->getMessage(), format_string('The referenced entity (%type: %id) does not exist.', array('%type' => 'taxonomy_term', '%id' => 9999)));
|
||||
|
||||
$term->set('parent', 0);
|
||||
$violations = $term->validate();
|
||||
$this->assertEqual(count($violations), 0, 'No violations for parent id 0.');
|
||||
}
|
||||
}
|
Reference in a new issue