annotate modules/contrib/migrate_plus/tests/src/Unit/process/DomStrReplaceTest.php @ 5:12f9dff5fda9 tip

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:34:47 +0100
parents
children
rev   line source
Chris@5 1 <?php
Chris@5 2
Chris@5 3 namespace Drupal\Tests\migrate_plus\Unit\process;
Chris@5 4
Chris@5 5 use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException;
Chris@5 6 use Drupal\Component\Utility\Html;
Chris@5 7 use Drupal\migrate\MigrateSkipRowException;
Chris@5 8 use Drupal\migrate_plus\Plugin\migrate\process\DomStrReplace;
Chris@5 9 use Drupal\Tests\migrate\Unit\process\MigrateProcessTestCase;
Chris@5 10
Chris@5 11 /**
Chris@5 12 * Tests the dom_str_replace process plugin.
Chris@5 13 *
Chris@5 14 * @group migrate
Chris@5 15 * @coversDefaultClass \Drupal\migrate_plus\Plugin\migrate\process\DomStrReplace
Chris@5 16 */
Chris@5 17 class DomStrReplaceTest extends MigrateProcessTestCase {
Chris@5 18
Chris@5 19 /**
Chris@5 20 * Example configuration for the dom_str_replace process plugin.
Chris@5 21 *
Chris@5 22 * @var array
Chris@5 23 */
Chris@5 24 protected $exampleConfiguration = [
Chris@5 25 'mode' => 'attribute',
Chris@5 26 'expression' => '//a',
Chris@5 27 'attribute_options' => [
Chris@5 28 'name' => 'href',
Chris@5 29 ],
Chris@5 30 'search' => 'foo',
Chris@5 31 'replace' => 'bar',
Chris@5 32 ];
Chris@5 33
Chris@5 34 /**
Chris@5 35 * @covers ::__construct
Chris@5 36 *
Chris@5 37 * @dataProvider providerTestConfigEmpty
Chris@5 38 */
Chris@5 39 public function testConfigValidation(array $config_overrides, $message) {
Chris@5 40 $configuration = $config_overrides + $this->exampleConfiguration;
Chris@5 41 $value = '<p>A simple paragraph.</p>';
Chris@5 42 $this->setExpectedException(InvalidPluginDefinitionException::class, $message);
Chris@5 43 (new DomStrReplace($configuration, 'dom_str_replace', []))
Chris@5 44 ->transform($value, $this->migrateExecutable, $this->row, 'destinationproperty');
Chris@5 45 }
Chris@5 46
Chris@5 47 /**
Chris@5 48 * Dataprovider for testConfigValidation().
Chris@5 49 */
Chris@5 50 public function providerTestConfigEmpty() {
Chris@5 51 $cases = [
Chris@5 52 'expression-null' => [
Chris@5 53 ['expression' => NULL],
Chris@5 54 "Configuration option 'expression' is required.",
Chris@5 55 ],
Chris@5 56 'mode-null' => [
Chris@5 57 ['mode' => NULL],
Chris@5 58 "Configuration option 'mode' is required.",
Chris@5 59 ],
Chris@5 60 'mode-invalid' => [
Chris@5 61 ['mode' => 'invalid'],
Chris@5 62 'Configuration option "mode" only accepts the following values: attribute.',
Chris@5 63 ],
Chris@5 64 'attribute_options-null' => [
Chris@5 65 ['attribute_options' => NULL],
Chris@5 66 "Configuration option 'attribute_options' is required.",
Chris@5 67 ],
Chris@5 68 'search-null' => [
Chris@5 69 ['search' => NULL],
Chris@5 70 "Configuration option 'search' is required.",
Chris@5 71 ],
Chris@5 72 'replace-null' => [
Chris@5 73 ['replace' => NULL],
Chris@5 74 "Configuration option 'replace' is required.",
Chris@5 75 ],
Chris@5 76 ];
Chris@5 77
Chris@5 78 return $cases;
Chris@5 79 }
Chris@5 80
Chris@5 81 /**
Chris@5 82 * @covers ::transform
Chris@5 83 */
Chris@5 84 public function testTransformInvalidInput() {
Chris@5 85 $configuration = [
Chris@5 86 'expression' => '//a',
Chris@5 87 'mode' => 'attribute',
Chris@5 88 'attribute_options' => [
Chris@5 89 'name' => 'href',
Chris@5 90 ],
Chris@5 91 'search' => 'foo',
Chris@5 92 'replace' => 'bar',
Chris@5 93 ];
Chris@5 94 $value = 'string';
Chris@5 95 $this->setExpectedException(MigrateSkipRowException::class, 'The dom_str_replace plugin in the destinationproperty process pipeline requires a \DOMDocument object. You can use the dom plugin to convert a string to \DOMDocument.');
Chris@5 96 (new DomStrReplace($configuration, 'dom_str_replace', []))
Chris@5 97 ->transform($value, $this->migrateExecutable, $this->row, 'destinationproperty');
Chris@5 98 }
Chris@5 99
Chris@5 100 /**
Chris@5 101 * @covers ::transform
Chris@5 102 *
Chris@5 103 * @dataProvider providerTestTransform
Chris@5 104 */
Chris@5 105 public function testTransform($input_string, $configuration, $output_string) {
Chris@5 106 $value = Html::load($input_string);
Chris@5 107 $document = (new DomStrReplace($configuration, 'dom_str_replace', []))
Chris@5 108 ->transform($value, $this->migrateExecutable, $this->row, 'destinationproperty');
Chris@5 109 $this->assertTrue($document instanceof \DOMDocument);
Chris@5 110 $this->assertEquals($output_string, Html::serialize($document));
Chris@5 111 }
Chris@5 112
Chris@5 113 /**
Chris@5 114 * Dataprovider for testTransform().
Chris@5 115 */
Chris@5 116 public function providerTestTransform() {
Chris@5 117 $cases = [
Chris@5 118 'string:case_sensitive' => [
Chris@5 119 '<a href="/foo/Foo/foo">text</a>',
Chris@5 120 $this->exampleConfiguration,
Chris@5 121 '<a href="/bar/Foo/bar">text</a>',
Chris@5 122 ],
Chris@5 123 'string:case_insensitive' => [
Chris@5 124 '<a href="/foo/Foo/foo">text</a>',
Chris@5 125 [
Chris@5 126 'case_insensitive' => TRUE,
Chris@5 127 ] + $this->exampleConfiguration,
Chris@5 128 '<a href="/bar/bar/bar">text</a>',
Chris@5 129 ],
Chris@5 130 'regex' => [
Chris@5 131 '<a href="/foo/Foo/foo">text</a>',
Chris@5 132 [
Chris@5 133 'search' => '/(.)\1/',
Chris@5 134 'regex' => TRUE,
Chris@5 135 ] + $this->exampleConfiguration,
Chris@5 136 '<a href="/fbar/Fbar/fbar">text</a>',
Chris@5 137 ],
Chris@5 138 ];
Chris@5 139
Chris@5 140 return $cases;
Chris@5 141 }
Chris@5 142
Chris@5 143 }