You are here

class DisplayAttachmentTest in Drupal 10

Same name in this branch
  1. 10 core/modules/views_ui/tests/src/Functional/DisplayAttachmentTest.php \Drupal\Tests\views_ui\Functional\DisplayAttachmentTest
  2. 10 core/modules/views/tests/src/Functional/Plugin/DisplayAttachmentTest.php \Drupal\Tests\views\Functional\Plugin\DisplayAttachmentTest
Same name and namespace in other branches
  1. 8 core/modules/views/tests/src/Functional/Plugin/DisplayAttachmentTest.php \Drupal\Tests\views\Functional\Plugin\DisplayAttachmentTest
  2. 9 core/modules/views/tests/src/Functional/Plugin/DisplayAttachmentTest.php \Drupal\Tests\views\Functional\Plugin\DisplayAttachmentTest

Tests the attachment display plugin.

@group views

Hierarchy

  • class \Drupal\Tests\views\Functional\Plugin\DisplayAttachmentTest extends \Drupal\Tests\views\Functional\ViewTestBase

Expanded class hierarchy of DisplayAttachmentTest

See also

\Drupal\views\Plugin\views\display\Attachment

File

core/modules/views/tests/src/Functional/Plugin/DisplayAttachmentTest.php, line 14

Namespace

Drupal\Tests\views\Functional\Plugin
View source
class DisplayAttachmentTest extends ViewTestBase {

  /**
   * Views used by this test.
   *
   * @var array
   */
  public static $testViews = [
    'test_display_attachment',
    'test_attached_disabled',
  ];

  /**
   * Modules to enable.
   *
   * @var array
   */
  protected static $modules = [
    'node',
    'views',
  ];

  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'classy';
  protected function setUp($import_test_views = TRUE, $modules = [
    'views_test_config',
  ]) : void {
    parent::setUp($import_test_views, $modules);
    $this
      ->enableViewsTestModule();
    $admin_user = $this
      ->drupalCreateUser([
      'administer site configuration',
    ]);
    $this
      ->drupalLogin($admin_user);
  }

  /**
   * Tests the attachment plugin.
   */
  public function testAttachment() {
    $this
      ->drupalGet('test-display-attachment');

    // Verify that both actual view and the attachment are rendered.
    $this
      ->assertSession()
      ->elementsCount('xpath', '//div[contains(@class, "view-content")]', 2);

    // Verify that the attachment is not rendered after the actual view.
    $this
      ->assertSession()
      ->elementNotExists('xpath', '//div[contains(@class, "attachment-after")]');

    // Verify that the attachment is rendered before the actual view.
    $this
      ->assertSession()
      ->elementsCount('xpath', '//div[contains(@class, "attachment-before")]', 1);
  }

  /**
   * Tests that nothing is output when the attachment displays are disabled.
   */
  public function testDisabledAttachments() {
    $this
      ->drupalCreateContentType([
      'type' => 'page',
    ]);
    $this
      ->drupalCreateNode();

    // Ensure that the feed_1 display is attached to the page_1 display.
    $view = Views::getView('test_attached_disabled');
    $view
      ->setDisplay('page_1');
    $attached_displays = $view->display_handler
      ->getAttachedDisplays();
    $this
      ->assertContains('attachment_1', $attached_displays, 'The attachment_1 display is attached to the page display.');
    $this
      ->assertContains('attachment_2', $attached_displays, 'The attachment_2 display is attached to the page display.');

    // Check that the attachments are output on the page display.
    $this
      ->drupalGet('test-attached-disabled');

    // Verify that the page view and the attachments are rendered.
    $this
      ->assertSession()
      ->elementsCount('xpath', '//div[contains(@class, "view-content")]', 3);

    // Verify that the attachment is rendered before the page view.
    $this
      ->assertSession()
      ->elementsCount('xpath', '//div[contains(@class, "attachment-before")]', 1);

    // Verify that the attachment is rendered after the page view.
    $this
      ->assertSession()
      ->elementsCount('xpath', '//div[contains(@class, "attachment-after")]', 1);

    // Disable the attachment_1 display.
    $view->displayHandlers
      ->get('attachment_1')
      ->setOption('enabled', FALSE);
    $view
      ->save();

    // Test that the before attachment is not displayed.
    $this
      ->drupalGet('/test-attached-disabled');

    // Verify that the page view and only one attachment are rendered.
    $this
      ->assertSession()
      ->elementsCount('xpath', '//div[contains(@class, "view-content")]', 2);

    // Verify that the attachment_1 is not rendered.
    $this
      ->assertSession()
      ->elementNotExists('xpath', '//div[contains(@class, "attachment-before")]');

    // Disable the attachment_2 display.
    $view->displayHandlers
      ->get('attachment_2')
      ->setOption('enabled', FALSE);
    $view
      ->save();

    // Test that the after attachment is not displayed.
    $this
      ->drupalGet('/test-attached-disabled');

    // Verify that the page view is rendered without attachments.
    $this
      ->assertSession()
      ->elementsCount('xpath', '//div[contains(@class, "view-content")]', 1);

    // Verify that the attachment_2 is not rendered.
    $this
      ->assertSession()
      ->elementNotExists('xpath', '//div[contains(@class, "attachment-after")]');
  }

}

Members