View source
<?php
namespace Drupal\Tests\commerce_recurring\Kernel;
use Drupal\commerce_price\Price;
use Drupal\commerce_recurring\Entity\Subscription;
use Drupal\Core\Session\AnonymousUserSession;
class SubscriptionAccessTest extends RecurringKernelTestBase {
public static $modules = [
'commerce_recurring',
];
protected function setUp() : void {
parent::setUp();
$admin_user = $this
->createUser();
}
public function testViewAccess() {
$admin_user = $this
->createUser([
'mail' => $this
->randomString() . '@example.com',
], [
'administer commerce_subscription',
]);
$user = $this
->createUser([
'mail' => $this
->randomString() . '@example.com',
], [
'view own commerce_subscription',
]);
$different_user = $this
->createUser([
'mail' => $this
->randomString() . '@example.com',
], [
'view own commerce_subscription',
]);
$anonymous_user = new AnonymousUserSession();
$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();
$this
->assertTrue($subscription
->access('view', $user));
$this
->assertFalse($subscription
->access('view', $different_user));
$this
->assertTrue($subscription
->access('view', $admin_user));
$this
->assertFalse($subscription
->access('view', $anonymous_user));
}
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();
$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();
$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));
}
public function getCancelOperations() {
return [
[
'cancel',
],
[
'update',
],
];
}
}