function RevisionDeleteFormTest::doTestSubmitForm

Tests revision deletion, and expected response after deletion.

@covers ::submitForm

Parameters

array $permissions: If not empty, a user will be created and logged in with these permissions.

string $entityTypeId: The entity type to test.

string $entityLabel: The entity label, which corresponds to access grants.

int $totalRevisions: Total number of revisions to create.

string $expectedLog: Expected log.

string $expectedMessage: Expected messenger message.

string|int $expectedDestination: Expected destination after deletion.

1 call to RevisionDeleteFormTest::doTestSubmitForm()
RevisionDeleteFormTest::testSubmitForm in core/tests/Drupal/FunctionalTests/Entity/RevisionDeleteFormTest.php
Tests revision deletion form.

File

core/tests/Drupal/FunctionalTests/Entity/RevisionDeleteFormTest.php, line 249

Class

RevisionDeleteFormTest
Tests deleting a revision with revision delete form.

Namespace

Drupal\FunctionalTests\Entity

Code

protected function doTestSubmitForm(array $permissions, string $entityTypeId, string $entityLabel, int $totalRevisions, array $expectedLog, string $expectedMessage, $expectedDestination) : void {
  if (count($permissions) > 0) {
    $this->drupalLogin($this->createUser($permissions));
  }
  /** @var \Drupal\Core\Entity\RevisionableStorageInterface $storage */
  $storage = \Drupal::entityTypeManager()->getStorage($entityTypeId);
  $entity = $storage->create([
    'type' => $entityTypeId,
    'name' => $entityLabel,
  ]);
  if ($entity instanceof RevisionLogInterface) {
    $date = new \DateTime('11 January 2009 4:00:00pm');
    $entity->setRevisionCreationTime($date->getTimestamp());
  }
  $entity->save();
  $revisionId = $entity->getRevisionId();
  $otherRevisionIds = [];
  for ($i = 0; $i < $totalRevisions - 1; $i++) {
    if ($entity instanceof RevisionLogInterface) {
      $entity->setRevisionCreationTime($date->modify('+1 hour')
        ->getTimestamp());
    }
    $entity->setNewRevision();
    $entity->save();
    $otherRevisionIds[] = $entity->getRevisionId();
  }
  $revision = $storage->loadRevision($revisionId);
  $this->drupalGet($revision->toUrl('revision-delete-form'));
  $this->submitForm([], 'Delete');
  // The revision was deleted.
  $this->assertNull($storage->loadRevision($revisionId));
  // Make sure the other revisions were not deleted.
  foreach ($otherRevisionIds as $otherRevisionId) {
    $this->assertNotNull($storage->loadRevision($otherRevisionId));
  }
  // Destination.
  if ($expectedDestination === 404) {
    $this->assertSession()
      ->statusCodeEquals(404);
  }
  else {
    $this->assertSession()
      ->statusCodeEquals(200);
    $this->assertSession()
      ->addressEquals($expectedDestination);
  }
  // Logger log.
  $logs = $this->getLogs($entity->getEntityType()
    ->getProvider());
  $this->assertCount(1, $logs);
  $this->assertEquals("@type: deleted %title revision %revision.", $logs[0]->message);
  $this->assertEquals($expectedLog, unserialize($logs[0]->variables));
  // Messenger message.
  $this->assertSession()
    ->pageTextContains($expectedMessage);
  \Drupal::database()->delete('watchdog')
    ->execute();
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.