date_recur-8.x-2.2/tests/src/Kernel/DateRecurViewsFieldTest.php

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

declare(strict_types=1);

namespace Drupal\Tests\date_recur\Kernel;

use Drupal\Core\Datetime\Entity\DateFormat;
use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
use Drupal\date_recur\DateRecurOccurrences;
use Drupal\date_recur_entity_test\Entity\DrEntityTestBasic;
use Drupal\user\Entity\User;
use Drupal\views\Entity\View;
use Drupal\views\Tests\ViewTestData;

/**
 * Tests the results of 'date_recur_date' field plugin.
 *
 * Tests field plugin for start and end date columns on field and occurrence
 * tables.
 *
 * @coversDefaultClass \Drupal\date_recur\Plugin\views\field\DateRecurDate
 *
 * @group date_recur
 */
class DateRecurViewsFieldTest extends ViewsKernelTestBase {

  protected static $modules = [
    'date_recur_entity_test',
    'date_recur_views_test',
    'entity_test',
    'datetime',
    'datetime_range',
    'date_recur',
    'field',
    'user',
  ];

  public static $testViews = [
    'dr_entity_test_list',
  ];

  /**
   * Field mapping for testing.
   *
   * @var array
   */
  private array $map;

  /**
   * The entity type for testing.
   *
   * @var string
   */
  private string $entityType;

  /**
   * Name of field for testing.
   *
   * @var string|null
   */
  protected ?string $fieldName = NULL;

  /**
   * {@inheritdoc}
   */
  protected function setUp($import_test_views = TRUE): void {
    parent::setUp(FALSE);
    $this->installEntitySchema('dr_entity_test');
    ViewTestData::createTestViews($this::class, ['date_recur_views_test']);
    $this->map = ['id' => 'id'];

    // This is the name of the pre-installed base field.
    $this->fieldName = 'dr';
    $this->entityType = 'dr_entity_test';

    $user = User::create([
      'uid' => 2,
      'timezone' => 'Australia/Sydney',
    ]);
    $this->container->get('current_user')->setAccount($user);
    DateFormat::load('long')?->setPattern('l, j F Y - H:i')->save();
  }

  /**
   * Tests field.
   */
  public function testField(): void {
    $entity1 = $this->createEntity();
    $entity1->set($this->fieldName, [
      [
        // 9am-5pm.
        'value' => '2018-11-05T22:00:00',
        'end_value' => '2018-11-06T06:00:00',
        'rrule' => 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR;COUNT=3',
        'infinite' => '0',
        'timezone' => 'Australia/Sydney',
      ],
    ]);
    $entity1->save();
    $entity2 = $this->createEntity();
    $entity2->set($this->fieldName, [
      [
        // 9:05am-5:05pm.
        'value' => '2018-11-05T22:05:00',
        'end_value' => '2018-11-06T06:05:00',
        'rrule' => 'FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR;COUNT=3',
        'infinite' => '0',
        'timezone' => 'Australia/Sydney',
      ],
    ]);
    $entity2->save();

    $definitions = \Drupal::service('entity_field.manager')->getFieldStorageDefinitions($this->entityType);
    $baseTable = 'dr_entity_test';
    $occurrenceTableName = DateRecurOccurrences::getOccurrenceCacheStorageTableName($definitions[$this->fieldName]);

    $view = View::load('dr_entity_test_list');
    /** @var \Drupal\views\ViewExecutable $executable */
    $executable = $view->getExecutable();

    // Add the relationship.
    $viewsFieldName = $this->fieldName . '_occurrences';
    $executable->addHandler('default', 'relationship', $baseTable, $viewsFieldName, []);

    $options = [];
    $options['order'] = 'ASC';
    $viewsFieldName = $this->fieldName . '_value';
    $executable->addHandler('default', 'sort', $occurrenceTableName, $viewsFieldName, $options);

    $options = [];
    $options['date_format'] = 'long';
    $viewsFieldName = $this->fieldName . '_value';
    $startFieldId = $executable->addHandler('default', 'field', $occurrenceTableName, $viewsFieldName, $options);

    $options = [];
    $options['date_format'] = 'long';
    $viewsFieldName = $this->fieldName . '_end_value';
    $endFieldId = $executable->addHandler('default', 'field', $occurrenceTableName, $viewsFieldName, $options);

    $this->executeView($executable);

    // There are 3 occurrences for two entities.
    static::assertCount(6, $executable->result);
    $expectedResult = [
      [
        'entity_id' => 1,
        'start' => '2018-11-05T22:00:00',
        'end' => '2018-11-06T06:00:00',
      ],
      [
        'entity_id' => 2,
        'start' => '2018-11-05T22:05:00',
        'end' => '2018-11-06T06:05:00',
      ],
      [
        'entity_id' => 1,
        'start' => '2018-11-06T22:00:00',
        'end' => '2018-11-07T06:00:00',
      ],
      [
        'entity_id' => 2,
        'start' => '2018-11-06T22:05:00',
        'end' => '2018-11-07T06:05:00',
      ],
      [
        'entity_id' => 1,
        'start' => '2018-11-07T22:00:00',
        'end' => '2018-11-08T06:00:00',
      ],
      [
        'entity_id' => 2,
        'start' => '2018-11-07T22:05:00',
        'end' => '2018-11-08T06:05:00',
      ],
    ];
    $this->map = [
      'id' => 'entity_id',
      $startFieldId => 'start',
      $endFieldId => 'end',
    ];
    static::assertIdenticalResultset($executable, $expectedResult, $this->map);

    // Render the dates.
    $assertRendered = [
      [
        'start' => 'Tuesday, 6 November 2018 - 09:00',
        'end' => 'Tuesday, 6 November 2018 - 17:00',
      ],
      [
        'start' => 'Tuesday, 6 November 2018 - 09:05',
        'end' => 'Tuesday, 6 November 2018 - 17:05',
      ],
      [
        'start' => 'Wednesday, 7 November 2018 - 09:00',
        'end' => 'Wednesday, 7 November 2018 - 17:00',
      ],
      [
        'start' => 'Wednesday, 7 November 2018 - 09:05',
        'end' => 'Wednesday, 7 November 2018 - 17:05',
      ],
      [
        'start' => 'Thursday, 8 November 2018 - 09:00',
        'end' => 'Thursday, 8 November 2018 - 17:00',
      ],
      [
        'start' => 'Thursday, 8 November 2018 - 09:05',
        'end' => 'Thursday, 8 November 2018 - 17:05',
      ],
    ];
    $result = $executable->result;
    foreach ($assertRendered as $rowIndex => $assertRender) {
      $renderedStart = $executable->field[$startFieldId]->advancedRender($result[$rowIndex]);
      static::assertEquals($assertRender['start'], $renderedStart, 'Asserting start for start: index' . $rowIndex);
      $renderedEnd = $executable->field[$endFieldId]->advancedRender($result[$rowIndex]);
      static::assertEquals($assertRender['end'], $renderedEnd, 'Asserting start for end: index' . $rowIndex);
    }
  }

  /**
   * Creates an unsaved test entity.
   *
   * @return \Drupal\date_recur_entity_test\Entity\DrEntityTestBasic
   *   A test entity.
   */
  protected function createEntity(): DrEntityTestBasic {
    return DrEntityTestBasic::create();
  }

}

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

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