lightning_api-8.x-4.x-dev/tests/src/Functional/ApiDocsPathAliasTest.php

tests/src/Functional/ApiDocsPathAliasTest.php
<?php

namespace Drupal\Tests\lightning_api\Functional;

use Drupal\Tests\BrowserTestBase;

/**
 * @group lightning_api
 *
 * @requires module openapi_jsonapi
 * @requires module openapi_ui_redoc
 */
class ApiDocsPathAliasTest extends BrowserTestBase {

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'node',
    'openapi_ui_redoc',
    'openapi_jsonapi',
    'path',
  ];

  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';

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

    $account = $this->createUser(['access openapi api docs']);
    $this->drupalLogin($account);
  }

  /**
   * Tests that Lightning API creates an `/api-docs` alias on install.
   */
  public function testPathAlias(): void {
    $this->container->get('module_installer')->install(['lightning_api']);
    $this->drupalGet('/api-docs');
    $this->assertSession()->statusCodeEquals(200);
  }

  /**
   * Tests that an existing `/api-docs` alias is not changed.
   */
  public function testExistingAliasNotOverwritten(): void {
    $node_type = $this->drupalCreateContentType();
    $node = $this->drupalCreateNode([
      'type' => $node_type->id(),
      'path' => '/api-docs',
    ]);

    $this->drupalGet($node->toUrl());
    $assert_session = $this->assertSession();
    $assert_session->statusCodeEquals(200);
    $assert_session->addressEquals('/api-docs');

    $this->container->get('module_installer')->install(['lightning_api']);
    $this->getSession()->reload();
    $assert_session->statusCodeEquals(200);
    $assert_session->pageTextContains($node->getTitle());
  }

  /**
   * Data provider for ::testOpenApiModulesMustBeInstalled().
   *
   * @return array[]
   *   The test cases.
   */
  public function providerOpenApiModulesMustBeInstalled(): array {
    return [
      ['openapi_ui_redoc'],
      ['openapi_jsonapi'],
    ];
  }

  /**
   * Tests the alias isn't created if OpenAPI modules aren't installed.
   *
   * @param string $module_to_uninstall
   *   The name of the module to uninstall before installing Lightning API.
   *
   * @dataProvider providerOpenApiModulesMustBeInstalled
   */
  public function testOpenApiModulesMustBeInstalled(string $module_to_uninstall): void {
    $module_installer = $this->container->get('module_installer');
    $module_installer->uninstall([$module_to_uninstall]);
    $module_installer->install(['lightning_api']);

    $this->drupalGet('/api-docs');
    $this->assertSession()->statusCodeEquals(404);
  }

}

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

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