diff --git a/core/modules/hal/tests/src/Kernel/HalLinkManagerTest.php b/core/modules/hal/tests/src/Kernel/HalLinkManagerTest.php index 098868ea89a95953a1e6b0ca4d426612745d2c77..def2789443543879e230918c46ff2bebce4d31bf 100644 --- a/core/modules/hal/tests/src/Kernel/HalLinkManagerTest.php +++ b/core/modules/hal/tests/src/Kernel/HalLinkManagerTest.php @@ -46,36 +46,123 @@ protected function setUp() { /** * @covers ::getTypeUri + * @dataProvider providerTestGetTypeUri */ - public function testGetTypeUri() { + public function testGetTypeUri($link_domain, $entity_type, $bundle, array $context, $expected_return, array $expected_context) { + $hal_settings = \Drupal::configFactory()->getEditable('hal.settings'); + + if ($link_domain === NULL) { + $hal_settings->clear('link_domain'); + } + else { + $hal_settings->set('link_domain', $link_domain)->save(TRUE); + } + /* @var \Drupal\rest\LinkManager\TypeLinkManagerInterface $type_manager */ $type_manager = \Drupal::service('hal.link_manager.type'); - $base = Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(); - $link = $type_manager->getTypeUri('node', 'page'); - $this->assertSame($link, $base . 'rest/type/node/page'); - // Now with optional context. - $link = $type_manager->getTypeUri('node', 'page', ['hal_test' => TRUE]); - $this->assertSame($link, 'hal_test_type'); - // Test BC: hook_rest_type_uri_alter(). - $link = $type_manager->getTypeUri('node', 'page', ['rest_test' => TRUE]); - $this->assertSame($link, 'rest_test_type'); + + $link = $type_manager->getTypeUri($entity_type, $bundle, $context); + $this->assertSame($link, str_replace('BASE_URL/', Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(), $expected_return)); + $this->assertEquals($context, $expected_context); + } + + public function providerTestGetTypeUri() { + $base_test_case = [ + 'link_domain' => NULL, + 'entity_type' => 'node', + 'bundle' => 'page', + ]; + + return [ + 'site URL' => $base_test_case + [ + 'context' => [], + 'link_domain' => NULL, + 'expected return' => 'BASE_URL/rest/type/node/page', + 'expected context' => [], + ], + // Test hook_hal_type_uri_alter(). + 'site URL, with optional context, to test hook_hal_type_uri_alter()' => $base_test_case + [ + 'context' => ['hal_test' => TRUE], + 'expected return' => 'hal_test_type', + 'expected context' => ['hal_test' => TRUE], + ], + // Test hook_rest_type_uri_alter() — for backwards compatibility. + 'site URL, with optional context, to test hook_rest_type_uri_alter()' => $base_test_case + [ + 'context' => ['rest_test' => TRUE], + 'expected return' => 'rest_test_type', + 'expected context' => ['rest_test' => TRUE], + ], + 'configured URL' => [ + 'link_domain' => 'http://llamas-rock.com/for-real/', + 'entity_type' => 'node', + 'bundle' => 'page', + 'context' => [], + 'expected return' => 'http://llamas-rock.com/for-real/rest/type/node/page', + 'expected context' => [], + ], + ]; } /** * @covers ::getRelationUri + * @dataProvider providerTestGetRelationUri */ - public function testGetRelationUri() { + public function testGetRelationUri($link_domain, $entity_type, $bundle, $field_name, array $context, $expected_return, array $expected_context) { + $hal_settings = \Drupal::configFactory()->getEditable('hal.settings'); + + if ($link_domain === NULL) { + $hal_settings->clear('link_domain'); + } + else { + $hal_settings->set('link_domain', $link_domain)->save(TRUE); + } + /* @var \Drupal\rest\LinkManager\RelationLinkManagerInterface $relation_manager */ $relation_manager = \Drupal::service('hal.link_manager.relation'); - $base = Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(); - $link = $relation_manager->getRelationUri('node', 'page', 'field_ref'); - $this->assertSame($link, $base . 'rest/relation/node/page/field_ref'); - // Now with optional context. - $link = $relation_manager->getRelationUri('node', 'page', 'foobar', ['hal_test' => TRUE]); - $this->assertSame($link, 'hal_test_relation'); - // Test BC: hook_rest_relation_uri_alter(). - $link = $relation_manager->getRelationUri('node', 'page', 'foobar', ['rest_test' => TRUE]); - $this->assertSame($link, 'rest_test_relation'); + + $link = $relation_manager->getRelationUri($entity_type, $bundle, $field_name, $context); + $this->assertSame($link, str_replace('BASE_URL/', Url::fromRoute('<front>', [], ['absolute' => TRUE])->toString(), $expected_return)); + $this->assertEquals($context, $expected_context); + } + + public function providerTestGetRelationUri() { + $field_name = $this->randomMachineName(); + $base_test_case = [ + 'link_domain' => NULL, + 'entity_type' => 'node', + 'bundle' => 'page', + 'field_name' => $field_name, + ]; + + return [ + 'site URL' => $base_test_case + [ + 'context' => [], + 'link_domain' => NULL, + 'expected return' => 'BASE_URL/rest/relation/node/page/' . $field_name, + 'expected context' => [], + ], + // Test hook_hal_relation_uri_alter(). + 'site URL, with optional context, to test hook_hal_relation_uri_alter()' => $base_test_case + [ + 'context' => ['hal_test' => TRUE], + 'expected return' => 'hal_test_relation', + 'expected context' => ['hal_test' => TRUE], + ], + // Test hook_rest_relation_uri_alter() — for backwards compatibility. + 'site URL, with optional context, to test hook_rest_relation_uri_alter()' => $base_test_case + [ + 'context' => ['rest_test' => TRUE], + 'expected return' => 'rest_test_relation', + 'expected context' => ['rest_test' => TRUE], + ], + 'configured URL' => [ + 'link_domain' => 'http://llamas-rock.com/for-real/', + 'entity_type' => 'node', + 'bundle' => 'page', + 'field_name' => $field_name, + 'context' => [], + 'expected return' => 'http://llamas-rock.com/for-real/rest/relation/node/page/' . $field_name, + 'expected context' => [], + ], + ]; } /**