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 250

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, string $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->assertEquals([
        0 => $expectedLog,
    ], $logs);
    // 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.