public function ParagraphsCollectionOverviewTest::testOverviewPages

Tests the overview pages of discoverable items.

These are the layouts for the grid layout plugin and styles for the style plugin.

File

paragraphs_collection/tests/src/Functional/ParagraphsCollectionOverviewTest.php, line 39

Class

ParagraphsCollectionOverviewTest
Tests the Paragraphs Collection overview pages.

Namespace

Drupal\Tests\paragraphs_collection\Functional

Code

public function testOverviewPages() {
  $this
    ->loginAsAdmin([
    'administer paragraphs types',
    'access site reports',
  ]);

  // Check the new link on the reports page.
  $this
    ->drupalGet('/admin/reports');
  $this
    ->assertSession()
    ->pageTextContains('Overviews of items discoverable by behavior plugins.');
  $this
    ->clickLink('Paragraphs Collection');

  // Check the grid layouts overview.
  $this
    ->assertSession()
    ->addressEquals('/admin/reports/paragraphs_collection/layouts');
  $this
    ->assertSession()
    ->titleEquals('Available grid layouts | Drupal');
  $this
    ->assertSession()
    ->pageTextContains('Grid layout label or ID');
  $this
    ->assertSession()
    ->pageTextContains('Details');
  $this
    ->assertSession()
    ->pageTextContains('Used in');

  // Check that a concrete grid layout is displayed.
  $this
    ->assertSession()
    ->pageTextContains('Three columns 1 - 1 - 2');
  $this
    ->assertSession()
    ->pageTextContains('Three columns layout of 1/4, 1/4 and 1/2 width.');
  $this
    ->assertSession()
    ->pageTextContains('paragraphs_collection_demo_1_1_2_column');
  $this
    ->assertSession()
    ->linkExists('Grid');
  $this
    ->assertSession()
    ->linkByHrefExists('/admin/structure/paragraphs_type/grid');

  // Check the tabs.
  $this
    ->assertSession()
    ->linkExists('Layouts');
  $this
    ->clickLink('Styles');

  // Check the styles layouts overview.
  $this
    ->assertSession()
    ->addressEquals('/admin/reports/paragraphs_collection/styles');
  $this
    ->assertSession()
    ->titleEquals('Available styles | Drupal');
  $this
    ->assertSession()
    ->pageTextContains('Group');
  $this
    ->assertSession()
    ->pageTextContains('Style label or ID');
  $this
    ->assertSession()
    ->pageTextContains('Details');
  $this
    ->assertSession()
    ->pageTextContains('Used in');

  // Check that a concrete style is displayed.
  $this
    ->assertSession()
    ->pageTextContains('Blue');
  $this
    ->assertSession()
    ->pageTextContains('paragraphs-blue');
  $this
    ->assertSession()
    ->pageTextContains('General Group');
  $this
    ->assertSession()
    ->linkExists('Container');
  $this
    ->assertSession()
    ->linkByHrefExists('/admin/structure/paragraphs_type/container');

  // Check the tabs.
  $this
    ->assertSession()
    ->linkExists('Layouts');
  $this
    ->assertSession()
    ->linkExists('Styles');

  // Disable the grid layout and style plugins for all paragraphs types.
  $paragraph_type_ids = \Drupal::entityQuery('paragraphs_type')
    ->execute();
  $paragraphs_types = ParagraphsType::loadMultiple($paragraph_type_ids);
  foreach ($paragraphs_types as $paragraphs_type) {

    /** @var \Drupal\paragraphs\ParagraphsTypeInterface $paragraphs_type */
    $paragraphs_type
      ->getBehaviorPlugin('grid_layout')
      ->setConfiguration([
      'enabled' => FALSE,
    ]);
    $paragraphs_type
      ->getBehaviorPlugin('style')
      ->setConfiguration([
      'enabled' => FALSE,
    ]);
    $paragraphs_type
      ->save();
  }

  // Check the grid layouts overview page displays grid layouts but no
  // paragraphs types.
  $this
    ->drupalGet('/admin/reports/paragraphs_collection/layouts');
  $this
    ->assertSession()
    ->pageTextContains('Three columns 1 - 1 - 2');
  $this
    ->assertSession()
    ->pageTextContains('Three columns layout of 1/4, 1/4 and 1/2 width.');
  $this
    ->assertSession()
    ->pageTextContains('paragraphs_collection_demo_1_1_2_column');
  $this
    ->assertSession()
    ->linkNotExists('Grid');
  $this
    ->assertSession()
    ->linkByHrefNotExists('/admin/structure/paragraphs_type/grid');

  // Check the styles overview page displays styles but no paragraphs types.
  $this
    ->drupalGet('/admin/reports/paragraphs_collection/styles');
  $this
    ->assertSession()
    ->pageTextContains('Blue');
  $this
    ->assertSession()
    ->pageTextContains('paragraphs-blue');
  $this
    ->assertSession()
    ->pageTextContains('General Group');
  $this
    ->assertSession()
    ->linkNotExists('Container');
  $this
    ->assertSession()
    ->linkByHrefNotExists('/admin/structure/paragraphs_type/container');

  // Assert saved styles are sorted alphabetically.
  $this
    ->drupalGet('/admin/reports/paragraphs_collection/styles');
  $this
    ->submitForm([
    'styles[underline][enabled]' => TRUE,
    'styles[advanced][enabled]' => TRUE,
  ], 'Save configuration');
  $this
    ->assertSession()
    ->pageTextContains('The configuration options have been saved.');
  $this
    ->assertEquals([
    'advanced',
    'underline',
  ], \Drupal::config('paragraphs_collection.settings')
    ->get('enabled_styles'));
}