You are here

public function EntityShareServerFunctionalTest::testFilteringAndSortingOnChannel in Entity Share 8.2

Same name and namespace in other branches
  1. 8.3 modules/entity_share_server/tests/src/Functional/EntityShareServerFunctionalTest.php \Drupal\Tests\entity_share_server\Functional\EntityShareServerFunctionalTest::testFilteringAndSortingOnChannel()

Test filters, groups of filters, and sorts.

File

modules/entity_share_server/tests/src/Functional/EntityShareServerFunctionalTest.php, line 112

Class

EntityShareServerFunctionalTest
General functional test class.

Namespace

Drupal\Tests\entity_share_server\Functional

Code

public function testFilteringAndSortingOnChannel() {
  $term_storage = $this->entityTypeManager
    ->getStorage('taxonomy_term');
  $channel_storage = $this->entityTypeManager
    ->getStorage('channel');

  /** @var \Drupal\Core\Datetime\DateFormatterInterface $date_formatter */
  $date_formatter = $this->container
    ->get('date.formatter');
  $timestamp_node_1 = '5000000';
  $timestamp_node_2 = '6000000';
  $timestamp_node_3 = '7000000';

  // @codingStandardsIgnoreStart
  // Expected: node 1.
  $timestamp_smaller_than_value = $timestamp_node_2;

  // Expected: node 1 and node 2.
  $timestamp_smaller_than_or_equal_value = $timestamp_node_2;

  // Expected: node 3.
  $timestamp_greater_than_value = $timestamp_node_2;

  // Expected: node 2 and node 3.
  $timestamp_greater_than_or_equal_value = $timestamp_node_2;

  // @codingStandardsIgnoreEnd
  // Create 3 tags.
  $tag_1 = $term_storage
    ->create([
    'langcode' => 'en',
    'vid' => 'es_test',
    'name' => 'Tag 1',
  ]);
  $tag_1
    ->save();
  $tag_2 = $term_storage
    ->create([
    'langcode' => 'en',
    'vid' => 'es_test',
    'name' => 'Tag 2',
  ]);
  $tag_2
    ->save();
  $tag_3 = $term_storage
    ->create([
    'langcode' => 'en',
    'vid' => 'es_test',
    'name' => 'Tag 3',
  ]);
  $tag_3
    ->save();

  // @codingStandardsIgnoreStart
  // Prepare nodes.
  $node_1 = $this
    ->createNode([
    'type' => 'es_test',
    'uuid' => 'es_test_1',
    'title' => 'Foo Bar Test',
    'status' => NodeInterface::PUBLISHED,
    'promote' => NodeInterface::PROMOTED,
    'sticky' => NodeInterface::STICKY,
    'field_es_test_date' => $date_formatter
      ->format($timestamp_node_1, 'custom', DateTimeItemInterface::DATETIME_STORAGE_FORMAT),
    'field_es_test_number_integer' => 2,
    'field_es_test_taxonomy' => [
      'target_id' => $tag_1
        ->id(),
    ],
    'field_es_test_text_plain' => 'not null',
  ]);
  $node_2 = $this
    ->createNode([
    'type' => 'es_test',
    'uuid' => 'es_test_2',
    'title' => 'Foo Contains Test',
    'status' => NodeInterface::PUBLISHED,
    'promote' => NodeInterface::PROMOTED,
    'sticky' => NodeInterface::NOT_STICKY,
    'field_es_test_date' => $date_formatter
      ->format($timestamp_node_2, 'custom', DateTimeItemInterface::DATETIME_STORAGE_FORMAT),
    'field_es_test_number_integer' => 4,
    'field_es_test_taxonomy' => [
      'target_id' => $tag_2
        ->id(),
    ],
  ]);
  $node_3 = $this
    ->createNode([
    'type' => 'es_test',
    'uuid' => 'es_test_3',
    'title' => 'Bar Test',
    'status' => NodeInterface::PUBLISHED,
    'promote' => NodeInterface::NOT_PROMOTED,
    'sticky' => NodeInterface::STICKY,
    'field_es_test_date' => $date_formatter
      ->format($timestamp_node_3, 'custom', DateTimeItemInterface::DATETIME_STORAGE_FORMAT),
    'field_es_test_number_integer' => 6,
    'field_es_test_taxonomy' => [
      'target_id' => $tag_3
        ->id(),
    ],
  ]);

  // @codingStandardsIgnoreEnd
  // 1: =: Basic field: Promoted node.
  $channel_1 = $channel_storage
    ->create([
    'id' => 'channel_1',
    'label' => 'Channel 1',
    'channel_entity_type' => 'node',
    'channel_bundle' => 'es_test',
    'channel_langcode' => 'en',
    'channel_filters' => [
      'promote' => [
        'path' => 'promote',
        'operator' => '=',
        'value' => [
          NodeInterface::PROMOTED,
        ],
      ],
    ],
    'authorized_users' => [
      $this->channelUser
        ->uuid(),
    ],
  ]);
  $channel_1
    ->save();
  $this
    ->checkEntitiesOnChannel($channel_1
    ->id(), [
    'es_test_1' => TRUE,
    'es_test_2' => TRUE,
    'es_test_3' => FALSE,
  ]);

  // 2: =: Entity reference: Node with a specific tag.
  $channel_2 = $channel_storage
    ->create([
    'id' => 'channel_2',
    'label' => 'Channel 2',
    'channel_entity_type' => 'node',
    'channel_bundle' => 'es_test',
    'channel_langcode' => 'en',
    'channel_filters' => [
      'field_es_test_taxonomy_entity_name' => [
        'path' => 'field_es_test_taxonomy.entity.name',
        'operator' => '=',
        'value' => [
          'tag 1',
        ],
      ],
    ],
    'authorized_users' => [
      $this->channelUser
        ->uuid(),
    ],
  ]);
  $channel_2
    ->save();
  $this
    ->checkEntitiesOnChannel($channel_2
    ->id(), [
    'es_test_1' => TRUE,
    'es_test_2' => FALSE,
    'es_test_3' => FALSE,
  ]);

  // 3: <>.
  $channel_3 = $channel_storage
    ->create([
    'id' => 'channel_3',
    'label' => 'Channel 3',
    'channel_entity_type' => 'node',
    'channel_bundle' => 'es_test',
    'channel_langcode' => 'en',
    'channel_filters' => [
      'field_es_test_taxonomy_entity_name' => [
        'path' => 'field_es_test_taxonomy.entity.name',
        'operator' => '<>',
        'value' => [
          'tag 1',
        ],
      ],
    ],
    'authorized_users' => [
      $this->channelUser
        ->uuid(),
    ],
  ]);
  $channel_3
    ->save();
  $this
    ->checkEntitiesOnChannel($channel_3
    ->id(), [
    'es_test_1' => FALSE,
    'es_test_2' => TRUE,
    'es_test_3' => TRUE,
  ]);

  // @codingStandardsIgnoreStart
  // 4: >.
  $channel_4 = $channel_storage
    ->create([
    'id' => 'channel_4',
    'label' => 'Channel 4',
    'channel_entity_type' => 'node',
    'channel_bundle' => 'es_test',
    'channel_langcode' => 'en',
    'channel_filters' => [
      'field_es_test_date' => [
        'path' => 'field_es_test_date',
        'operator' => '>',
        'value' => [
          $date_formatter
            ->format($timestamp_greater_than_value, 'custom', DateTimeItemInterface::DATETIME_STORAGE_FORMAT),
        ],
      ],
    ],
    'authorized_users' => [
      $this->channelUser
        ->uuid(),
    ],
  ]);
  $channel_4
    ->save();
  $this
    ->checkEntitiesOnChannel($channel_4
    ->id(), [
    'es_test_1' => FALSE,
    'es_test_2' => FALSE,
    'es_test_3' => TRUE,
  ]);

  // 5: >=.
  $channel_5 = $channel_storage
    ->create([
    'id' => 'channel_5',
    'label' => 'Channel 5',
    'channel_entity_type' => 'node',
    'channel_bundle' => 'es_test',
    'channel_langcode' => 'en',
    'channel_filters' => [
      'field_es_test_date' => [
        'path' => 'field_es_test_date',
        'operator' => '>=',
        'value' => [
          $date_formatter
            ->format($timestamp_greater_than_or_equal_value, 'custom', DateTimeItemInterface::DATETIME_STORAGE_FORMAT),
        ],
      ],
    ],
    'authorized_users' => [
      $this->channelUser
        ->uuid(),
    ],
  ]);
  $channel_5
    ->save();
  $this
    ->checkEntitiesOnChannel($channel_5
    ->id(), [
    'es_test_1' => FALSE,
    'es_test_2' => TRUE,
    'es_test_3' => TRUE,
  ]);

  // 6: <.
  $channel_6 = $channel_storage
    ->create([
    'id' => 'channel_6',
    'label' => 'Channel 6',
    'channel_entity_type' => 'node',
    'channel_bundle' => 'es_test',
    'channel_langcode' => 'en',
    'channel_filters' => [
      'field_es_test_date' => [
        'path' => 'field_es_test_date',
        'operator' => '<',
        'value' => [
          $date_formatter
            ->format($timestamp_smaller_than_value, 'custom', DateTimeItemInterface::DATETIME_STORAGE_FORMAT),
        ],
      ],
    ],
    'authorized_users' => [
      $this->channelUser
        ->uuid(),
    ],
  ]);
  $channel_6
    ->save();
  $this
    ->checkEntitiesOnChannel($channel_6
    ->id(), [
    'es_test_1' => TRUE,
    'es_test_2' => FALSE,
    'es_test_3' => FALSE,
  ]);

  // 7: <=.
  $channel_7 = $channel_storage
    ->create([
    'id' => 'channel_7',
    'label' => 'Channel 7',
    'channel_entity_type' => 'node',
    'channel_bundle' => 'es_test',
    'channel_langcode' => 'en',
    'channel_filters' => [
      'field_es_test_date' => [
        'path' => 'field_es_test_date',
        'operator' => '<=',
        'value' => [
          $date_formatter
            ->format($timestamp_smaller_than_or_equal_value, 'custom', DateTimeItemInterface::DATETIME_STORAGE_FORMAT),
        ],
      ],
    ],
    'authorized_users' => [
      $this->channelUser
        ->uuid(),
    ],
  ]);
  $channel_7
    ->save();
  $this
    ->checkEntitiesOnChannel($channel_7
    ->id(), [
    'es_test_1' => TRUE,
    'es_test_2' => TRUE,
    'es_test_3' => FALSE,
  ]);

  // @codingStandardsIgnoreEnd
  // 8: STARTS_WITH.
  $channel_8 = $channel_storage
    ->create([
    'id' => 'channel_8',
    'label' => 'Channel 8',
    'channel_entity_type' => 'node',
    'channel_bundle' => 'es_test',
    'channel_langcode' => 'en',
    'channel_filters' => [
      'title' => [
        'path' => 'title',
        'operator' => 'STARTS_WITH',
        'value' => [
          'Foo',
        ],
      ],
    ],
    'authorized_users' => [
      $this->channelUser
        ->uuid(),
    ],
  ]);
  $channel_8
    ->save();
  $this
    ->checkEntitiesOnChannel($channel_8
    ->id(), [
    'es_test_1' => TRUE,
    'es_test_2' => TRUE,
    'es_test_3' => FALSE,
  ]);

  // 9: CONTAINS.
  $channel_9 = $channel_storage
    ->create([
    'id' => 'channel_9',
    'label' => 'Channel 9',
    'channel_entity_type' => 'node',
    'channel_bundle' => 'es_test',
    'channel_langcode' => 'en',
    'channel_filters' => [
      'title' => [
        'path' => 'title',
        'operator' => 'CONTAINS',
        'value' => [
          'Contains',
        ],
      ],
    ],
    'authorized_users' => [
      $this->channelUser
        ->uuid(),
    ],
  ]);
  $channel_9
    ->save();
  $this
    ->checkEntitiesOnChannel($channel_9
    ->id(), [
    'es_test_1' => FALSE,
    'es_test_2' => TRUE,
    'es_test_3' => FALSE,
  ]);

  // 10: ENDS_WITH.
  $channel_10 = $channel_storage
    ->create([
    'id' => 'channel_10',
    'label' => 'Channel 10',
    'channel_entity_type' => 'node',
    'channel_bundle' => 'es_test',
    'channel_langcode' => 'en',
    'channel_filters' => [
      'title' => [
        'path' => 'title',
        'operator' => 'ENDS_WITH',
        'value' => [
          'Bar Test',
        ],
      ],
    ],
    'authorized_users' => [
      $this->channelUser
        ->uuid(),
    ],
  ]);
  $channel_10
    ->save();
  $this
    ->checkEntitiesOnChannel($channel_10
    ->id(), [
    'es_test_1' => TRUE,
    'es_test_2' => FALSE,
    'es_test_3' => TRUE,
  ]);

  // 11: IN.
  $channel_11 = $channel_storage
    ->create([
    'id' => 'channel_11',
    'label' => 'Channel 11',
    'channel_entity_type' => 'node',
    'channel_bundle' => 'es_test',
    'channel_langcode' => 'en',
    'channel_filters' => [
      'field_es_test_taxonomy_entity_name' => [
        'path' => 'field_es_test_taxonomy.entity.name',
        'operator' => 'IN',
        'value' => [
          'Tag 1',
          'Tag 2',
        ],
      ],
    ],
    'authorized_users' => [
      $this->channelUser
        ->uuid(),
    ],
  ]);
  $channel_11
    ->save();
  $this
    ->checkEntitiesOnChannel($channel_11
    ->id(), [
    'es_test_1' => TRUE,
    'es_test_2' => TRUE,
    'es_test_3' => FALSE,
  ]);

  // 12: NOT IN.
  $channel_12 = $channel_storage
    ->create([
    'id' => 'channel_12',
    'label' => 'Channel 12',
    'channel_entity_type' => 'node',
    'channel_bundle' => 'es_test',
    'channel_langcode' => 'en',
    'channel_filters' => [
      'field_es_test_taxonomy_entity_name' => [
        'path' => 'field_es_test_taxonomy.entity.name',
        'operator' => 'NOT IN',
        'value' => [
          'Tag 1',
          'Tag 2',
        ],
      ],
    ],
    'authorized_users' => [
      $this->channelUser
        ->uuid(),
    ],
  ]);
  $channel_12
    ->save();
  $this
    ->checkEntitiesOnChannel($channel_12
    ->id(), [
    'es_test_1' => FALSE,
    'es_test_2' => FALSE,
    'es_test_3' => TRUE,
  ]);

  // 13: BETWEEN.
  $channel_13 = $channel_storage
    ->create([
    'id' => 'channel_13',
    'label' => 'Channel 13',
    'channel_entity_type' => 'node',
    'channel_bundle' => 'es_test',
    'channel_langcode' => 'en',
    'channel_filters' => [
      'field_es_test_number_integer' => [
        'path' => 'field_es_test_number_integer',
        'operator' => 'BETWEEN',
        'value' => [
          '3',
          '5',
        ],
      ],
    ],
    'authorized_users' => [
      $this->channelUser
        ->uuid(),
    ],
  ]);
  $channel_13
    ->save();
  $this
    ->checkEntitiesOnChannel($channel_13
    ->id(), [
    'es_test_1' => FALSE,
    'es_test_2' => TRUE,
    'es_test_3' => FALSE,
  ]);

  // 14: NOT BETWEEN.
  $channel_14 = $channel_storage
    ->create([
    'id' => 'channel_14',
    'label' => 'Channel 14',
    'channel_entity_type' => 'node',
    'channel_bundle' => 'es_test',
    'channel_langcode' => 'en',
    'channel_filters' => [
      'field_es_test_number_integer' => [
        'path' => 'field_es_test_number_integer',
        'operator' => 'NOT BETWEEN',
        'value' => [
          '3',
          '5',
        ],
      ],
    ],
    'authorized_users' => [
      $this->channelUser
        ->uuid(),
    ],
  ]);
  $channel_14
    ->save();
  $this
    ->checkEntitiesOnChannel($channel_14
    ->id(), [
    'es_test_1' => TRUE,
    'es_test_2' => FALSE,
    'es_test_3' => TRUE,
  ]);

  // 15: IS NULL.
  $channel_15 = $channel_storage
    ->create([
    'id' => 'channel_15',
    'label' => 'Channel 15',
    'channel_entity_type' => 'node',
    'channel_bundle' => 'es_test',
    'channel_langcode' => 'en',
    'channel_filters' => [
      'field_es_test_text_plain' => [
        'path' => 'field_es_test_text_plain',
        'operator' => 'IS NULL',
      ],
    ],
    'authorized_users' => [
      $this->channelUser
        ->uuid(),
    ],
  ]);
  $channel_15
    ->save();
  $this
    ->checkEntitiesOnChannel($channel_15
    ->id(), [
    'es_test_1' => FALSE,
    'es_test_2' => TRUE,
    'es_test_3' => TRUE,
  ]);

  // 16: IS NOT NULL.
  $channel_16 = $channel_storage
    ->create([
    'id' => 'channel_16',
    'label' => 'Channel 16',
    'channel_entity_type' => 'node',
    'channel_bundle' => 'es_test',
    'channel_langcode' => 'en',
    'channel_filters' => [
      'field_es_test_text_plain' => [
        'path' => 'field_es_test_text_plain',
        'operator' => 'IS NOT NULL',
      ],
    ],
    'authorized_users' => [
      $this->channelUser
        ->uuid(),
    ],
  ]);
  $channel_16
    ->save();
  $this
    ->checkEntitiesOnChannel($channel_16
    ->id(), [
    'es_test_1' => TRUE,
    'es_test_2' => FALSE,
    'es_test_3' => FALSE,
  ]);

  // 17: Grouping grouped filters.
  $channel_17 = $channel_storage
    ->create([
    'id' => 'channel_17',
    'label' => 'Channel 17',
    'channel_entity_type' => 'node',
    'channel_bundle' => 'es_test',
    'channel_langcode' => 'en',
    'channel_filters' => [
      'promote' => [
        'path' => 'promote',
        'operator' => '=',
        'value' => [
          NodeInterface::PROMOTED,
        ],
        'memberof' => 'or_group',
      ],
      'sticky' => [
        'path' => 'sticky',
        'operator' => '=',
        'value' => [
          NodeInterface::STICKY,
        ],
        'memberof' => 'or_group',
      ],
      'field_es_test_text_plain' => [
        'path' => 'field_es_test_text_plain',
        'operator' => 'IS NULL',
        'memberof' => 'and_group',
      ],
    ],
    'channel_groups' => [
      'and_group' => [
        'conjunction' => 'AND',
      ],
      'or_group' => [
        'conjunction' => 'OR',
        'memberof' => 'and_group',
      ],
    ],
    'authorized_users' => [
      $this->channelUser
        ->uuid(),
    ],
  ]);
  $channel_17
    ->save();
  $this
    ->checkEntitiesOnChannel($channel_17
    ->id(), [
    'es_test_1' => FALSE,
    'es_test_2' => TRUE,
    'es_test_3' => TRUE,
  ]);

  // 18: Sorts.
  $channel_18 = $channel_storage
    ->create([
    'id' => 'channel_18',
    'label' => 'Channel 18',
    'channel_entity_type' => 'node',
    'channel_bundle' => 'es_test',
    'channel_langcode' => 'en',
    'channel_sorts' => [
      'promote' => [
        'path' => 'promote',
        'direction' => 'ASC',
        'weight' => -10,
      ],
      'field_es_test_date' => [
        'path' => 'field_es_test_date',
        'direction' => 'DESC',
        'weight' => -9,
      ],
    ],
    'authorized_users' => [
      $this->channelUser
        ->uuid(),
    ],
  ]);
  $channel_18
    ->save();
  $this
    ->checkEntitiesOrderOnChannel($channel_18
    ->id(), [
    'es_test_3',
    'es_test_2',
    'es_test_1',
  ]);
}