facets-8.x-1.x-dev/tests/src/Kernel/Plugin/query_type/SearchApiDateTest.php

tests/src/Kernel/Plugin/query_type/SearchApiDateTest.php
<?php

namespace Drupal\Tests\facets\Kernel\Plugin\query_type;

use Drupal\Tests\facets\Kernel\Drupal10CompatibilityKernelTestBase;
use Drupal\facets\FacetInterface;
use Drupal\facets\Result\ResultInterface;
use Drupal\facets\Entity\Facet;
use Drupal\facets\Plugin\facets\query_type\SearchApiDate;
use Drupal\search_api\Backend\BackendInterface;
use Drupal\search_api\IndexInterface;
use Drupal\search_api\Plugin\views\query\SearchApiQuery;
use Drupal\search_api\ServerInterface;

/**
 * Kernel test for date query type.
 *
 * @group facets
 */
class SearchApiDateTest extends Drupal10CompatibilityKernelTestBase {

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'facets',
    'search_api',
    'system',
    'user',
  ];

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

    // This is the default set by Drupal as well, but to be explicit we set it
    // here as well. The raw value is the UTC, the displayed value is calculated
    // by the PHP timezone - presently.
    date_default_timezone_set('Australia/Sydney');

    $this->installEntitySchema('facets_facet');
  }

  /**
   * Tests string query type without executing the query with an "AND" operator.
   *
   * @dataProvider resultsProvider
   */
  public function testQueryTypeAnd($granularity, $original_results, $grouped_results) {
    $backend = $this->prophesize(BackendInterface::class);
    $backend->getSupportedFeatures()->willReturn([]);
    $server = $this->prophesize(ServerInterface::class);
    $server->getBackend()->willReturn($backend);
    $index = $this->prophesize(IndexInterface::class);
    $index->getServerInstance()->willReturn($server);
    $query = $this->prophesize(SearchApiQuery::class);
    $query->getIndex()->willReturn($index);

    $facet = new Facet(
      ['query_operator' => 'AND', 'widget' => 'links'],
      'facets_facet'
    );
    $facet->addProcessor([
      'processor_id' => 'date_item',
      'weights' => [],
      'settings' => [
        'granularity' => $granularity,
        'date_format' => '',
        'date_display' => 'actual_date',
      ],
    ]);

    $query_type = new SearchApiDate(
      [
        'facet' => $facet,
        'query' => $query->reveal(),
        'results' => $original_results,
      ],
      'search_api_date',
      []
    );

    $built_facet = $query_type->build();
    $this->assertInstanceOf(FacetInterface::class, $built_facet);

    $results = $built_facet->getResults();
    $this->assertSame('array', gettype($results));

    foreach ($grouped_results as $k => $result) {
      $this->assertInstanceOf(ResultInterface::class, $results[$k]);
      $this->assertEquals($result['count'], $results[$k]->getCount());
      $this->assertEquals($result['filter'], $results[$k]->getDisplayValue());
    }
  }

  /**
   * Data provider for date results and different groupings.
   */
  public static function resultsProvider() {
    return [
      'Year' => [
        SearchApiDate::FACETAPI_DATE_YEAR,
        [
          ['count' => 1, 'filter' => '984711763'],
          ['count' => 1, 'filter' => '1268900542'],
          ['count' => 1, 'filter' => '1269963121'],
          ['count' => 1, 'filter' => '1306314733'],
          ['count' => 1, 'filter' => '1464167533'],
          ['count' => 2, 'filter' => '1464167534'],
          ['count' => 1, 'filter' => '1464172214'],
          ['count' => 1, 'filter' => '1464174734'],
          ['count' => 1, 'filter' => '1464202800'],
          ['count' => 1, 'filter' => '1464250210'],
          ['count' => 1, 'filter' => '1464250230'],
          ['count' => 1, 'filter' => '1464926723'],
          ['count' => 1, 'filter' => '1465930475'],
        ],
        [
          '2001' => ['count' => 1, 'filter' => 2001],
          '2010' => ['count' => 2, 'filter' => 2010],
          '2011' => ['count' => 1, 'filter' => 2011],
          '2016' => ['count' => 10, 'filter' => 2016],
        ],
      ],
      'Month' => [
        SearchApiDate::FACETAPI_DATE_MONTH,
        [
          ['count' => 1, 'filter' => '984711763'],
          ['count' => 1, 'filter' => '1268900542'],
          ['count' => 1, 'filter' => '1269963121'],
          ['count' => 1, 'filter' => '1306314733'],
          ['count' => 1, 'filter' => '1464167533'],
          ['count' => 2, 'filter' => '1464167534'],
          ['count' => 1, 'filter' => '1464172214'],
          ['count' => 1, 'filter' => '1464174734'],
          ['count' => 1, 'filter' => '1464202800'],
          ['count' => 1, 'filter' => '1464250210'],
          ['count' => 1, 'filter' => '1464250230'],
          ['count' => 1, 'filter' => '1464926723'],
          ['count' => 1, 'filter' => '1465930475'],
        ],
        [
          '2001-03' => ['count' => 1, 'filter' => 'March 2001'],
          '2010-03' => ['count' => 2, 'filter' => 'March 2010'],
          '2011-05' => ['count' => 1, 'filter' => 'May 2011'],
          '2016-05' => ['count' => 8, 'filter' => 'May 2016'],
          '2016-06' => ['count' => 2, 'filter' => 'June 2016'],
        ],
      ],
      'Day' => [
        SearchApiDate::FACETAPI_DATE_DAY,
        [
          ['count' => 1, 'filter' => '984711763'],
          ['count' => 1, 'filter' => '1268900542'],
          ['count' => 1, 'filter' => '1269963121'],
          ['count' => 1, 'filter' => '1306314733'],
          ['count' => 1, 'filter' => '1464167533'],
          ['count' => 2, 'filter' => '1464167534'],
          ['count' => 1, 'filter' => '1464172214'],
          ['count' => 1, 'filter' => '1464174734'],
          ['count' => 1, 'filter' => '1464202800'],
          ['count' => 1, 'filter' => '1464250210'],
          ['count' => 1, 'filter' => '1464250230'],
          ['count' => 1, 'filter' => '1464926723'],
          ['count' => 1, 'filter' => '1465930475'],
        ],
        [
          '2001-03-16' => ['count' => 1, 'filter' => '16 March 2001'],
          '2010-03-18' => ['count' => 1, 'filter' => '18 March 2010'],
          '2010-03-31' => ['count' => 1, 'filter' => '31 March 2010'],
          '2011-05-25' => ['count' => 1, 'filter' => '25 May 2011'],
          '2016-05-25' => ['count' => 5, 'filter' => '25 May 2016'],
          '2016-05-26' => ['count' => 3, 'filter' => '26 May 2016'],
          '2016-06-03' => ['count' => 1, 'filter' => '03 June 2016'],
          '2016-06-15' => ['count' => 1, 'filter' => '15 June 2016'],
        ],
      ],
      'Hour' => [
        SearchApiDate::FACETAPI_DATE_HOUR,
        [
          ['count' => 1, 'filter' => '984711763'],
          ['count' => 1, 'filter' => '1268900542'],
          ['count' => 1, 'filter' => '1269963121'],
          ['count' => 1, 'filter' => '1306314733'],
          ['count' => 1, 'filter' => '1464167533'],
          ['count' => 2, 'filter' => '1464167534'],
          ['count' => 1, 'filter' => '1464172214'],
          ['count' => 1, 'filter' => '1464174734'],
          ['count' => 1, 'filter' => '1464202800'],
          ['count' => 1, 'filter' => '1464250210'],
          ['count' => 1, 'filter' => '1464250230'],
          ['count' => 1, 'filter' => '1464926723'],
          ['count' => 1, 'filter' => '1465930475'],
        ],
        [
          '2001-03-16T14' => ['count' => 1, 'filter' => '16/03/2001 14h'],
          '2010-03-18T19' => ['count' => 1, 'filter' => '18/03/2010 19h'],
          '2010-03-31T02' => ['count' => 1, 'filter' => '31/03/2010 02h'],
          '2011-05-25T19' => ['count' => 1, 'filter' => '25/05/2011 19h'],
          '2016-05-25T19' => ['count' => 3, 'filter' => '25/05/2016 19h'],
          '2016-05-25T20' => ['count' => 1, 'filter' => '25/05/2016 20h'],
          '2016-05-25T21' => ['count' => 1, 'filter' => '25/05/2016 21h'],
          '2016-05-26T05' => ['count' => 1, 'filter' => '26/05/2016 05h'],
          '2016-05-26T18' => ['count' => 2, 'filter' => '26/05/2016 18h'],
          '2016-06-03T14' => ['count' => 1, 'filter' => '03/06/2016 14h'],
          '2016-06-15T04' => ['count' => 1, 'filter' => '15/06/2016 04h'],
        ],
      ],
      'Minute' => [
        SearchApiDate::FACETAPI_DATE_MINUTE,
        [
          ['count' => 1, 'filter' => '984711763'],
          ['count' => 1, 'filter' => '1268900542'],
          ['count' => 1, 'filter' => '1269963121'],
          ['count' => 1, 'filter' => '1306314733'],
          ['count' => 1, 'filter' => '1464167533'],
          ['count' => 2, 'filter' => '1464167534'],
          ['count' => 1, 'filter' => '1464172214'],
          ['count' => 1, 'filter' => '1464174734'],
          ['count' => 1, 'filter' => '1464202800'],
          ['count' => 1, 'filter' => '1464250210'],
          ['count' => 1, 'filter' => '1464250230'],
          ['count' => 1, 'filter' => '1464926723'],
          ['count' => 1, 'filter' => '1465930475'],
        ],
        [
          '2001-03-16T14:02' => ['count' => 1, 'filter' => '16/03/2001 14:02'],
          '2010-03-18T19:22' => ['count' => 1, 'filter' => '18/03/2010 19:22'],
          '2010-03-31T02:32' => ['count' => 1, 'filter' => '31/03/2010 02:32'],
          '2011-05-25T19:12' => ['count' => 1, 'filter' => '25/05/2011 19:12'],
          '2016-05-25T19:12' => ['count' => 3, 'filter' => '25/05/2016 19:12'],
          '2016-05-25T20:30' => ['count' => 1, 'filter' => '25/05/2016 20:30'],
          '2016-05-25T21:12' => ['count' => 1, 'filter' => '25/05/2016 21:12'],
          '2016-05-26T05:00' => ['count' => 1, 'filter' => '26/05/2016 05:00'],
          '2016-05-26T18:10' => ['count' => 2, 'filter' => '26/05/2016 18:10'],
          '2016-06-03T14:05' => ['count' => 1, 'filter' => '03/06/2016 14:05'],
          '2016-06-15T04:54' => ['count' => 1, 'filter' => '15/06/2016 04:54'],
        ],
      ],
      'Second' => [
        SearchApiDate::FACETAPI_DATE_SECOND,
        [
          ['count' => 1, 'filter' => '984711763'],
          ['count' => 1, 'filter' => '1268900542'],
          ['count' => 1, 'filter' => '1269963121'],
          ['count' => 1, 'filter' => '1306314733'],
          ['count' => 1, 'filter' => '1464167533'],
          ['count' => 2, 'filter' => '1464167534'],
          ['count' => 1, 'filter' => '1464172214'],
          ['count' => 1, 'filter' => '1464174734'],
          ['count' => 1, 'filter' => '1464202800'],
          ['count' => 1, 'filter' => '1464250210'],
          ['count' => 1, 'filter' => '1464250230'],
          ['count' => 1, 'filter' => '1464926723'],
          ['count' => 1, 'filter' => '1465930475'],
        ],
        [
          '2001-03-16T14:02:43' => [
            'count' => 1,
            'filter' => '16/03/2001 14:02:43',
          ],
          '2010-03-18T19:22:22' => [
            'count' => 1,
            'filter' => '18/03/2010 19:22:22',
          ],
          '2010-03-31T02:32:01' => [
            'count' => 1,
            'filter' => '31/03/2010 02:32:01',
          ],
          '2011-05-25T19:12:13' => [
            'count' => 1,
            'filter' => '25/05/2011 19:12:13',
          ],
          '2016-05-25T19:12:13' => [
            'count' => 1,
            'filter' => '25/05/2016 19:12:13',
          ],
          '2016-05-25T19:12:14' => [
            'count' => 2,
            'filter' => '25/05/2016 19:12:14',
          ],
          '2016-05-25T20:30:14' => [
            'count' => 1,
            'filter' => '25/05/2016 20:30:14',
          ],
          '2016-05-25T21:12:14' => [
            'count' => 1,
            'filter' => '25/05/2016 21:12:14',
          ],
          '2016-05-26T05:00:00' => [
            'count' => 1,
            'filter' => '26/05/2016 05:00:00',
          ],
          '2016-05-26T18:10:10' => [
            'count' => 1,
            'filter' => '26/05/2016 18:10:10',
          ],
          '2016-05-26T18:10:30' => [
            'count' => 1,
            'filter' => '26/05/2016 18:10:30',
          ],
          '2016-06-03T14:05:23' => [
            'count' => 1,
            'filter' => '03/06/2016 14:05:23',
          ],
          '2016-06-15T04:54:35' => [
            'count' => 1,
            'filter' => '15/06/2016 04:54:35',
          ],
        ],
      ],
    ];
  }

  /**
   * Tests string query type without results.
   */
  public function testEmptyResults() {
    $query = new SearchApiQuery([], 'search_api_query', []);
    $facet = new Facet([], 'facets_facet');

    $facet->addProcessor([
      'processor_id' => 'date_item',
      'weights' => [],
      'settings' => [
        'granularity' => SearchApiDate::FACETAPI_DATE_YEAR,
        'date_format' => '',
        'date_display' => 'actual_date',
      ],
    ]);

    $query_type = new SearchApiDate(
      [
        'facet' => $facet,
        'query' => $query,
      ],
      'search_api_string',
      []
    );

    $built_facet = $query_type->build();
    $this->assertInstanceOf(FacetInterface::class, $built_facet);

    $results = $built_facet->getResults();
    $this->assertSame('array', gettype($results));
    $this->assertEmpty($results);
  }

}

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

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