function MappingTest::testMappingInterpretation

Same name and namespace in other branches
  1. 10 core/tests/Drupal/KernelTests/Config/Schema/MappingTest.php \Drupal\KernelTests\Config\Schema\MappingTest::testMappingInterpretation()

@dataProvider providerMappingInterpretation

File

core/tests/Drupal/KernelTests/Config/Schema/MappingTest.php, line 33

Class

MappingTest
@coversDefaultClass <a href="/api/drupal/core%21lib%21Drupal%21Core%21Config%21Schema%21Mapping.php/class/Mapping/11.x" title="Defines a mapping configuration element." class="local">\Drupal\Core\Config\Schema\Mapping</a> @group Config

Namespace

Drupal\KernelTests\Config\Schema

Code

public function testMappingInterpretation(string $config_name, ?string $property_path, array $expected_valid_keys, array $expected_optional_keys, array $expected_dynamically_valid_keys) : void {
    // Some config needs some dependencies installed.
    switch ($config_name) {
        case 'block.block.branding':
            $this->enableModules([
                'system',
                'block',
            ]);
            
            /** @var \Drupal\Core\Extension\ThemeInstallerInterface $theme_installer */
            $theme_installer = $this->container
                ->get('theme_installer');
            $theme_installer->install([
                'stark',
            ]);
            Block::create([
                'id' => 'branding',
                'plugin' => 'system_branding_block',
                'theme' => 'stark',
                'status' => TRUE,
                'settings' => [
                    'use_site_logo' => TRUE,
                    'use_site_name' => TRUE,
                    'use_site_slogan' => TRUE,
                    'label_display' => FALSE,
                    // TRICKY: these 4 are inherited from `type: block_settings`.
'status' => TRUE,
                    'info' => '',
                    'view_mode' => 'full',
                    'context_mapping' => [],
                ],
            ])->save();
            break;
        case 'block.block.local_tasks':
            $this->enableModules([
                'system',
                'block',
            ]);
            
            /** @var \Drupal\Core\Extension\ThemeInstallerInterface $theme_installer */
            $theme_installer = $this->container
                ->get('theme_installer');
            $theme_installer->install([
                'stark',
            ]);
            Block::create([
                'id' => 'local_tasks',
                'plugin' => 'local_tasks_block',
                'theme' => 'stark',
                'status' => TRUE,
                'settings' => [
                    'primary' => TRUE,
                    'secondary' => FALSE,
                    // TRICKY: these 4 are inherited from `type: block_settings`.
'status' => TRUE,
                    'info' => '',
                    'view_mode' => 'full',
                    'context_mapping' => [],
                ],
            ])->save();
            break;
        case 'block.block.positively_powered___alternate_reality_with_fallback_type___':
            $this->enableModules([
                'config_schema_add_fallback_type_test',
            ]);
            $id = 'positively_powered___alternate_reality_with_fallback_type___';
        case 'block.block.positively_powered':
            $this->enableModules([
                'system',
                'block',
            ]);
            
            /** @var \Drupal\Core\Extension\ThemeInstallerInterface $theme_installer */
            $theme_installer = $this->container
                ->get('theme_installer');
            $theme_installer->install([
                'stark',
            ]);
            Block::create([
                'id' => $id ?? 'positively_powered',
                'plugin' => 'system_powered_by_block',
                'theme' => 'stark',
                'status' => TRUE,
                'settings' => [
                    'label_display' => FALSE,
                    // TRICKY: these 4 are inherited from `type: block_settings`.
'status' => TRUE,
                    'info' => '',
                    'view_mode' => 'full',
                    'context_mapping' => [],
                ],
                // Avoid showing "Powered by Drupal" on 404 responses.
'visibility' => [
                    'I_CAN_CHOOSE_THIS' => [
                        // This is what determines the
'id' => 'response_status',
                        'negate' => FALSE,
                        'status_codes' => [
                            404,
                        ],
                    ],
                ],
            ])->save();
            break;
        case 'config_schema_deprecated_test.settings':
            $this->enableModules([
                'config_schema_deprecated_test',
            ]);
            $config = $this->config('config_schema_deprecated_test.settings');
            // @see \Drupal\KernelTests\Core\Config\ConfigSchemaDeprecationTest
            $config->set('complex_structure_deprecated.type', 'fruits')
                ->set('complex_structure_deprecated.products', [
                'apricot',
                'apple',
            ])
                ->save();
            break;
        case 'editor.editor.funky':
            $this->enableModules([
                'filter',
                'editor',
                'ckeditor5',
            ]);
            FilterFormat::create([
                'format' => 'funky',
                'name' => 'Funky',
            ])->save();
            Editor::create([
                'format' => 'funky',
                'editor' => 'ckeditor5',
                'image_upload' => [
                    'status' => FALSE,
                ],
            ])->save();
            break;
        case 'field.field.node.config_mapping_test.comment_config_mapping_test':
            $this->enableModules([
                'field',
                'node',
                'comment',
                'taxonomy',
                'config_mapping_test',
            ]);
            $this->assertNull(FieldConfig::load('node.config_mapping_test.comment_config_mapping_test'));
            // TRICKY: \Drupal\node\Entity\NodeType::$preview_mode uses
            // DRUPAL_OPTIONAL, which is defined in system.module.
            require_once 'core/modules/system/system.module';
            $this->installConfig([
                'config_mapping_test',
            ]);
            $this->assertNotNull(FieldConfig::load('node.config_mapping_test.comment_config_mapping_test'));
            break;
    }
    
    /** @var \Drupal\Core\Config\TypedConfigManagerInterface $typed_config_manager */
    $typed_config_manager = \Drupal::service('config.typed');
    $mapping = $typed_config_manager->get($config_name);
    if ($property_path) {
        $mapping = $mapping->get($property_path);
    }
    assert($mapping instanceof Mapping);
    $expected_required_keys = array_values(array_diff($expected_valid_keys, $expected_optional_keys));
    $this->assertSame($expected_valid_keys, $mapping->getValidKeys());
    $this->assertSame($expected_required_keys, $mapping->getRequiredKeys());
    $this->assertSame($expected_dynamically_valid_keys, $mapping->getDynamicallyValidKeys());
    $this->assertSame($expected_optional_keys, $mapping->getOptionalKeys());
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.