contacts_events-8.x-1.x-dev/tests/src/Kernel/RecalculateOnBookingWindowTest.php

tests/src/Kernel/RecalculateOnBookingWindowTest.php
<?php

namespace Drupal\Tests\contacts_events\Kernel;

use Drupal\Component\Datetime\Time;
use Drupal\contacts_events\Cron\RecalculateOnBookingWindow;
use Drupal\contacts_events\PriceCalculator;
use Drupal\Core\State\StateInterface;
use Drupal\KernelTests\KernelTestBase;
use Prophecy\Argument;

/**
 * Test the booking window recalculation cron task.
 *
 * @coversDefaultClass \Drupal\contacts_events\Cron\RecalculateOnBookingWindow
 * @group contacts_events
 */
class RecalculateOnBookingWindowTest extends KernelTestBase {

  /**
   * Modules to enable.
   *
   * @var array
   */
  public static $modules = [
    'address',
    'commerce',
    'commerce_checkout',
    'commerce_order',
    'commerce_price',
    'commerce_payment',
    'contacts_events',
    'datetime',
    'datetime_range',
    'entity',
    'entity_reference',
    'entity_reference_revisions',
    'facets',
    'field',
    'file',
    'image',
    'inline_entity_form',
    'name',
    'text',
    'options',
    'profile',
    'state_machine',
    'user',
    'system',
    // @todo Remove path dependency when we drop support for Drupal 8.
    'path',
  ];

  /**
   * {@inheritdoc}
   */
  protected $strictConfigSchema = FALSE;

  /**
   * {@inheritdoc}
   */
  protected function setUp() {
    parent::setUp();
    $this->installEntitySchema('contacts_event');
    $this->config('system.date')->set('country.default', 'GB')->save();
    $this->installConfig(['commerce_order', 'system', 'contacts_events']);
  }

  /**
   * Test the booking window recalculation.
   *
   * @param array $booking_windows
   *   The booking window cut off, keyed by event ID.
   * @param int|null $now
   *   The current time.
   * @param int|null $last_run
   *   The last cron run time.
   * @param array|null $event_ids
   *   The event IDs to queue, or NULL for none.
   *
   * @dataProvider dataDoInvoke
   *
   * @covers ::doInvoke
   */
  public function testDoInvoke(array $booking_windows, $now, $last_run, $event_ids) {
    /** @var \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager */
    $entity_type_manager = $this->container->get('entity_type.manager');
    $event_storage = $entity_type_manager->getStorage('contacts_event');

    // Create our events.
    foreach ($booking_windows as $event_id => $cut_off) {
      $event_storage->create([
        'type' => 'default',
        'id' => $event_id,
        'booking_windows' => [
          [
            'id' => 'early',
            'label' => 'Early bird',
            'cut_off' => $cut_off,
            'cut_off_confirmed' => $cut_off,
          ],
          [
            'id' => 'standard',
            'label' => 'Standard',
          ],
        ],
      ])->save();
    }

    $state = $this->prophesize(StateInterface::class);
    $state->get(RecalculateOnBookingWindow::STATE_LAST_RUN)->willReturn($last_run);
    $state->set(RecalculateOnBookingWindow::STATE_LAST_RUN, $now)->shouldBeCalled();

    $time = $this->prophesize(Time::class);
    $time->getCurrentTime()->willReturn($now);

    $price_calculator = $this->prophesize(PriceCalculator::class);
    if ($event_ids === NULL) {
      $price_calculator
        ->enqueueJobs(Argument::any(), Argument::any())
        ->shouldNotBeCalled();
    }
    else {
      $price_calculator
        ->enqueueJobs($event_ids, ['contacts_ticket'])
        ->shouldBeCalledTimes(1);
    }

    $cron = new RecalculateOnBookingWindow($state->reveal(), $time->reveal(), $entity_type_manager, $this->container->get('entity_field.manager'), $price_calculator->reveal());
    $cron->invoke();
  }

  /**
   * Data provider for testDoInvoke.
   */
  public function dataDoInvoke() {
    $data['no-run:no-change'] = [
      'booking_windows' => [
        1 => '2018-05-31',
        2 => '2018-06-30',
        3 => '2018-10-30',
      ],
      'now' => strtotime('2018-04-01'),
      'last_run' => NULL,
      'event_ids' => NULL,
    ];

    $data['no-run:one-change'] = [
      'booking_windows' => [
        1 => '2018-05-31',
        2 => '2018-06-30',
        3 => '2018-10-30',
      ],
      'now' => strtotime('2018-06-01'),
      'last_run' => NULL,
      'event_ids' => [1 => "1"],
    ];

    $data['no-run:two-changes'] = [
      'booking_windows' => [
        1 => '2018-05-31',
        2 => '2018-06-30',
        3 => '2018-10-30',
      ],
      'now' => strtotime('2018-10-01'),
      'last_run' => NULL,
      'event_ids' => [1 => "1", 2 => "2"],
    ];

    $data['run:no-change'] = [
      'booking_windows' => [
        1 => '2018-05-31',
        2 => '2018-06-30',
        3 => '2018-10-30',
      ],
      'now' => strtotime('2018-06-10'),
      'last_run' => strtotime('2018-06-01'),
      'event_ids' => NULL,
    ];

    $data['run:one-change'] = [
      'booking_windows' => [
        1 => '2018-05-31',
        2 => '2018-06-30',
        3 => '2018-10-30',
      ],
      'now' => strtotime('2018-07-01'),
      'last_run' => strtotime('2018-06-01'),
      'event_ids' => [2 => "2"],
    ];

    return $data;
  }

}

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

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