function ConfigDiffTest::testDiff

Same name and namespace in other branches
  1. 9 core/tests/Drupal/KernelTests/Core/Config/ConfigDiffTest.php \Drupal\KernelTests\Core\Config\ConfigDiffTest::testDiff()
  2. 8.9.x core/tests/Drupal/KernelTests/Core/Config/ConfigDiffTest.php \Drupal\KernelTests\Core\Config\ConfigDiffTest::testDiff()
  3. 11.x core/tests/Drupal/KernelTests/Core/Config/ConfigDiffTest.php \Drupal\KernelTests\Core\Config\ConfigDiffTest::testDiff()

Tests calculating the difference between two sets of configuration.

File

core/tests/Drupal/KernelTests/Core/Config/ConfigDiffTest.php, line 24

Class

ConfigDiffTest
Calculating the difference between two sets of configuration.

Namespace

Drupal\KernelTests\Core\Config

Code

public function testDiff() : void {
  $active = $this->container
    ->get('config.storage');
  $sync = $this->container
    ->get('config.storage.sync');
  $config_name = 'config_test.system';
  $change_key = 'foo';
  $remove_key = '404';
  $add_key = 'biff';
  $add_data = 'bangPow';
  $change_data = 'foobar';
  // Install the default config.
  $this->installConfig([
    'config_test',
  ]);
  $original_data = \Drupal::config($config_name)->get();
  // Change a configuration value in sync.
  $sync_data = $original_data;
  $sync_data[$change_key] = $change_data;
  $sync_data[$add_key] = $add_data;
  $sync->write($config_name, $sync_data);
  // Verify that the diff reflects a change.
  $diff = \Drupal::service('config.manager')->diff($active, $sync, $config_name);
  $edits = $diff->getEdits();
  $this->assertYamlEdit($edits, $change_key, 'change', [
    $change_key . ': ' . $original_data[$change_key],
  ], [
    $change_key . ': ' . $change_data,
  ]);
  // Reset data back to original, and remove a key
  $sync_data = $original_data;
  unset($sync_data[$remove_key]);
  $sync->write($config_name, $sync_data);
  // Verify that the diff reflects a removed key.
  $diff = \Drupal::service('config.manager')->diff($active, $sync, $config_name);
  $edits = $diff->getEdits();
  $this->assertYamlEdit($edits, $change_key, 'copy');
  $this->assertYamlEdit($edits, $remove_key, 'delete', [
    $remove_key . ': ' . $original_data[$remove_key],
  ], FALSE);
  // Reset data back to original and add a key
  $sync_data = $original_data;
  $sync_data[$add_key] = $add_data;
  $sync->write($config_name, $sync_data);
  // Verify that the diff reflects an added key.
  $diff = \Drupal::service('config.manager')->diff($active, $sync, $config_name);
  $edits = $diff->getEdits();
  $this->assertYamlEdit($edits, $change_key, 'copy');
  $this->assertYamlEdit($edits, $add_key, 'add', FALSE, [
    $add_key . ': ' . $add_data,
  ]);
  // Test diffing a renamed config entity.
  $test_entity_id = $this->randomMachineName();
  $test_entity = \Drupal::entityTypeManager()->getStorage('config_test')
    ->create([
    'id' => $test_entity_id,
    'label' => $this->randomMachineName(),
  ]);
  $test_entity->save();
  $data = $active->read('config_test.dynamic.' . $test_entity_id);
  $sync->write('config_test.dynamic.' . $test_entity_id, $data);
  $config_name = 'config_test.dynamic.' . $test_entity_id;
  $diff = \Drupal::service('config.manager')->diff($active, $sync, $config_name, $config_name);
  // Prove the fields match.
  $edits = $diff->getEdits();
  $this->assertEquals('copy', $edits[0]->type, 'The first item in the diff is a copy.');
  $this->assertCount(1, $edits, 'There is one item in the diff');
  // Rename the entity.
  $new_test_entity_id = $this->randomMachineName();
  $test_entity->set('id', $new_test_entity_id);
  $test_entity->save();
  $diff = \Drupal::service('config.manager')->diff($active, $sync, 'config_test.dynamic.' . $new_test_entity_id, $config_name);
  $edits = $diff->getEdits();
  $this->assertYamlEdit($edits, 'uuid', 'copy');
  $this->assertYamlEdit($edits, 'id', 'change', [
    'id: ' . $new_test_entity_id,
  ], [
    'id: ' . $test_entity_id,
  ]);
  $this->assertYamlEdit($edits, 'label', 'copy');
  $this->assertEquals('copy', $edits[2]->type, 'The third item in the diff is a copy.');
  $this->assertCount(3, $edits, 'There are three items in the diff.');
}

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