You are here

public function SubscriptionAccessTest::testCancelAccess in Commerce Recurring Framework 8

@covers ::checkAccess

@dataProvider getCancelOperations

File

tests/src/Kernel/SubscriptionAccessTest.php, line 71

Class

SubscriptionAccessTest
Tests the commerce_subscription access control.

Namespace

Drupal\Tests\commerce_recurring\Kernel

Code

public function testCancelAccess($operation) {
  $admin_user = $this
    ->createUser([
    'mail' => $this
      ->randomString() . '@example.com',
  ], [
    'administer commerce_subscription',
  ]);
  $privileged_user = $this
    ->createUser([
    'mail' => $this
      ->randomString() . '@example.com',
  ], [
    "{$operation} any commerce_subscription",
  ]);
  $user = $this
    ->createUser([
    'mail' => $this
      ->randomString() . '@example.com',
  ], [
    "{$operation} own commerce_subscription",
  ]);
  $different_user = $this
    ->createUser([
    'mail' => $this
      ->randomString() . '@example.com',
  ], [
    "{$operation} own commerce_subscription",
  ]);
  $anonymous_user = new AnonymousUserSession();

  /** @var \Drupal\commerce_recurring\Entity\SubscriptionInterface $subscription */
  $subscription = Subscription::create([
    'type' => 'product_variation',
    'store_id' => $this->store
      ->id(),
    'billing_schedule' => $this->billingSchedule,
    'uid' => $user
      ->id(),
    'purchased_entity' => $this->variation,
    'title' => $this->variation
      ->getOrderItemTitle(),
    'unit_price' => new Price('2', 'USD'),
    'state' => 'active',
    'starts' => strtotime('2019-02-24 17:00'),
  ]);
  $subscription
    ->save();

  // Tests the 'cancel' access checking.
  $this
    ->assertTrue($subscription
    ->access('cancel', $admin_user));
  $this
    ->assertTrue($subscription
    ->access('cancel', $privileged_user));
  $this
    ->assertTrue($subscription
    ->access('cancel', $user));
  $this
    ->assertFalse($subscription
    ->access('cancel', $different_user));
  $this
    ->assertFalse($subscription
    ->access('cancel', $anonymous_user));
}