function ContentModerationWorkflowConfigTest::testDeletingStateViaConfiguration

Same name in other branches
  1. 9 core/modules/content_moderation/tests/src/Kernel/ContentModerationWorkflowConfigTest.php \Drupal\Tests\content_moderation\Kernel\ContentModerationWorkflowConfigTest::testDeletingStateViaConfiguration()
  2. 8.9.x core/modules/content_moderation/tests/src/Kernel/ContentModerationWorkflowConfigTest.php \Drupal\Tests\content_moderation\Kernel\ContentModerationWorkflowConfigTest::testDeletingStateViaConfiguration()
  3. 11.x core/modules/content_moderation/tests/src/Kernel/ContentModerationWorkflowConfigTest.php \Drupal\Tests\content_moderation\Kernel\ContentModerationWorkflowConfigTest::testDeletingStateViaConfiguration()

Tests deleting a state via config import.

File

core/modules/content_moderation/tests/src/Kernel/ContentModerationWorkflowConfigTest.php, line 86

Class

ContentModerationWorkflowConfigTest
Tests how Content Moderation handles workflow config changes.

Namespace

Drupal\Tests\content_moderation\Kernel

Code

public function testDeletingStateViaConfiguration() : void {
    $config_sync = \Drupal::service('config.storage.sync');
    // Alter the workflow data.
    $config_data = $this->config('workflows.workflow.editorial')
        ->get();
    unset($config_data['type_settings']['states']['test1']);
    $config_sync->write('workflows.workflow.editorial', $config_data);
    // Alter the data of another entity type.
    $config_data = $this->config('node.type.example')
        ->get();
    $config_data['description'] = 'A new description';
    $config_sync->write('node.type.example', $config_data);
    // Alter the values of simple config.
    $config_data = $this->config('core.extension')
        ->get();
    $config_data['module']['node'] = 1;
    $config_sync->write('core.extension', $config_data);
    // There are no Nodes with the moderation state test1, so this should run
    // with no errors.
    $this->configImporter()
        ->reset()
        ->import();
    $node = Node::create([
        'type' => 'example',
        'title' => 'Test title',
        'moderation_state' => 'test2',
    ]);
    $node->save();
    $config_data = $this->config('workflows.workflow.editorial')
        ->get();
    unset($config_data['type_settings']['states']['test2']);
    unset($config_data['type_settings']['states']['test3']);
    \Drupal::service('config.storage.sync')->write('workflows.workflow.editorial', $config_data);
    // Now there is a Node with the moderation state test2, this will fail.
    try {
        $this->configImporter()
            ->reset()
            ->import();
        $this->fail('ConfigImporterException not thrown, invalid import was not stopped due to deleted state.');
    } catch (ConfigImporterException $e) {
        $this->assertEquals('There were errors validating the config synchronization.' . PHP_EOL . 'The moderation state Test two is being used, but is not in the source storage.', $e->getMessage());
        $error_log = $this->configImporter
            ->getErrors();
        $expected = [
            'The moderation state Test two is being used, but is not in the source storage.',
        ];
        $this->assertEquals($expected, $error_log);
    }
    \Drupal::service('config.storage.sync')->delete('workflows.workflow.editorial');
    // An error should be thrown when trying to delete an in use workflow.
    try {
        $this->configImporter()
            ->reset()
            ->import();
        $this->fail('ConfigImporterException not thrown, invalid import was not stopped due to deleted workflow.');
    } catch (ConfigImporterException $e) {
        $this->assertEquals('There were errors validating the config synchronization.' . PHP_EOL . 'The workflow Editorial is being used, and cannot be deleted.', $e->getMessage());
        $error_log = $this->configImporter
            ->getErrors();
        $expected = [
            'The workflow Editorial is being used, and cannot be deleted.',
        ];
        $this->assertEquals($expected, $error_log);
    }
}

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