workbench_email-8.x-1.x-dev/tests/src/Kernel/ConfigDependenciesTest.php

tests/src/Kernel/ConfigDependenciesTest.php
<?php

namespace Drupal\Tests\workbench_email\Kernel;

use Drupal\field\Entity\FieldConfig;
use Drupal\KernelTests\KernelTestBase;
use Drupal\user\Entity\Role;
use Drupal\Tests\node\Traits\ContentTypeCreationTrait;
use Drupal\Tests\workbench_email\Traits\WorkbenchEmailTestTrait;
use Drupal\workbench_email\Entity\Template;

/**
 * Defines a class for testing config dependencies.
 *
 * @group workbench_email
 * @requires module workbench_moderation
 */
class ConfigDependenciesTest extends KernelTestBase {

  use ContentTypeCreationTrait;
  use WorkbenchEmailTestTrait;

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'node',
    'text',
    'system',
    'user',
    'workbench_email',
    'workbench_moderation',
    'field',
  ];

  /**
   * The template being tested.
   *
   * @var \Drupal\workbench_email\TemplateInterface
   */
  protected $template;

  /**
   * The editor role.
   *
   * @var \Drupal\user\Entity\Role
   */
  protected $editorRole;

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();
    $this->installEntitySchema('node');
    $this->installConfig([
      'node',
      'workbench_moderation',
      'workbench_email',
      'system',
    ]);
    $this->installEntitySchema('user');
    $node_type = $this->createContentType(['type' => 'test']);
    $this->setUpModerationForNodeType($node_type);
    $this->setUpEmailFieldForNodeBundle();
    $this->editorRole = Role::create(['id' => 'editor', 'label' => 'editor']);
    $this->editorRole->save();
    $this->template = $this->setUpTemplate();
  }

  /**
   * Tests scheme dependencies.
   */
  public function testSchemeDependencies(): void {
    $this->assertEquals([
      'config' => [
        'field.storage.node.field_email',
        'user.role.editor',
      ],
    ], $this->template->getDependencies());

    // Delete the editor role.
    $this->editorRole->delete();
    $this->template = $this->loadUnchangedTemplate($this->template->id());
    $this->assertEquals([
      'config' => [
        'field.storage.node.field_email',
      ],
    ], $this->template->getDependencies());

    // Delete the email field.
    FieldConfig::load('node.test.field_email')->delete();
    $this->template = $this->loadUnchangedTemplate($this->template->id());
    $this->assertEquals([], $this->template->getDependencies());
  }

  /**
   * Creates a test email template.
   *
   * @param string $id
   *   The id for the template.
   *
   * @return \Drupal\workbench_email\Entity\Template
   *   Created template.
   */
  protected function setUpTemplate($id = 'test_template') {
    $template = Template::create([
      'id' => $id,
      'label' => ucfirst(str_replace('_', ' ', $id)),
      'recipient_types' => [
        'role' => [
          'id' => 'role',
          'provider' => 'workbench_email',
          'status' => 1,
          'settings' => [
            'roles' => [
              'editor' => 'editor',
            ],
          ],
        ],
        'author' => [
          'id' => 'author',
          'provider' => 'workbench_email',
          'status' => 1,
          'settings' => [],
        ],
        'email' => [
          'id' => 'email',
          'provider' => 'workbench_email',
          'status' => 1,
          'settings' => [
            'fields' => [
              'node:field_email',
            ],
          ],
        ],
      ],
    ]);
    $template->save();
    return $template;
  }

  /**
   * Loads the given template.
   *
   * @param string $template_id
   *   Template ID.
   *
   * @return \Drupal\workbench_email\TemplateInterface
   *   Unchanged scheme.
   */
  protected function loadUnchangedTemplate($template_id) {
    return $this->container->get('entity_type.manager')
      ->getStorage('workbench_email_template')
      ->loadUnchanged($template_id);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc