You are here

public function SchedulerMetaInformationTest::testMetaInformation in Scheduler 2.x

Same name and namespace in other branches
  1. 8 tests/src/Functional/SchedulerMetaInformationTest.php \Drupal\Tests\scheduler\Functional\SchedulerMetaInformationTest::testMetaInformation()

Tests meta-information on scheduled entities.

When an entity is scheduled for unpublication, an X-Robots-Tag HTTP header is included, telling crawlers about when an item will expire and should be removed from search results.

@dataProvider dataStandardEntityTypes()

File

tests/src/Functional/SchedulerMetaInformationTest.php, line 21

Class

SchedulerMetaInformationTest
Tests meta information output by scheduler.

Namespace

Drupal\Tests\scheduler\Functional

Code

public function testMetaInformation($entityTypeId, $bundle) {

  // Log in.
  $this
    ->drupalLogin($this->schedulerUser);

  // Create a published entity without scheduling dates.
  $entity = $this
    ->createEntity($entityTypeId, $bundle, [
    'status' => TRUE,
  ]);

  // Since we did not set an unpublish date, there should be no X-Robots-Tag
  // header on the response.
  $this
    ->drupalGet($entity
    ->toUrl());
  $this
    ->assertNull($this
    ->getSession()
    ->getResponseHeader('X-Robots-Tag'), 'X-Robots-Tag should not be present when no unpublish date is set.');

  // Also check that there is no meta tag.
  $this
    ->assertSession()
    ->responseNotContains('unavailable_after:');

  // Set an unpublish date on the entity.
  $unpublish_date = strtotime('+1 day');
  $entity
    ->set('unpublish_on', $unpublish_date)
    ->save();

  // The entity full page view should now have an X-Robots-Tag header with an
  // unavailable_after-directive and RFC850 date- and time-value.
  $this
    ->drupalGet($entity
    ->toUrl());
  $this
    ->assertSession()
    ->responseHeaderEquals('X-Robots-Tag', 'unavailable_after: ' . date(DATE_RFC850, $unpublish_date));

  // Check that the required meta tag is added to the html head section.
  $this
    ->assertSession()
    ->responseMatches('~meta name=[\'"]robots[\'"] content=[\'"]unavailable_after: ' . date(DATE_RFC850, $unpublish_date) . '[\'"]~');

  // If the entity type has a summary listing page, check that the entity is
  // shown but the two tags are not present.
  if ($this
    ->drupalGet("{$entityTypeId}") && $this
    ->getSession()
    ->getStatusCode() == '200') {
    $this
      ->assertSession()
      ->pageTextContains($entity
      ->label());
    $this
      ->assertNull($this
      ->getSession()
      ->getResponseHeader('X-Robots-Tag'), 'X-Robots-Tag should not be added when entity is not in "full" view mode.');
    $this
      ->assertSession()
      ->responseNotContains('unavailable_after:');
  }
}