You are here

public function AvailabilityManagerTest::testCheck in Commerce Core 8.2

Same name in this branch
  1. 8.2 tests/src/Unit/AvailabilityManagerTest.php \Drupal\Tests\commerce\Unit\AvailabilityManagerTest::testCheck()
  2. 8.2 modules/order/tests/src/Unit/AvailabilityManagerTest.php \Drupal\Tests\commerce_order\Unit\AvailabilityManagerTest::testCheck()

::covers addChecker ::covers check.

File

modules/order/tests/src/Unit/AvailabilityManagerTest.php, line 42

Class

AvailabilityManagerTest
@coversDefaultClass \Drupal\commerce_order\AvailabilityManager @group commerce

Namespace

Drupal\Tests\commerce_order\Unit

Code

public function testCheck() {
  $mock_builder = $this
    ->getMockBuilder(AvailabilityCheckerInterface::class)
    ->disableOriginalConstructor();
  $order_item = $this
    ->createMock(OrderItemInterface::class);
  $first_checker = $mock_builder
    ->getMock();
  $first_checker
    ->expects($this
    ->any())
    ->method('applies')
    ->with($order_item)
    ->willReturn(TRUE);
  $first_checker
    ->expects($this
    ->any())
    ->method('check')
    ->with($order_item)
    ->willReturn(NULL);
  $second_checker = $mock_builder
    ->getMock();
  $second_checker
    ->expects($this
    ->any())
    ->method('applies')
    ->with($order_item)
    ->willReturn(TRUE);
  $second_checker
    ->expects($this
    ->any())
    ->method('check')
    ->with($order_item)
    ->willReturn(AvailabilityResult::neutral());
  $third_checker = $mock_builder
    ->getMock();
  $third_checker
    ->expects($this
    ->any())
    ->method('applies')
    ->with($order_item)
    ->willReturn(FALSE);
  $third_checker
    ->expects($this
    ->any())
    ->method('check')
    ->with($order_item)
    ->willReturn(AvailabilityResult::unavailable());
  $fourth_checker = $mock_builder
    ->getMock();
  $fourth_checker
    ->expects($this
    ->any())
    ->method('applies')
    ->with($order_item)
    ->willReturn(TRUE);
  $fourth_checker
    ->expects($this
    ->any())
    ->method('check')
    ->with($order_item)
    ->willReturn(AvailabilityResult::unavailable('The product is not available'));
  $user = $this
    ->createMock(AccountInterface::class);
  $store = $this
    ->createMock(StoreInterface::class);
  $context = new Context($user, $store);

  // Test the new availability checkers first.
  $this->availabilityManager
    ->addChecker($first_checker);
  $result = $this->availabilityManager
    ->check($order_item, $context);
  $this
    ->assertEquals(AvailabilityResult::neutral(), $result, 'The checked order item is available when a checker returns NULL.');
  $this->availabilityManager
    ->addChecker($second_checker);
  $result = $this->availabilityManager
    ->check($order_item, $context);
  $this
    ->assertEquals(AvailabilityResult::neutral(), $result, 'The checked order item is available when a checker returns a "neutral" availability result.');
  $this->availabilityManager
    ->addChecker($third_checker);
  $result = $this->availabilityManager
    ->check($order_item, $context);
  $this
    ->assertEquals(AvailabilityResult::neutral(), $result, 'The checked order item is available when a checker that would return an "unavailable" availability result does not apply.');
  $this->availabilityManager
    ->addChecker($fourth_checker);
  $result = $this->availabilityManager
    ->check($order_item, $context);
  $this
    ->assertEquals(AvailabilityResult::unavailable('The product is not available'), $result, 'The checked order item is not available when a checker returning an"unavailable" availability result applies.');
}