migmag-1.0.x-dev/migmag_process/tests/src/Unit/Plugin/MigMagLoggerLogTest.php

migmag_process/tests/src/Unit/Plugin/MigMagLoggerLogTest.php
<?php

namespace Drupal\Tests\migmag_process\Unit\Plugin;

use Drupal\Component\Utility\DeprecationHelper;
use Drupal\Core\Logger\LoggerChannelInterface;
use Drupal\Core\Logger\RfcLogLevel;
use Drupal\Tests\migrate\Unit\process\MigrateProcessTestCase;
use Drupal\migmag_process\Plugin\migrate\process\MigMagLoggerLog;
use Drupal\migrate\Plugin\MigrationInterface;
use Drupal\migrate\Plugin\migrate\process\Get;
use Prophecy\Argument;

/**
 * Tests the migmag_logger_log process plugin.
 *
 * @coversDefaultClass \Drupal\migmag_process\Plugin\migrate\process\MigMagLoggerLog
 *
 * @group migmag_process
 */
class MigMagLoggerLogTest extends MigrateProcessTestCase {

  /**
   * Default row source ID values.
   *
   * @const array
   */
  const DEFAULT_SOURCE_ID_VALUES = [
    'id' => 'source_row_id',
  ];

  /**
   * Storage for the messages logged during testing.
   *
   * @var array
   */
  protected static $log;

  /**
   * A LoggerChannelInterface prophecy.
   *
   * @var \Prophecy\Prophecy\ObjectProphecy
   */
  protected $loggerChannel;

  /**
   * A MigrationInterface prophecy.
   *
   * @var \Prophecy\Prophecy\ObjectProphecy
   */
  protected $migration;

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();

    $this->loggerChannel = $this->prophesize(LoggerChannelInterface::class);
    $this->loggerChannel->log(Argument::any(), Argument::type('string'), Argument::type('array'))
      ->will(
        function () {
          [
            $level,
            $message,
            $context,
          ] = func_get_args()[0];

          self::$log = [
            'level' => $level,
            'message' => $message,
            'context' => $context,
          ];
        }
      );

    $this->migration = $this->prophesize(MigrationInterface::class);
    $this->migration->id()->willReturn('test_migration_id');
  }

  /**
   * Tests the transformation of the provided values.
   *
   * @dataProvider providerTestTransform
   * @covers ::transform
   */
  public function testTransform($value, string $expected_log_message, $expected_log_level = RfcLogLevel::INFO, array $plugin_config = [], $source_row_ids = self::DEFAULT_SOURCE_ID_VALUES, $expected_source_id_values = self::DEFAULT_SOURCE_ID_VALUES) {
    self::$log = [];
    $this->row->expects($this->once())
      ->method('getSourceIdValues')
      ->willReturn($source_row_ids);
    $this->plugin = new MigMagLoggerLog(
      $plugin_config,
      'migmag_logger_log',
      [],
      $this->migration->reveal(),
      $this->loggerChannel->reveal()
    );

    $result = $this->plugin->transform($value, $this->migrateExecutable, $this->row, 'destination_property');

    // Original value should have been returned without any changes.
    $this->assertEquals($value, $result);
    // Check the arguments sent to the logger.
    $this->assertEquals(
      [
        'message' => $expected_log_message,
        'level' => $expected_log_level,
        'context' => [
          'migration_plugin_id' => 'test_migration_id',
          'source_id_values' => $expected_source_id_values,
        ],
      ],
      self::$log
    );
  }

  /**
   * Data provider for ::testTransform.
   *
   * @return array[]
   *   The test cases.
   */
  public static function providerTestTransform(): array {
    $complex_object = new Get(['plugin_config' => 'value'], 'get', []);
    $expected_object_message = DeprecationHelper::backwardsCompatibleCall(
      \Drupal::VERSION,
      '10.3',
      fn () => "Drupal\migrate\Plugin\migrate\process\Get::__set_state(array('pluginId' => 'get', 'pluginDefinition' => array(), 'configuration' => array('plugin_config' => 'value'), 'stringTranslation' => NULL, '_serviceIds' => array(), '_entityStorages' => array(), 'messenger' => NULL, 'stopPipeline' => false, 'multiple' => NULL))",
      fn () => "Drupal\migrate\Plugin\migrate\process\Get::__set_state(array('pluginId' => 'get', 'pluginDefinition' => array(), 'configuration' => array('plugin_config' => 'value'), 'stringTranslation' => NULL, '_serviceIds' => array(), '_entityStorages' => array(), 'messenger' => NULL, 'multiple' => NULL))",
    );
    // With PHP 8.2+, we have a trailing backslash.
    if (version_compare(phpversion(), '8.2.0-dev', 'ge')) {
      $expected_object_message = '\\' . $expected_object_message;
    }
    $simple_object = (object) [
      'key' => 'value',
      'another key' => 'another value',
    ];

    return [
      'null' => [
        'value' => NULL,
        'expected_log_message' => 'NULL',
      ],
      'boolean false' => [
        'value' => FALSE,
        'expected_log_message' => '(boolean) FALSE',
      ],
      'string false' => [
        'value' => 'FALSE',
        'expected_log_message' => "(string) 'FALSE'",
      ],
      'string' => [
        'value' => 'string',
        'expected_log_message' => "(string) 'string'",
      ],
      'simple object' => [
        'value' => $simple_object,
        'expected_log_message' => "(object) array('key' => 'value', 'another key' => 'another value')",
      ],
      'complex object' => [
        'value' => $complex_object,
        'expected_log_message' => $expected_object_message,
      ],
      'Array' => [
        'value' => [
          'boolean false' => FALSE,
          'boolean true' => TRUE,
          'string' => 'string',
          'null' => NULL,
          'array' => [1, 2],
        ],
        'expected_log_message' => "(array) array(boolean false => (boolean) FALSE, boolean true => (boolean) TRUE, string => (string) 'string', null => NULL, array => (array) array(1, 2))",
      ],
      'Indexed array' => [
        'value' => [
          'string',
          1473635,
          FALSE,
          $simple_object,
        ],
        'expected_log_message' => "(array) array((string) 'string', (integer) 1473635, (boolean) FALSE, (object) array('key' => 'value', 'another key' => 'another value'))",
      ],
      'With message' => [
        'value' => 'value',
        'expected_log_message' => "A log message",
        // RfcLogLevel::INFO.
        'expected_log_level' => 6,
        'plugin_config' => [
          'message' => 'A log message',
        ],
      ],
      'With message and args' => [
        'value' => 'value',
        'expected_log_message' => "A log message with args: (string) 'value'",
        'expected_log_level' => 6,
        'plugin_config' => [
          'message' => "A log message with args: %s",
        ],
      ],
      'With message, integer level and args' => [
        'value' => [
          'first value',
          'second value',
        ],
        'expected_log_message' => "A log message with args: (string) 'first value'",
        'expected_log_level' => 1,
        'plugin_config' => [
          'message' => "A log message with args: %s",
          'log_level' => 1,
        ],
      ],
      'With message, string level and args' => [
        'value' => [
          'first value',
          ['second value'],
        ],
        'expected_log_message' => "A log message with args: (string) 'first value'; (array) array('second value'); missing arg: %s",
        'expected_log_level' => 'warning',
        'plugin_config' => [
          'message' => "A log message with args: %s; %s; missing arg: %s",
          'log_level' => 'warning',
        ],
        'source_row_ids' => [],
        'expected_source_id_values' => 'No source IDs (maybe a subprocess?)',
      ],
    ];
  }

}

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

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