acquia_connector-8.x-1.22/tests/src/Kernel/Form/SettingsFormTest.php

tests/src/Kernel/Form/SettingsFormTest.php
<?php

declare(strict_types=1);

namespace Drupal\Tests\acquia_connector\Kernel\Form;

use Drupal\acquia_connector\AcquiaConnectorEvents;
use Drupal\acquia_connector\Event\AcquiaProductSettingsEvent;
use Drupal\acquia_connector\Event\AcquiaSubscriptionDataEvent;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\Url;
use Drupal\Tests\acquia_connector\Kernel\AcquiaConnectorTestBase;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;

/**
 * @coversDefaultClass \Drupal\acquia_connector\Form\SettingsForm
 * @group acquia_connector
 */
final class SettingsFormTest extends AcquiaConnectorTestBase implements EventSubscriberInterface {

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();
    $this->createUserWithSession();
  }

  /**
   * {@inheritdoc}
   */
  public function register(ContainerBuilder $container) {
    parent::register($container);
    $container
      ->register('testing.acquia_connector_subscriber', self::class)
      ->addTag('event_subscriber');
    $container->set('testing.acquia_connector_subscriber', $this);

  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    return [
      AcquiaConnectorEvents::ACQUIA_PRODUCT_SETTINGS => 'onProductSettings',
      AcquiaConnectorEvents::ALTER_PRODUCT_SETTINGS_SUBMIT => 'onAlterProductSettingsSubmit',
      AcquiaConnectorEvents::GET_SUBSCRIPTION => 'onGetSubscription',
    ];
  }

  /**
   * Event handler for ACQUIA_PRODUCT_SETTINGS.
   *
   * @param \Drupal\acquia_connector\Event\AcquiaProductSettingsEvent $event
   *   The event.
   */
  public function onProductSettings(AcquiaProductSettingsEvent $event) {
    $form['api_key'] = [
      '#type' => 'textfield',
      '#title' => 'API Key',
      '#default_value' => '',
      '#required' => TRUE,
    ];
    $form['api_url'] = [
      '#type' => 'hidden',
      '#title' => 'API URL',
      '#default_value' => '',
    ];
    $event->setProductSettings(
      'Acquia Example Product',
      'acquia_example_product',
      $form
    );
  }

  /**
   * Event handler for ALTER_PRODUCT_SETTINGS_SUBMIT.
   *
   * @param \Drupal\acquia_connector\Event\AcquiaProductSettingsEvent $event
   *   The event.
   */
  public function onAlterProductSettingsSubmit(AcquiaProductSettingsEvent $event) {
    $form_state = $event->getFormState();
    $form_state['product_settings']['acquia_example_product']['settings']['api_url'] = 'https://example.acquia.com';
    $event->alterProductSettingsSubmit($form_state);
  }

  /**
   * Event handler for GET_SUBSCRIPTION.
   *
   * @param \Drupal\acquia_connector\Event\AcquiaSubscriptionDataEvent $event
   *   The event.
   */
  public function onGetSubscription(AcquiaSubscriptionDataEvent $event) {
    $config = $event->getConfig('acquia_connector.settings');
    $data = $config->get('third_party_settings.acquia_example_product');

    $subscription_data = $event->getData();
    $subscription_data['acquia_example_product'] = $data;
    $event->setData($subscription_data);
  }

  /**
   * Tests redirect from settings to auth if no subscription data.
   */
  public function testRedirectIfNoActiveSubscription(): void {
    $request = Request::create(
      Url::fromRoute('acquia_connector.settings')->toString()
    );
    $response = $this->doRequest($request);
    self::assertEquals(302, $response->getStatusCode());
    self::assertEquals(
      Url::fromRoute('acquia_connector.setup_oauth')->toString(),
      $response->headers->get('Location')
    );
  }

  /**
   * Tests the site name generated if Acquia Cloud hosting.
   */
  public function testSiteNameGeneratedOnAcquiaCloud(): void {
    $this->container->get('state')->setMultiple([
      'acquia_connector.identifier' => 'ABC',
      'acquia_connector.key' => 'DEF',
      'acquia_connector.application_uuid' => 'a47ac10b-58cc-4372-a567-0e02b2c3d470',
      'spi.site_name' => 'old_stored_site_name',
    ]);
    $this->container->get('acquia_connector.subscription')->populateSettings();

    $request = Request::create(
      Url::fromRoute('acquia_connector.settings')->toString(),
      'GET',
      [],
      [],
      [],
      [
        'AH_SITE_ENVIRONMENT' => 'test',
        'AH_SITE_NAME' => 'foobar',
      ]
    );
    $response = $this->doRequest($request);
    self::assertEquals(200, $response->getStatusCode());
    $this->assertRaw('<h3>Connected to Acquia</h3>');
    $site_name = (string) $this->cssSelect('input[name="name"]')[0]->attributes()->value[0];
    self::assertStringContainsString('0e02b2c3d470: test', $site_name);
  }

  /**
   * Tests the form with subscription data available.
   */
  public function testWithSubscriptionData(): void {
    $this->container->get('state')->setMultiple([
      'acquia_connector.identifier' => 'ABC',
      'acquia_connector.key' => 'DEF',
      'acquia_connector.application_uuid' => 'a47ac10b-58cc-4372-a567-0e02b2c3d470',
      'spi.site_name' => 'old_stored_site_name',
    ]);
    $this->container->get('acquia_connector.subscription')->populateSettings();

    $request = Request::create(
      Url::fromRoute('acquia_connector.settings')->toString()
    );
    $response = $this->doRequest($request);
    self::assertEquals(200, $response->getStatusCode());
    $this->assertRaw('<h3>Connected to Acquia</h3>');
    $site_name = (string) $this->cssSelect('input[name="name"]')[0]->attributes()->value[0];
    self::assertStringContainsString('0e02b2c3d470: localhost_', $site_name);
    $machine_name = (string) $this->cssSelect('input[name="machine_name"]')[0]->attributes()->value[0];
    self::assertStringContainsString('0e02b2c3d470__localhost_', $machine_name);
    self::assertCount(1, $this->cssSelect('input[name="product_settings[acquia_example_product][settings][api_key]"]'), var_export($this->getRawContent(), TRUE));

    $request = Request::create(
      Url::fromRoute('acquia_connector.settings')->toString(),
      'POST',
      [
        'name' => $site_name,
        'machine_name' => $machine_name,
        'product_settings' => [
          'acquia_example_product' => [
            'settings' => [
              'api_key' => 'ABC123',
            ],
          ],
        ],
        // @phpstan-ignore-next-line
        'form_build_id' => (string) $this->cssSelect('input[name="form_build_id"]')[0]->attributes()->value[0],
        // @phpstan-ignore-next-line
        'form_token' => (string) $this->cssSelect('input[name="form_token"]')[0]->attributes()->value[0],
        // @phpstan-ignore-next-line
        'form_id' => (string) $this->cssSelect('input[name="form_id"]')[0]->attributes()->value[0],
        'op' => 'Connect',
      ]);
    $response = $this->doRequest($request);
    self::assertEquals(303, $response->getStatusCode(), var_export($response->getContent(), TRUE));
    self::assertEquals(
      ['status' => ['The configuration options have been saved.']],
      $this->container->get('messenger')->all()
    );
    $config = $this->config('acquia_connector.settings')->get('third_party_settings');
    self::assertEquals([
      'acquia_example_product' => [
        'api_key' => 'ABC123',
        'api_url' => 'https://example.acquia.com',
      ],
    ], $config);

    self::assertEquals([
      'active' => TRUE,
      'href' => '',
      'uuid' => 'a47ac10b-58cc-4372-a567-0e02b2c3d470',
      'subscription_name' => '',
      'expiration_date' => '',
      'product' => [
        'view' => 'Acquia Network',
      ],
      'search_service_enabled' => 1,
      'gratis' => FALSE,
      'acquia_example_product' => [
        'api_key' => 'ABC123',
        'api_url' => 'https://example.acquia.com',
      ],
    ], $this->container->get('acquia_connector.subscription')->getSubscription());
  }

}

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

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