You are here

public function StateTransitionValidationTest::testUserSensitiveValidTransitions in Drupal 8

Same name and namespace in other branches
  1. 9 core/modules/content_moderation/tests/src/Unit/StateTransitionValidationTest.php \Drupal\Tests\content_moderation\Unit\StateTransitionValidationTest::testUserSensitiveValidTransitions()

Verifies user-aware transition validation.

@dataProvider userTransitionsProvider

Parameters

string $from_id: The state to transition from.

string $to_id: The state to transition to.

string $permission: The permission to give the user, or not.

bool $allowed: Whether or not to grant a user this permission.

bool $result: Whether getValidTransitions() is expected to have the.

File

core/modules/content_moderation/tests/src/Unit/StateTransitionValidationTest.php, line 71

Class

StateTransitionValidationTest
@coversDefaultClass \Drupal\content_moderation\StateTransitionValidation @group content_moderation

Namespace

Drupal\Tests\content_moderation\Unit

Code

public function testUserSensitiveValidTransitions($from_id, $to_id, $permission, $allowed, $result) {
  $user = $this
    ->prophesize(AccountInterface::class);

  // The one listed permission will be returned as instructed; Any others are
  // always denied.
  $user
    ->hasPermission($permission)
    ->willReturn($allowed);
  $user
    ->hasPermission(Argument::type('string'))
    ->willReturn(FALSE);
  $entity = $this
    ->prophesize(ContentEntityInterface::class);
  $entity = $entity
    ->reveal();
  $entity->moderation_state = new \stdClass();
  $entity->moderation_state->value = $from_id;
  $moderation_info = $this
    ->prophesize(ModerationInformationInterface::class);
  $moderation_info
    ->getWorkflowForEntity($entity)
    ->willReturn($this->workflow);
  $validator = new StateTransitionValidation($moderation_info
    ->reveal());
  $has_transition = FALSE;
  foreach ($validator
    ->getValidTransitions($entity, $user
    ->reveal()) as $transition) {
    if ($transition
      ->to()
      ->id() === $to_id) {
      $has_transition = TRUE;
      break;
    }
  }
  $this
    ->assertSame($result, $has_transition);
}