confi-8.x-2.0-rc1/tests/src/Unit/ConfigImporterServiceTest.php

tests/src/Unit/ConfigImporterServiceTest.php
<?php

namespace Drupal\Tests\config_import\Unit;

// Core components.
use Drupal\Core\Config\FileStorage;
use Drupal\Core\Config\ConfigImporterException;

/**
 * Testing configuration importer service.
 *
 * @group confi
 */
class ConfigImporterServiceTest extends ConfigImporterServiceTestBase {

  /**
   * Check that default directory configured to "sync".
   */
  public function testGetDirectory() {
    static::assertSame(config_get_config_directory(CONFIG_SYNC_DIRECTORY), $this->configImporter->getDirectory());
  }

  /**
   * Check that we unable to set whatever we want.
   *
   * @param string $type
   *   Type of configuration directory.
   */
  public function testSetDirectoryWrongType($type = 'something') {
    $this->expectException(\Exception::class, "The configuration directory type '%s' does not exist", $type);
    $this->configImporter->setDirectory($type);
  }

  /**
   * Check that configuration directory physically exists.
   *
   * @param string $type
   *   Type of configuration directory.
   */
  public function testSetDirectoryNotExists($type = 'something') {
    $GLOBALS['config_directories'][$type] = "/path/to/$type/not-exists";

    $this->expectException(\InvalidArgumentException::class, '%s - is not valid path or type of directory with configurations\.', $GLOBALS['config_directories'][$type]);
    $this->configImporter->setDirectory($type);
  }

  /**
   * Check that configuration will or will not be filtered.
   *
   * @param bool $should_be_filtered
   *   Indicates that configuration must or must not be filtered.
   *
   * @dataProvider providerFilter
   *
   * @covers \Drupal\config_import\ConfigImporterService::export
   * @covers \Drupal\config_import\ConfigImporterService::filter
   */
  public function testFilter($should_be_filtered) {
    if ($should_be_filtered) {
      // The next module contains an alteration hook which will
      // deny importing of configuration.
      $this->enableModules(['config_import_test']);
    }

    // Construct intermediate files storage.
    $tmp_storage = new FileStorage("$this->siteDirectory/confi");

    // Initially we will export all configurations from active storage (it's
    // database usually) into temporary files storage. Then the "filter" method
    // will try to clean temporary storage and deny importing of some configs.
    // WARNING: an order of executions must not be changed!
    foreach (['export', 'filter'] as $method) {
      static::assertNull($this->invokeMethod($method, $tmp_storage));
    }

    static::assertSame(!$should_be_filtered, $tmp_storage->exists(static::TEST_CONFIG));
  }

  /**
   * Check that configuration will be properly imported.
   *
   * @covers \Drupal\config_import\ConfigImporterService::import
   */
  public function testImportConfigs() {
    // Get an active configurations storage.
    $config_storage = $this->getConfigStorage();
    // Remember the value before import which potentially can overwrite it.
    $original_value = $config_storage->read(static::TEST_CONFIG);
    // Set the directory to import configurations from.
    $this->configImporter->setDirectory(\Drupal::service('extension.list.module')->getPath('config_import') . '/tests/config/import');
    // Doing the import.
    $this->configImporter->importConfigs([static::TEST_CONFIG]);

    static::assertSame($original_value, $config_storage->read(static::TEST_CONFIG));
  }

  /**
   * Check that filtered configuration will not be imported.
   */
  public function testImportConfigsFiltered() {
    // Enable the module which disallows import of some configurations.
    $this->enableModules(['config_import_test']);
    // Configuration will be removed from intermediate storage by
    // filtering  and will no longer available for import.
    $this->expectException(ConfigImporterException::class, 'The %s configuration does not exist\.', static::TEST_CONFIG);
    // Do an import and wait for an exception.
    $this->testImportConfigs();
  }

  /**
   * Check that configuration will be imported in maintenance mode.
   *
   * @param string $maintenance_mode
   *   One of available maintenance modes.
   *
   * @dataProvider providerMaintenance
   */
  public function testImportConfigsInMaintenanceMode($maintenance_mode) {
    define('MAINTENANCE_MODE', $maintenance_mode);

    $this->testImportConfigs();
  }

  /**
   * Check that configuration will be exported.
   */
  public function testExportConfigs() {
    $this->configImporter->setDirectory($this->siteDirectory);
    $this->configImporter->exportConfigs([static::TEST_CONFIG]);

    static::assertFileExists(sprintf("$this->siteDirectory/%s.yml", static::TEST_CONFIG));
  }

  /**
   * Data provider.
   *
   * @return array[]
   *   Sets of arguments.
   */
  public static function providerMaintenance() {
    return [['update'], ['install']];
  }

  /**
   * Data provider.
   *
   * @return array[]
   *   Sets of arguments.
   */
  public static function providerFilter() {
    return [[TRUE], [FALSE]];
  }

}

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

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