Namespace
  Drupal\Tests\entity_clone\Functional
File
  - 
              tests/src/Functional/EntityCloneContentRecursiveTest.php
    
   
  
    View source
  
  <?php
namespace Drupal\Tests\entity_clone\Functional;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\node\Entity\Node;
use Drupal\taxonomy\Entity\Term;
use Drupal\Tests\node\Functional\NodeTestBase;
class EntityCloneContentRecursiveTest extends NodeTestBase {
    use StringTranslationTrait;
    
    protected static $modules = [
        'entity_clone',
        'block',
        'node',
        'datetime',
    ];
    
    protected $defaultTheme = 'claro';
    
    protected $profile = 'standard';
    
    protected $permissions = [
        'bypass node access',
        'administer nodes',
        'clone node entity',
    ];
    
    protected $adminUser;
    
    protected function setUp() : void {
        parent::setUp();
        $this->adminUser = $this->drupalCreateUser($this->permissions);
        $this->drupalLogin($this->adminUser);
    }
    
    public function testContentEntityClone() {
        $term_title = $this->randomMachineName(8);
        $term = Term::create([
            'vid' => 'tags',
            'name' => $term_title,
        ]);
        $term->save();
        $node_title = $this->randomMachineName(8);
        $node = Node::create([
            'type' => 'article',
            'title' => $node_title,
            'field_tags' => [
                'target_id' => $term->id(),
            ],
        ]);
        $node->save();
        $settings = [
            'taxonomy_term' => [
                'default_value' => 1,
                'disable' => 0,
                'hidden' => 0,
            ],
        ];
        \Drupal::service('config.factory')->getEditable('entity_clone.settings')
            ->set('form_settings', $settings)
            ->save();
        $this->drupalGet('entity_clone/node/' . $node->id());
        $this->submitForm([
            'recursive[node.article.field_tags][references][' . $term->id() . '][clone]' => 1,
        ], $this->t('Clone'));
        $nodes = \Drupal::entityTypeManager()->getStorage('node')
            ->loadByProperties([
            'title' => $node_title . ' - Cloned',
        ]);
        
        $node = reset($nodes);
        $this->assertInstanceOf(Node::class, $node, 'Test node cloned found in database.');
        $terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')
            ->loadByProperties([
            'name' => $term_title . ' - Cloned',
        ]);
        
        $term = reset($terms);
        $this->assertInstanceOf(Term::class, $term, 'Test term referenced by node cloned too found in database.');
        $node->delete();
        $term->delete();
        $nodes = \Drupal::entityTypeManager()->getStorage('node')
            ->loadByProperties([
            'title' => $node_title,
        ]);
        $node = reset($nodes);
        $this->assertInstanceOf(Node::class, $node, 'Test original node found in database.');
        $terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')
            ->loadByProperties([
            'name' => $term_title,
        ]);
        $term = reset($terms);
        $this->assertInstanceOf(Term::class, $term, 'Test original term found in database.');
    }
}
 
Classes