lupus_decoupled-1.x-dev/modules/lupus_decoupled_menu/tests/src/Kernel/LupusDecoupledMenuInstallTest.php

modules/lupus_decoupled_menu/tests/src/Kernel/LupusDecoupledMenuInstallTest.php
<?php

namespace Drupal\Tests\lupus_decoupled_menu\Kernel;

use Drupal\KernelTests\KernelTestBase;
use Drupal\user\Entity\Role;

/**
 * Tests the lupus_decoupled_menu module install hook.
 *
 * @group lupus_decoupled
 */
class LupusDecoupledMenuInstallTest extends KernelTestBase {

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'system',
    'user',
    'serialization',
    'rest',
    'rest_menu_items',
    'menu_link_content',
    'link',
    'path_alias',
  ];

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();
    $this->installEntitySchema('user');
    $this->installEntitySchema('menu_link_content');
    $this->installConfig(['system', 'user', 'rest_menu_items']);
  }

  /**
   * Test that the install hook properly configures REST resources.
   */
  public function testInstallHookConfiguresRestResource() {
    // Install the module to trigger the install hook.
    $this->container->get('module_installer')->install(['lupus_decoupled_menu'], FALSE);

    // Check that the REST resource configuration is created.
    $rest_config = $this->config('rest.resource.rest_menu_item');
    $this->assertTrue($rest_config->get('status'), 'REST resource is enabled.');
    $this->assertEquals('rest_menu_item', $rest_config->get('id'));
    $this->assertEquals(['GET'], $rest_config->get('configuration.methods'));
    $this->assertEquals(['json'], $rest_config->get('configuration.formats'));
    $this->assertEquals(['cookie'], $rest_config->get('configuration.authentication'));

    // Check that permissions are granted to anonymous and authenticated users.
    $anonymous_role = Role::load('anonymous');
    $this->assertTrue(
      $anonymous_role->hasPermission('restful get rest_menu_item'),
      'Anonymous users have permission to access REST menu items.'
    );

    $authenticated_role = Role::load('authenticated');
    $this->assertTrue(
      $authenticated_role->hasPermission('restful get rest_menu_item'),
      'Authenticated users have permission to access REST menu items.'
    );
  }

  /**
   * Test that the install hook handles existing REST configuration gracefully.
   */
  public function testInstallHookWithExistingRestConfig() {
    // Pre-create a complete REST resource configuration.
    $this->config('rest.resource.rest_menu_item')
      ->set('status', TRUE)
      ->set('id', 'rest_menu_item')
      ->set('plugin_id', 'rest_menu_item')
      ->set('granularity', 'resource')
      ->set('dependencies.module', ['rest_menu_items', 'serialization', 'user'])
      ->set('configuration.methods', ['GET'])
      ->set('configuration.formats', ['json'])
      ->set('configuration.authentication', ['cookie'])
      ->save();

    // Install the module to trigger the install hook.
    $this->container->get('module_installer')->install(['lupus_decoupled_menu'], FALSE);

    // Check that existing REST resource configuration is preserved.
    $rest_config = $this->config('rest.resource.rest_menu_item');
    $this->assertTrue($rest_config->get('status'), 'Existing REST resource configuration is preserved.');
    $this->assertEquals('rest_menu_item', $rest_config->get('id'));
    $this->assertEquals(['GET'], $rest_config->get('configuration.methods'));
    $this->assertEquals(['json'], $rest_config->get('configuration.formats'));
    $this->assertEquals(['cookie'], $rest_config->get('configuration.authentication'));
  }

}

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

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