function TermTest::testTermInterface
Same name in other branches
- 9 core/modules/taxonomy/tests/src/Functional/TermTest.php \Drupal\Tests\taxonomy\Functional\TermTest::testTermInterface()
- 8.9.x core/modules/taxonomy/tests/src/Functional/TermTest.php \Drupal\Tests\taxonomy\Functional\TermTest::testTermInterface()
- 10 core/modules/taxonomy/tests/src/Functional/TermTest.php \Drupal\Tests\taxonomy\Functional\TermTest::testTermInterface()
Save, edit and delete a term using the user interface.
File
-
core/
modules/ taxonomy/ tests/ src/ Functional/ TermTest.php, line 284
Class
- TermTest
- Tests load, save and delete for taxonomy terms.
Namespace
Drupal\Tests\taxonomy\FunctionalCode
public function testTermInterface() : void {
\Drupal::service('module_installer')->install([
'views',
]);
$edit = [
'name[0][value]' => $this->randomMachineName(12),
'description[0][value]' => $this->randomMachineName(100),
];
// Explicitly set the parents field to 'root', to ensure that
// TermForm::save() handles the invalid term ID correctly.
$edit['parent[]'] = [
0,
];
// Create the term to edit.
$this->drupalGet('admin/structure/taxonomy/manage/' . $this->vocabulary
->id() . '/add');
$this->submitForm($edit, 'Save');
// Ensure form redirected back to term add page.
$this->assertSession()
->addressEquals('admin/structure/taxonomy/manage/' . $this->vocabulary
->id() . '/add');
$terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')
->loadByProperties([
'name' => $edit['name[0][value]'],
]);
$term = reset($terms);
$this->assertNotNull($term, 'Term found in database.');
// Submitting a term takes us to the add page; we need the List page.
$this->drupalGet('admin/structure/taxonomy/manage/' . $this->vocabulary
->id() . '/overview');
$this->clickLink('Edit', 1);
// Verify that the randomly generated term is present.
$this->assertSession()
->pageTextContains($edit['name[0][value]']);
$this->assertSession()
->pageTextContains($edit['description[0][value]']);
// Test the "Add child" link on the overview page.
$this->drupalGet('admin/structure/taxonomy/manage/' . $this->vocabulary
->id() . '/overview');
$this->assertSession()
->linkExistsExact('Add child');
$this->clickLink('Add child');
$edit = [
'name[0][value]' => 'Child term',
];
$this->submitForm($edit, 'Save');
$terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')
->loadByProperties([
'name' => 'Child term',
]);
$child = reset($terms);
$this->assertNotNull($child, 'Child term found in database.');
$this->assertEquals($term->id(), $child->get('parent')
->getValue()[0]['target_id']);
// Edit the term.
$edit = [
'name[0][value]' => $this->randomMachineName(14),
'description[0][value]' => $this->randomMachineName(102),
];
$this->drupalGet('taxonomy/term/' . $term->id() . '/edit');
$this->submitForm($edit, 'Save');
// Ensure form redirected back to term view.
$this->assertSession()
->addressEquals('taxonomy/term/' . $term->id());
// Check that the term is still present at admin UI after edit.
$this->drupalGet('admin/structure/taxonomy/manage/' . $this->vocabulary
->id() . '/overview');
$this->assertSession()
->pageTextContains($edit['name[0][value]']);
$this->assertSession()
->linkExists('Edit');
// Unpublish the term.
$this->drupalGet('taxonomy/term/' . $term->id() . '/edit');
$this->submitForm([
"status[value]" => 0,
], 'Save');
// Check that the term is now unpublished in the list.
$this->drupalGet('admin/structure/taxonomy/manage/' . $this->vocabulary
->id() . '/overview');
$this->assertSession()
->elementTextContains('css', "#edit-terms-tid{$term->id()}0-status", 'Unpublished');
// Check the term link can be clicked through to the term page.
$this->clickLink($edit['name[0][value]']);
$this->assertSession()
->statusCodeEquals(200);
// View the term and check that it is correct.
$this->drupalGet('taxonomy/term/' . $term->id());
$this->assertSession()
->pageTextContains($edit['name[0][value]']);
$this->assertSession()
->pageTextContains($edit['description[0][value]']);
// Did this page request display a 'term-listing-heading'?
$this->assertSession()
->elementExists('xpath', '//div[@class="views-element-container"]/div/header/div/div/p');
// Check that it does NOT show a description when description is blank.
$term->setDescription(NULL);
$term->save();
$this->drupalGet('taxonomy/term/' . $term->id());
$this->assertSession()
->elementNotExists('xpath', '//div[@class="views-element-container"]/div/header/div/div/p');
// Check that the description value is processed.
$value = $this->randomMachineName();
$term->setDescription($value);
$term->save();
$this->assertSame("<p>{$value}</p>\n", (string) $term->description->processed);
// Check that the term feed page is working.
$this->drupalGet('taxonomy/term/' . $term->id() . '/feed');
// Delete the term.
$this->drupalGet('taxonomy/term/' . $term->id() . '/edit');
$this->clickLink('Delete');
$this->submitForm([], 'Delete');
// Assert that the term no longer exists.
$this->drupalGet('taxonomy/term/' . $term->id());
$this->assertSession()
->statusCodeEquals(404);
// Test "save and go to list" action while creating term.
// Create the term to edit.
$this->drupalGet('admin/structure/taxonomy/manage/' . $this->vocabulary
->id() . '/add');
$edit = [
'name[0][value]' => $this->randomMachineName(12),
'description[0][value]' => $this->randomMachineName(100),
];
// Create the term to edit.
$this->submitForm($edit, 'Save and go to list');
$this->assertSession()
->statusCodeEquals(200);
$this->assertSession()
->addressEquals('admin/structure/taxonomy/manage/' . $this->vocabulary
->id() . '/overview');
$this->assertSession()
->pageTextContains($edit['name[0][value]']);
// Validate that "Save and go to list" doesn't exist when destination
// parameter is present.
$this->drupalGet('admin/structure/taxonomy/manage/' . $this->vocabulary
->id() . '/add', [
'query' => [
'destination' => 'node/add',
],
]);
$this->assertSession()
->pageTextNotContains('Save and go to list');
// Validate that "Save and go to list" doesn't exist when missing permission
// 'access taxonomy overview'.
$this->drupalLogin($this->drupalCreateUser([
'administer taxonomy',
'bypass node access',
]));
$this->drupalGet('admin/structure/taxonomy/manage/' . $this->vocabulary
->id() . '/add');
$this->assertSession()
->pageTextNotContains('Save and go to list');
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.