Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / modules / taxonomy / tests / src / Functional / TaxonomyTermIndentationTest.php
1 <?php
2
3 namespace Drupal\Tests\taxonomy\Functional;
4
5 /**
6  * Ensure that the term indentation works properly.
7  *
8  * @group taxonomy
9  */
10 class TaxonomyTermIndentationTest extends TaxonomyTestBase {
11
12   /**
13    * Modules to enable.
14    *
15    * @var array
16    */
17   public static $modules = ['taxonomy'];
18
19   /**
20    * Vocabulary for testing.
21    *
22    * @var \Drupal\taxonomy\VocabularyInterface
23    */
24   protected $vocabulary;
25
26   protected function setUp() {
27     parent::setUp();
28     $this->drupalLogin($this->drupalCreateUser(['administer taxonomy', 'bypass node access']));
29     $this->vocabulary = $this->createVocabulary();
30   }
31
32   /**
33    * Tests term indentation.
34    */
35   public function testTermIndentation() {
36     $assert = $this->assertSession();
37     // Create three taxonomy terms.
38     $term1 = $this->createTerm($this->vocabulary);
39     $term2 = $this->createTerm($this->vocabulary);
40     $term3 = $this->createTerm($this->vocabulary);
41
42     // Get the taxonomy storage.
43     $taxonomy_storage = $this->container->get('entity.manager')->getStorage('taxonomy_term');
44
45     // Indent the second term under the first one.
46     $this->drupalGet('admin/structure/taxonomy/manage/' . $this->vocabulary->get('vid') . '/overview');
47     $hidden_edit = [
48       'terms[tid:' . $term2->id() . ':0][term][tid]' => 2,
49       'terms[tid:' . $term2->id() . ':0][term][parent]' => 1,
50       'terms[tid:' . $term2->id() . ':0][term][depth]' => 1,
51     ];
52     // Because we can't post hidden form elements, we have to change them in
53     // code here, and then submit.
54     foreach ($hidden_edit as $field => $value) {
55       $node = $assert->hiddenFieldExists($field);
56       $node->setValue($value);
57     }
58     $edit = [
59       'terms[tid:' . $term2->id() . ':0][weight]' => 1,
60     ];
61     // Submit the edited form and check for HTML indentation element presence.
62     $this->drupalPostForm(NULL, $edit, t('Save'));
63     $this->assertPattern('|<div class="js-indentation indentation">&nbsp;</div>|');
64
65     // Check explicitly that term 2's parent is term 1.
66     $parents = $taxonomy_storage->loadParents($term2->id());
67     $this->assertEqual(key($parents), 1, 'Term 1 is the term 2\'s parent');
68
69     // Move the second term back out to the root level.
70     $this->drupalGet('admin/structure/taxonomy/manage/' . $this->vocabulary->get('vid') . '/overview');
71     $hidden_edit = [
72       'terms[tid:' . $term2->id() . ':0][term][tid]' => 2,
73       'terms[tid:' . $term2->id() . ':0][term][parent]' => 0,
74       'terms[tid:' . $term2->id() . ':0][term][depth]' => 0,
75     ];
76     // Because we can't post hidden form elements, we have to change them in
77     // code here, and then submit.
78     foreach ($hidden_edit as $field => $value) {
79       $node = $assert->hiddenFieldExists($field);
80       $node->setValue($value);
81     }
82     $edit = [
83       'terms[tid:' . $term2->id() . ':0][weight]' => 1,
84     ];
85     $this->drupalPostForm(NULL, $edit, t('Save'));
86     // All terms back at the root level, no indentation should be present.
87     $this->assertSession()->responseNotMatches('|<div class="js-indentation indentation">&nbsp;</div>|');
88
89     // Check explicitly that term 2 has no parents.
90     \Drupal::entityManager()->getStorage('taxonomy_term')->resetCache();
91     $parents = $taxonomy_storage->loadParents($term2->id());
92     $this->assertTrue(empty($parents), 'Term 2 has no parents now');
93   }
94
95 }