acquia_search-3.0.1/modules/acquia_search_defaults/tests/src/EventSubscriber/PossibleCores/DefaultCoreTest.php

modules/acquia_search_defaults/tests/src/EventSubscriber/PossibleCores/DefaultCoreTest.php
<?php

declare(strict_types=1);

namespace Drupal\Tests\acquia_search_defaults\Unit\EventSubscriber\PossibleCores;

use Drupal\acquia_connector\Settings;
use Drupal\acquia_connector\Subscription;
use Drupal\acquia_search\AcquiaSearchApiClient;
use Drupal\acquia_search\Event\AcquiaPossibleCoresEvent;
use Drupal\acquia_search\Plugin\search_api\backend\AcquiaSearchSolrBackend;
use Drupal\acquia_search_defaults\EventSubscriber\PossibleCores\DefaultCore;
use Drupal\search_api\ServerInterface;
use Drupal\Tests\acquia_search\Unit\AcquiaSearchTestCase;

/**
 * @group acquia_search
 * @coversDefaultClass \Drupal\acquia_search_defaults\EventSubscriber\PossibleCores\DefaultCore
 */
final class DefaultCoreTest extends AcquiaSearchTestCase {

  public function testNothingIfProviderIsAcquiaCloud(): void {
    $subscription = $this->createMock(Subscription::class);
    $subscription->expects($this->once())
      ->method('getProvider')
      ->willReturn('acquia_cloud');
    $subscription->expects($this->never())
      ->method('hasCredentials');

    $backend = $this->createMock(AcquiaSearchSolrBackend::class);
    $backend->method('isReadOnly')->willReturn(TRUE);
    $server = $this->createMock(ServerInterface::class);
    $server->method('status')->willReturn(TRUE);
    $server->method('getBackend')->willReturn($backend);
    $server->method('id')->willReturn('acquia_search_server');

    $sut = new DefaultCore(
      $subscription,
      $this->createMock(AcquiaSearchApiClient::class),
      'sites/default'
    );
    $sut->onGetPossibleCores(new AcquiaPossibleCoresEvent($server, []));
  }

  public function testNothingIfNoSubscriptionCredentials(): void {
    $subscription = $this->createMock(Subscription::class);
    $subscription->expects($this->once())
      ->method('getProvider')
      ->willReturn('core_state');
    $subscription->expects($this->once())
      ->method('hasCredentials')
      ->willReturn(FALSE);

    $client = $this->createMock(AcquiaSearchApiClient::class);
    $client->expects($this->never())
      ->method('getSearchIndexes');

    $backend = $this->createMock(AcquiaSearchSolrBackend::class);
    $backend->method('isReadOnly')->willReturn(TRUE);
    $server = $this->createMock(ServerInterface::class);
    $server->method('status')->willReturn(TRUE);
    $server->method('getBackend')->willReturn($backend);
    $server->method('id')->willReturn('acquia_search_server');

    $sut = new DefaultCore(
      $subscription,
      $client,
      'sites/default'
    );
    $sut->onGetPossibleCores(new AcquiaPossibleCoresEvent($server, []));
  }

  public function testNothingIfNoIndexes(): void {
    $subscription = $this->createMock(Subscription::class);
    $subscription->expects($this->once())
      ->method('getProvider')
      ->willReturn('core_state');
    $subscription->expects($this->once())
      ->method('hasCredentials')
      ->willReturn(TRUE);
    $subscription->expects($this->never())
      ->method('getSettings');

    $client = $this->createMock(AcquiaSearchApiClient::class);
    $client->expects($this->once())
      ->method('getSearchIndexes')
      ->willReturn(FALSE);

    $backend = $this->createMock(AcquiaSearchSolrBackend::class);
    $backend->method('isReadOnly')->willReturn(TRUE);
    $server = $this->createMock(ServerInterface::class);
    $server->method('status')->willReturn(TRUE);
    $server->method('getBackend')->willReturn($backend);
    $server->method('id')->willReturn('acquia_search_server');

    $sut = new DefaultCore(
      $subscription,
      $client,
      'sites/default'
    );
    $sut->onGetPossibleCores(new AcquiaPossibleCoresEvent($server, []));
  }

  /**
   * @dataProvider searchIndexesData
   */
  public function testOnGetPossibleCores(array $indexes, array $expected): void {
    $subscription = $this->createMock(Subscription::class);
    $subscription->expects($this->once())
      ->method('getProvider')
      ->willReturn('core_state');
    $subscription->expects($this->once())
      ->method('hasCredentials')
      ->willReturn(TRUE);

    $settings = $this->createMock(Settings::class);
    $settings->expects($this->once())
      ->method('getIdentifier')
      ->willReturn('abc123');

    $subscription->expects($this->once())
      ->method('getSettings')
      ->willReturn($settings);

    $client = $this->createMock(AcquiaSearchApiClient::class);
    $client->expects($this->once())
      ->method('getSearchIndexes')
      ->willReturn($indexes);

    $backend = $this->createMock(AcquiaSearchSolrBackend::class);
    $backend->method('isReadOnly')->willReturn(TRUE);
    $server = $this->createMock(ServerInterface::class);
    $server->method('status')->willReturn(TRUE);
    $server->method('getBackend')->willReturn($backend);
    $server->method('id')->willReturn('acquia_search_server');

    $sut = new DefaultCore(
      $subscription,
      $client,
      'sites/default'
    );
    $event = new AcquiaPossibleCoresEvent($server, []);
    $sut->onGetPossibleCores($event);
    self::assertEquals($expected, $event->getPossibleCores());
  }

  public static function searchIndexesData() {
    yield [
      [],
      [],
    ];
    yield [
      [
        'foobarprodbaz' => ['core_id' => 'foobarprodbaz'],
        'prod_foobarbaz' => ['core_id' => 'prod_foobarbaz'],
      ],
      ['foobarprodbaz'],
    ];
    yield [
      [
        'foobarprodbaz' => ['core_id' => 'foobarprodbaz'],
        'prod_foobarbaz' => ['core_id' => 'prod_foobarbaz'],
        'abc123.prod' => ['core_id' => 'abc123.prod'],
      ],
      ['abc123.prod'],
    ];
    yield [
      [
        'foobarprodbaz' => ['core_id' => 'foobarprodbaz'],
        'prod_foobarbaz' => ['core_id' => 'prod_foobarbaz'],
        // @todo should generic prod have priority over site name?
        // 'abc123.prod' => ['core_id' => 'abc123.prod'],
        'abc123.prod.othersite' => ['core_id' => 'abc123.prod.othersite'],
        'abc123.prod.default' => ['core_id' => 'abc123.prod.default'],
      ],
      ['abc123.prod.default'],
    ];
  }

}

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

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