Security update for Core, with self-updated composer
[yaffs-website] / web / core / modules / menu_link_content / tests / src / Kernel / Plugin / migrate / process / LinkUriTest.php
diff --git a/web/core/modules/menu_link_content/tests/src/Kernel/Plugin/migrate/process/LinkUriTest.php b/web/core/modules/menu_link_content/tests/src/Kernel/Plugin/migrate/process/LinkUriTest.php
new file mode 100644 (file)
index 0000000..74e88d1
--- /dev/null
@@ -0,0 +1,122 @@
+<?php
+
+namespace Drupal\Tests\menu_link_content\Kernel\Plugin\migrate\process;
+
+use Drupal\menu_link_content\Plugin\migrate\process\LinkUri;
+use Drupal\migrate\MigrateException;
+use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\Row;
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * Tests \Drupal\menu_link_content\Plugin\migrate\process\LinkUri.
+ *
+ * @group menu_link_content
+ *
+ * @coversDefaultClass \Drupal\menu_link_content\Plugin\migrate\process\LinkUri
+ */
+class LinkUriTest extends KernelTestBase {
+
+  /**
+   * Tests LinkUri::transform().
+   *
+   * @param array $value
+   *   The value to pass to LinkUri::transform().
+   * @param string $expected
+   *   The expected return value of LinkUri::transform().
+   *
+   * @dataProvider providerTestRouted
+   *
+   * @covers ::transform
+   */
+  public function testRouted(array $value, $expected) {
+    $actual = $this->doTransform($value);
+    $this->assertSame($expected, $actual);
+  }
+
+  /**
+   * Provides test cases for LinkUriTest::testTransform().
+   *
+   * @return array
+   *   An array of test cases, each which the following values:
+   *   - The value array to pass to LinkUri::transform().
+   *   - The expected path returned by LinkUri::transform().
+   */
+  public function providerTestRouted() {
+    $tests = [];
+
+    $value = ['http://example.com'];
+    $expected = 'http://example.com';
+    $tests['with_scheme'] = [$value, $expected];
+
+    $value = ['<front>'];
+    $expected = 'internal:/';
+    $tests['front'] = [$value, $expected];
+
+    return $tests;
+  }
+
+  /**
+   * Tests that Non routed URLs throws an exception.
+   *
+   * @param array $value
+   *   The value to pass to LinkUri::transform().
+   * @param string $exception_message
+   *   The expected exception message.
+   *
+   * @dataProvider providerTestNotRouted
+   */
+  public function testNotRouted(array $value, $exception_message) {
+    $this->setExpectedException(MigrateException::class, $exception_message);
+    $this->doTransform($value);
+  }
+
+  /**
+   * Provides test cases for LinkUriTest::testNotRouted().
+   *
+   * @return array
+   *   An array of test cases, each which the following values:
+   *   - The value array to pass to LinkUri::transform().
+   *   - The expected path returned by LinkUri::transform().
+   *   - (optional) A URL object that the path validator prophecy will return.
+   */
+  public function providerTestNotRouted() {
+    $tests = [];
+
+    $message = 'The path "%s" failed validation.';
+
+    $value = ['/test'];
+    $expected = 'internal:/test';
+    $exception_message = sprintf($message, $expected);
+    $tests['leading_slash'] = [$value, $exception_message];
+
+    $value = ['test'];
+    $expected = 'internal:/test';
+    $exception_message = sprintf($message, $expected);
+    $tests['without_scheme'] = [$value, $exception_message];
+
+    return $tests;
+  }
+
+  /**
+   * Transforms a link path into an 'internal:' or 'entity:' URI.
+   *
+   * @param array $value
+   *   The value to pass to LinkUri::transform().
+   *
+   * @return string
+   *   The transformed link.
+   */
+  public function doTransform(array $value) {
+    $entityTypeManager = $this->container->get('entity_type.manager');
+    $routeBuilder = $this->container->get('router.builder');
+    $row = new Row();
+    $executable = $this->prophesize(MigrateExecutableInterface::class)->reveal();
+
+    $plugin = new LinkUri([], 'link_uri', [], $entityTypeManager, $routeBuilder);
+    $actual = $plugin->transform($value, $executable, $row, 'destinationproperty');
+
+    return $actual;
+  }
+
+}