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);
  }

}

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

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