entity_hierarchy-8.x-2.24/tests/src/Functional/ForwardRevisionNodeValidationTest.php
tests/src/Functional/ForwardRevisionNodeValidationTest.php
<?php
namespace Drupal\Tests\entity_hierarchy\Functional;
use Drupal\entity_hierarchy\Plugin\Field\FieldWidget\EntityReferenceHierarchyAutocomplete;
use Drupal\node\Entity\Node;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\content_moderation\Traits\ContentModerationTestTrait;
use Drupal\Tests\entity_hierarchy\Traits\EntityHierarchyTestTrait;
/**
* Defines a class for testing the warnings on edit form.
*
* @group entity_hierarchy
*/
class ForwardRevisionNodeValidationTest extends BrowserTestBase {
use EntityHierarchyTestTrait;
use ContentModerationTestTrait;
const FIELD_NAME = 'parents';
const ENTITY_TYPE = 'node';
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* {@inheritdoc}
*/
protected static $modules = [
'entity_hierarchy',
'system',
'user',
'dbal',
'field',
'node',
'filter',
'options',
'content_moderation',
];
/**
* {@inheritdoc}
*/
protected function setUp(): void {
parent::setUp();
$content_type = $this->drupalCreateContentType([
'type' => 'article',
]);
$content_type->save();
$workflow = $this->createEditorialWorkflow();
$this->addEntityTypeAndBundleToWorkflow($workflow, static::ENTITY_TYPE, 'article');
$this->setupEntityHierarchyField(static::ENTITY_TYPE, 'article', static::FIELD_NAME);
$this->getEntityFormDisplay(static::ENTITY_TYPE, 'article', 'default')
->setComponent(self::FIELD_NAME, [
'type' => 'entity_reference_hierarchy_autocomplete',
'weight' => 20,
'settings' => ['hide_weight' => TRUE] + EntityReferenceHierarchyAutocomplete::defaultSettings(),
])
->save();
$this->additionalSetup();
}
/**
* Tests validation warning.
*/
public function testValidationWarning(): void {
$entities = $this->createChildEntities($this->parent->id());
$first_child = reset($entities);
$this->drupalLogin($this->drupalCreateUser(array_keys($this->container->get('user.permissions')
->getPermissions()), NULL, TRUE));
$this->drupalGet($this->parent->toUrl('edit-form'));
// Try to submit form with child as parent.
$this->submitForm([
sprintf('%s[0][target_id][target_id]', static::FIELD_NAME) => sprintf('%s (%s)', $first_child->label(), $first_child->id()),
], 'Save');
$assert = $this->assertSession();
$assert->pageTextContains(sprintf('This entity (node: %s) cannot be referenced as it is either a child or the same entity.', $first_child->id()));
// Remove parent in first child.
$this->drupalGet($first_child->toUrl('edit-form'));
$this->submitForm([
sprintf('%s[0][target_id][target_id]', static::FIELD_NAME) => '',
], 'Save');
// Try to submit form with first child as parent.
$this->drupalGet($this->parent->toUrl('edit-form'));
$this->submitForm([
sprintf('%s[0][target_id][target_id]', static::FIELD_NAME) => sprintf('%s (%s)', $first_child->label(), $first_child->id()),
], 'Save');
$assert = $this->assertSession();
$assert->pageTextNotContains(sprintf('This entity (node: %s) cannot be referenced as it is either a child or the same entity.', $first_child->id()));
}
/**
* {@inheritdoc}
*/
protected function createTestEntity($parentId, $label = 'Child 1', $weight = 0) {
$values = [
'type' => 'article',
'title' => $label,
'moderation_state' => 'published',
'status' => 1,
];
if ($parentId) {
$values[static::FIELD_NAME] = [
'target_id' => $parentId,
'weight' => $weight,
];
}
$entity = $this->doCreateTestEntity($values);
$entity->save();
return $entity;
}
/**
* {@inheritdoc}
*/
protected function doCreateTestEntity(array $values) {
$entity = Node::create($values);
return $entity;
}
}
