You are here

public function SchedulerRevisioningTest::testNewRevision in Scheduler 2.x

Tests the creation of new revisions on scheduling.

This test is still useful for Commerce Products which are not revisionable because it shows that this entity type can be processed correctly even if the scheduler revision option is incorrectly set on.

@dataProvider dataStandardEntityTypes()

File

tests/src/Functional/SchedulerRevisioningTest.php, line 66

Class

SchedulerRevisioningTest
Tests revision options when Scheduler publishes or unpublishes content.

Namespace

Drupal\Tests\scheduler\Functional

Code

public function testNewRevision($entityTypeId, $bundle) {
  $entityType = $this
    ->entityTypeObject($entityTypeId, $bundle);

  // Create a scheduled entity that is not automatically revisioned.
  $entity = $this
    ->createEntity($entityTypeId, $bundle, [
    'revision' => 0,
  ]);
  $this
    ->assertRevisionCount($entity, 1, 'The initial revision count is 1 when the entity is created.');

  // Ensure entities with past dates are scheduled not published immediately.
  $entityType
    ->setThirdPartySetting('scheduler', 'publish_past_date', 'schedule')
    ->save();

  // First test scheduled publication with revisioning disabled by default.
  $entity = $this
    ->scheduleAndRunCron($entity, 'publish');
  $this
    ->assertRevisionCount($entity, 1, 'No new revision is created by default when entity is published. Revision count remains at 1.');

  // Test scheduled unpublication.
  $entity = $this
    ->scheduleAndRunCron($entity, 'unpublish');
  $this
    ->assertRevisionCount($entity, 1, 'No new revision is created by default when entity is unpublished. Revision count remains at 1.');

  // Enable revisioning.
  $entityType
    ->setThirdPartySetting('scheduler', 'publish_revision', TRUE)
    ->setThirdPartySetting('scheduler', 'unpublish_revision', TRUE)
    ->save();

  // Test scheduled publication with revisioning enabled.
  $entity = $this
    ->scheduleAndRunCron($entity, 'publish');
  $this
    ->assertTrue($entity
    ->isPublished(), 'Entity is published after cron.');
  if ($entity
    ->getEntityType()
    ->isRevisionable()) {
    $this
      ->assertRevisionCount($entity, 2, 'A new revision was created when the entity was published with revisioning enabled.');
    $expected_message = sprintf('Published by Scheduler. The scheduled publishing date was %s.', $this->dateFormatter
      ->format(strtotime('-5 hour', $this->requestTime), 'short'));
    $this
      ->assertEquals($entity
      ->getRevisionLogMessage(), $expected_message, 'The correct message was found in the entity revision log after scheduled publishing.');
  }

  // Test scheduled unpublication with revisioning enabled.
  $entity = $this
    ->scheduleAndRunCron($entity, 'unpublish');
  $this
    ->assertFalse($entity
    ->isPublished(), 'Entity is unpublished after cron.');
  if ($entity
    ->getEntityType()
    ->isRevisionable()) {
    $this
      ->assertRevisionCount($entity, 3, 'A new revision was created when the entity was unpublished with revisioning enabled.');
    $expected_message = sprintf('Unpublished by Scheduler. The scheduled unpublishing date was %s.', $this->dateFormatter
      ->format(strtotime('-5 hour', $this->requestTime), 'short'));
    $this
      ->assertEquals($entity
      ->getRevisionLogMessage(), $expected_message, 'The correct message was found in the entity revision log after scheduled unpublishing.');
  }
}