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

modules/acquia_search_defaults/tests/src/EventSubscriber/PossibleCores/AcquiaHostingTest.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\Event\AcquiaPossibleCoresEvent;
use Drupal\acquia_search\Plugin\search_api\backend\AcquiaSearchSolrBackend;
use Drupal\acquia_search_defaults\EventSubscriber\PossibleCores\AcquiaHosting;
use Drupal\Core\Database\Connection;
use Drupal\Core\Database\Database;
use Drupal\search_api\ServerInterface;
use Drupal\Tests\acquia_search\Unit\AcquiaSearchTestCase;

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

  protected function setUp(): void {
    parent::setUp();
    foreach (array_keys(Database::getAllConnectionInfo()) as $key) {
      Database::removeConnection($key);
    }
  }

  private static function assertPossibleCoresEvent(AcquiaPossibleCoresEvent $event, array $expected_possible_cores, bool $expected_read_only): void {
    self::assertEquals($expected_possible_cores, $event->getPossibleCores());
    self::assertEquals($expected_read_only, $event->isReadOnly());
  }

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

    $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 AcquiaHosting(
      $this->createMock(Connection::class),
      $subscription,
      'foobar'
    );
    $event = new AcquiaPossibleCoresEvent($server, []);
    $sut->onGetPossibleCores($event);
    self::assertEquals([], $event->getPossibleCores());
    self::assertTrue($event->isReadOnly());
  }

  /**
   * @dataProvider acquiaCloudInfo
   */
  public function testOnGetPossibleCores(string $ah_environment, string $connection_db_name, string $ah_db_role, array $expected_possible_cores, bool $expected_read_only): void {
    $subscription = $this->createMock(Subscription::class);
    $subscription->expects($this->once())
      ->method('getProvider')
      ->willReturn('acquia_cloud');

    $settings = $this->createMock(Settings::class);
    $settings->method('getMetadata')
      ->with('AH_SITE_ENVIRONMENT')
      ->willReturn($ah_environment);
    $settings->method('getIdentifier')
      ->willReturn('abc123');
    $subscription->method('getSettings')
      ->willReturn($settings);

    $database = $this->createMock(Connection::class);
    $database->method('getConnectionOptions')
      ->willReturn([
        // This is the only key needed.
        'database' => $connection_db_name,
      ]);
    Database::addConnectionInfo('default', 'default', [
      'driver' => 'mysql',
      'database' => $connection_db_name,
    ]);
    if ($ah_db_role !== '') {
      Database::addConnectionInfo('sitename', 'default', [
        'driver' => 'mysql',
        'database' => $ah_db_role,
      ]);
    }

    $sut = new AcquiaHosting(
      $database,
      $subscription,
      'sites/default'
    );

    $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');

    $event = new AcquiaPossibleCoresEvent($server, []);
    $sut->onGetPossibleCores($event);
    self::assertEquals($expected_possible_cores, $event->getPossibleCores());
    self::assertEquals($expected_read_only, $event->isReadOnly());
  }

  public static function acquiaCloudInfo() {
    yield 'prod' => [
      'prod',
      'foobar_db',
      'foobar_db',
      [
        'abc123.prod.sitename',
        'abc123.prod',
        'abc123.prod.default',
        'abc123.prod.foobar_db',
      ],
      FALSE,
    ];
    yield 'test' => [
      'test',
      'foobar_db',
      'foobar_db',
      [
        'abc123.test.sitename',
        'abc123.test',
        'abc123.test.default',
        'abc123.test.foobar_db',
      ],
      FALSE,
    ];
    yield 'dev' => [
      'dev',
      'foobar_db',
      'foobar_db',
      [
        'abc123.dev.sitename',
        'abc123.dev',
        'abc123.dev.default',
        'abc123.dev.foobar_db',
      ],
      FALSE,
    ];
    yield 'no site env' => [
      '',
      'foobar_db',
      'foobar_db',
      [],
      TRUE,
    ];

    yield 'no ah db role' => [
      'dev',
      'foobar_db',
      'baz_db',
      [
        'abc123.dev',
        'abc123.dev.default',
        'abc123.dev.foobar_db',
      ],
      FALSE,
    ];
  }

}

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

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