og-8.x-1.x-dev/tests/src/Unit/Cache/Context/OgMembershipStateCacheContextTest.php

tests/src/Unit/Cache/Context/OgMembershipStateCacheContextTest.php
<?php

declare(strict_types=1);

namespace Drupal\Tests\og\Unit\Cache\Context;

use Prophecy\Prophecy\ObjectProphecy;
use Drupal\Core\Cache\Context\CacheContextInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\og\Cache\Context\OgMembershipStateCacheContext;
use Drupal\og\MembershipManagerInterface;
use Drupal\og\OgMembershipInterface;
use Prophecy\PhpUnit\ProphecyTrait;

/**
 * Tests OG membership state cache context.
 *
 * @group og
 * @coversDefaultClass \Drupal\og\Cache\Context\OgMembershipStateCacheContext
 */
class OgMembershipStateCacheContextTest extends OgContextCacheContextTestBase {

  use ProphecyTrait;

  /**
   * The OG membership entity.
   */
  protected OgMembershipInterface|ObjectProphecy $membership;

  /**
   * The membership manager service.
   */
  protected MembershipManagerInterface|ObjectProphecy $membershipManager;

  /**
   * The current user.
   */
  protected AccountInterface|ObjectProphecy $user;

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();

    $this->user = $this->prophesize(AccountInterface::class);
    $this->membership = $this->prophesize(OgMembershipInterface::class);
    $this->membershipManager = $this->prophesize(MembershipManagerInterface::class);
  }

  /**
   * {@inheritdoc}
   *
   * @covers ::getContext
   */
  public function testWithoutContext(): void {
    $this->expectGroupContext();

    $result = $this->getContextResult();
    $this->assertEquals(OgMembershipStateCacheContext::NO_CONTEXT, $result);
  }

  /**
   * {@inheritdoc}
   */
  protected function setupExpectedContext($context): void {
    $this->expectGroupContext($this->group->reveal());
    $this->expectMembership($context);
  }

  /**
   * {@inheritdoc}
   */
  protected function getCacheContext(): CacheContextInterface {
    return new OgMembershipStateCacheContext($this->user->reveal(), $this->ogContext->reveal(), $this->membershipManager->reveal());
  }

  /**
   * Sets an expectation that the current user has the given membership state.
   *
   * @param string|false $state
   *   The membership state, or FALSE if the user is not a member.
   */
  protected function expectMembership(string|false $state): void {
    // If the user is a member, it is expected that the membership state will be
    // retrieved.
    if ($state) {
      $this->membership->getState()
        ->willReturn($state);
      $state = $this->membership;
    }

    // It is expected that the user membership will be retrieved, of any
    // possible membership state.
    $states = [
      OgMembershipInterface::STATE_ACTIVE,
      OgMembershipInterface::STATE_PENDING,
      OgMembershipInterface::STATE_BLOCKED,
    ];

    $this->membershipManager
      ->getMembership($this->group->reveal(), $this->user->reveal()->id(), $states)
      ->willReturn($state);
  }

  /**
   * {@inheritdoc}
   */
  public static function contextProvider(): array {
    return [
      [
        FALSE,
        OgMembershipStateCacheContext::NO_CONTEXT,
      ],
      [
        OgMembershipInterface::STATE_ACTIVE,
        OgMembershipInterface::STATE_ACTIVE,
      ],
      [
        OgMembershipInterface::STATE_PENDING,
        OgMembershipInterface::STATE_PENDING,
      ],
      [
        OgMembershipInterface::STATE_BLOCKED,
        OgMembershipInterface::STATE_BLOCKED,
      ],
    ];
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc