name-8.x-1.x-dev/tests/src/Kernel/HookUpdate8204.php
tests/src/Kernel/HookUpdate8204.php
<?php
declare(strict_types=1);
namespace Drupal\Tests\name\Kernel;
use Drupal\KernelTests\KernelTestBase;
require_once __DIR__ . '/../../name.install';
/**
* Test the update hook 8204.
*
* @group name
*/
class HookUpdate8204 extends KernelTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = [
'name',
];
/**
* Test the update hook 8204.
*/
public function testNameUpdate8204(): void {
$config_factory = $this->container->get('config.factory');
// Test initial state - configs should not exist.
$this->assertTrue($config_factory->get('name.generate.components')->isNew());
$this->assertTrue($config_factory->get('name.generate.preferred')->isNew());
$this->assertTrue($config_factory->get('name.generate.examples')->isNew());
// Run the update hook.
name_update_8204();
// Test that components config was created.
$components_config = $config_factory->get('name.generate.components');
$this->assertFalse($components_config->isNew());
$this->assertNotEmpty($components_config->get('components'));
$this->assertNotEmpty($components_config->get('gender'));
// Test that preferred config was created.
$preferred_config = $config_factory->get('name.generate.preferred');
$this->assertFalse($preferred_config->isNew());
$this->assertNotEmpty($preferred_config->get('preferred'));
// Test that examples config was created with default data.
$examples_config = $config_factory->get('name.generate.examples');
$this->assertFalse($examples_config->isNew());
$examples = $examples_config->get('examples');
$this->assertNotEmpty($examples);
$this->assertCount(3, $examples);
// Test specific examples data.
$this->assertEquals('Mr', $examples[0]['title']);
$this->assertEquals('John', $examples[0]['given']);
$this->assertEquals('Doe', $examples[0]['family']);
$this->assertEquals('Joe', $examples[0]['preferred']);
$this->assertEquals('Lorem ipsum dolor', $examples[0]['alternative']);
}
/**
* Test migration from old config when it exists.
*/
public function testNameUpdate8204WithOldConfig(): void {
$config_factory = $this->container->get('config.factory');
// Create old config with examples data.
$old_config = $config_factory->getEditable('name.examples.default');
$old_config->set('examples', [
[
'title' => 'Dr',
'given' => 'Jane',
'middle' => 'Marie',
'family' => 'Smith',
'generational' => 'Sr',
'credentials' => 'PhD',
],
]);
$old_config->save(TRUE);
// Verify old config exists.
$this->assertFalse($config_factory->get('name.examples.default')->isNew());
// Run the update hook.
name_update_8204();
// Test that old config was migrated and enhanced.
$examples_config = $config_factory->get('name.generate.examples');
$this->assertFalse($examples_config->isNew());
$examples = $examples_config->get('examples');
$this->assertNotEmpty($examples);
$this->assertCount(1, $examples);
// Test that the migrated data was enhanced with preferred and alternative.
$this->assertEquals('Dr', $examples[0]['title']);
$this->assertEquals('Jane', $examples[0]['given']);
$this->assertEquals('Smith', $examples[0]['family']);
$this->assertEquals('Joe', $examples[0]['preferred']);
$this->assertEquals('Lorem ipsum dolor', $examples[0]['alternative']);
// Test that old config was deleted.
$this->assertTrue($config_factory->get('name.examples.default')->isNew());
}
/**
* Test that update hook doesn't overwrite existing new config.
*/
public function testNameUpdate8204WithExistingNewConfig(): void {
$config_factory = $this->container->get('config.factory');
// Create existing new config.
$existing_config = $config_factory->getEditable('name.generate.examples');
$existing_config->set('examples', [
[
'title' => 'Existing',
'given' => 'Data',
'family' => 'Test',
],
]);
$existing_config->save(TRUE);
// Verify existing config exists.
$this->assertFalse($config_factory->get('name.generate.examples')->isNew());
// Run the update hook.
name_update_8204();
// Test that existing config was not overwritten.
$examples_config = $config_factory->get('name.generate.examples');
$examples = $examples_config->get('examples');
$this->assertCount(1, $examples);
$this->assertEquals('Existing', $examples[0]['title']);
$this->assertEquals('Data', $examples[0]['given']);
$this->assertEquals('Test', $examples[0]['family']);
// Verify no default data was added.
$this->assertArrayNotHasKey('preferred', $examples[0]);
$this->assertArrayNotHasKey('alternative', $examples[0]);
}
/**
* Test that preferred config is only created if it's new.
*/
public function testNameUpdate8204PreferredConfigIsNew(): void {
$config_factory = $this->container->get('config.factory');
// Create existing preferred config.
$existing_preferred = $config_factory->getEditable('name.generate.preferred');
$existing_preferred->set('preferred', ['Existing' => 'Test']);
$existing_preferred->save(TRUE);
// Verify existing preferred config exists.
$this->assertFalse($config_factory->get('name.generate.preferred')->isNew());
// Run the update hook.
name_update_8204();
// Test that existing preferred config was not overwritten.
$preferred_config = $config_factory->get('name.generate.preferred');
$preferred = $preferred_config->get('preferred');
$this->assertEquals(['Existing' => 'Test'], $preferred);
// Verify default preferred data was not added.
$this->assertArrayNotHasKey('Abraham', $preferred);
$this->assertArrayNotHasKey('Alan', $preferred);
}
}
