diff --git a/core/modules/link/tests/src/Unit/Plugin/Validation/Constraint/LinkAccessConstraintValidatorTest.php b/core/modules/link/tests/src/Unit/Plugin/Validation/Constraint/LinkAccessConstraintValidatorTest.php index b4639f2aadd572e701e50c5c2a6d19e95d4c2698..020d382258d82874bc44a02cc815e4c8ce130bb7 100644 --- a/core/modules/link/tests/src/Unit/Plugin/Validation/Constraint/LinkAccessConstraintValidatorTest.php +++ b/core/modules/link/tests/src/Unit/Plugin/Validation/Constraint/LinkAccessConstraintValidatorTest.php @@ -20,19 +20,39 @@ class LinkAccessConstraintValidatorTest extends UnitTestCase { /** * Tests the access validation constraint for links. * - * @param \Drupal\link\LinkItemInterface $value - * The link item. - * @param \Drupal\Core\Session\AccountProxyInterface $user - * The user account. - * @param bool $valid - * A boolean indicating if the combination is expected to be valid. - * * @covers ::validate * @dataProvider providerValidate */ - public function testValidate($value, $user, $valid) { - $context = $this->createMock(ExecutionContextInterface::class); + public function testValidate(bool $mayLinkAnyPage, bool $urlAccess, bool $valid): void { + // Mock a Url object that returns a boolean indicating user access. + $url = $this->getMockBuilder('Drupal\Core\Url') + ->disableOriginalConstructor() + ->getMock(); + if ($mayLinkAnyPage) { + $url->expects($this->never()) + ->method('access'); + } + else { + $url->expects($this->once()) + ->method('access') + ->willReturn($urlAccess); + } + + // Mock a link object that returns the URL object. + $link = $this->createMock('Drupal\link\LinkItemInterface'); + $link->expects($this->any()) + ->method('getUrl') + ->willReturn($url); + + // Mock a user object that returns a boolean indicating user access to all + // links. + $user = $this->createMock('Drupal\Core\Session\AccountProxyInterface'); + $user->expects($this->any()) + ->method('hasPermission') + ->with($this->equalTo('link to any page')) + ->willReturn($mayLinkAnyPage); + $context = $this->createMock(ExecutionContextInterface::class); if ($valid) { $context->expects($this->never()) ->method('addViolation'); @@ -43,10 +63,9 @@ public function testValidate($value, $user, $valid) { } $constraint = new LinkAccessConstraint(); - $validate = new LinkAccessConstraintValidator($user); $validate->initialize($context); - $validate->validate($value, $constraint); + $validate->validate($link, $constraint); } /** @@ -57,41 +76,11 @@ public function testValidate($value, $user, $valid) { * * @see \Drupal\Tests\link\LinkAccessConstraintValidatorTest::validate() */ - public function providerValidate() { - $data = []; - - $cases = [ - ['may_link_any_page' => TRUE, 'url_access' => TRUE, 'valid' => TRUE], - ['may_link_any_page' => TRUE, 'url_access' => FALSE, 'valid' => TRUE], - ['may_link_any_page' => FALSE, 'url_access' => TRUE, 'valid' => TRUE], - ['may_link_any_page' => FALSE, 'url_access' => FALSE, 'valid' => FALSE], - ]; - - foreach ($cases as $case) { - // Mock a Url object that returns a boolean indicating user access. - $url = $this->getMockBuilder('Drupal\Core\Url') - ->disableOriginalConstructor() - ->getMock(); - $url->expects($this->once()) - ->method('access') - ->willReturn($case['url_access']); - // Mock a link object that returns the URL object. - $link = $this->createMock('Drupal\link\LinkItemInterface'); - $link->expects($this->any()) - ->method('getUrl') - ->willReturn($url); - // Mock a user object that returns a boolean indicating user access to all - // links. - $user = $this->createMock('Drupal\Core\Session\AccountProxyInterface'); - $user->expects($this->any()) - ->method('hasPermission') - ->with($this->equalTo('link to any page')) - ->willReturn($case['may_link_any_page']); - - $data[] = [$link, $user, $case['valid']]; - } - - return $data; + public static function providerValidate(): \Generator { + yield [TRUE, TRUE, TRUE]; + yield [TRUE, FALSE, TRUE]; + yield [FALSE, TRUE, TRUE]; + yield [FALSE, FALSE, FALSE]; } } diff --git a/core/modules/link/tests/src/Unit/Plugin/Validation/Constraint/LinkNotExistingInternalConstraintValidatorTest.php b/core/modules/link/tests/src/Unit/Plugin/Validation/Constraint/LinkNotExistingInternalConstraintValidatorTest.php index 9c519b1c3cc50adebed806cb362c18ee5291a16f..27613645a9eea7f490ee41789195a147b7208920 100644 --- a/core/modules/link/tests/src/Unit/Plugin/Validation/Constraint/LinkNotExistingInternalConstraintValidatorTest.php +++ b/core/modules/link/tests/src/Unit/Plugin/Validation/Constraint/LinkNotExistingInternalConstraintValidatorTest.php @@ -4,10 +4,13 @@ namespace Drupal\Tests\link\Unit\Plugin\Validation\Constraint; +use Drupal\Core\Routing\UrlGeneratorInterface; use Drupal\Core\Url; +use Drupal\link\LinkItemInterface; use Drupal\link\Plugin\Validation\Constraint\LinkNotExistingInternalConstraint; use Drupal\link\Plugin\Validation\Constraint\LinkNotExistingInternalConstraintValidator; use Drupal\Tests\UnitTestCase; +use PHPUnit\Framework\MockObject\MockObject; use Symfony\Component\Routing\Exception\RouteNotFoundException; use Symfony\Component\Validator\Context\ExecutionContextInterface; @@ -19,70 +22,70 @@ class LinkNotExistingInternalConstraintValidatorTest extends UnitTestCase { /** * @covers ::validate - * @dataProvider providerValidate */ - public function testValidate($value, $valid) { - $context = $this->createMock(ExecutionContextInterface::class); + public function testValidateFromUri(): void { + $url = Url::fromUri('https://www.drupal.org'); - if ($valid) { - $context->expects($this->never()) - ->method('addViolation'); - } - else { - $context->expects($this->once()) - ->method('addViolation'); - } + $link = $this->createMock(LinkItemInterface::class); + $link->expects($this->any()) + ->method('getUrl') + ->willReturn($url); - $constraint = new LinkNotExistingInternalConstraint(); + $context = $this->createMock(ExecutionContextInterface::class); + $context->expects($this->never()) + ->method('addViolation'); - $validator = new LinkNotExistingInternalConstraintValidator(); - $validator->initialize($context); - $validator->validate($value, $constraint); + $this->validate($link, $context); } /** - * Data provider for ::testValidate. + * @covers ::validate */ - public function providerValidate() { - $data = []; - - // External URL - $data[] = [Url::fromUri('https://www.drupal.org'), TRUE]; - - // Existing routed URL. + public function testValidateFromRoute(): void { $url = Url::fromRoute('example.existing_route'); - $url_generator = $this->createMock('Drupal\Core\Routing\UrlGeneratorInterface'); - $url_generator->expects($this->any()) + $urlGenerator = $this->createMock(UrlGeneratorInterface::class); + $urlGenerator->expects($this->any()) ->method('generateFromRoute') ->with('example.existing_route', [], []) ->willReturn('/example/existing'); - $url->setUrlGenerator($url_generator); + $url->setUrlGenerator($urlGenerator); - $data[] = [$url, TRUE]; + $link = $this->createMock(LinkItemInterface::class); + $link->expects($this->any()) + ->method('getUrl') + ->willReturn($url); - // Non-existent routed URL. + $context = $this->createMock(ExecutionContextInterface::class); + $context->expects($this->never()) + ->method('addViolation'); + + $this->validate($link, $context); + } + + /** + * @covers ::validate + */ + public function testValidateFromNonExistingRoute(): void { $url = Url::fromRoute('example.not_existing_route'); - $url_generator = $this->createMock('Drupal\Core\Routing\UrlGeneratorInterface'); - $url_generator->expects($this->any()) + $urlGenerator = $this->createMock(UrlGeneratorInterface::class); + $urlGenerator->expects($this->any()) ->method('generateFromRoute') ->with('example.not_existing_route', [], []) - ->willThrowException(new RouteNotFoundException()); - $url->setUrlGenerator($url_generator); + ->willReturn(new RouteNotFoundException()); + $url->setUrlGenerator($urlGenerator); - $data[] = [$url, FALSE]; - - foreach ($data as &$single_data) { - $link = $this->createMock('Drupal\link\LinkItemInterface'); - $link->expects($this->any()) - ->method('getUrl') - ->willReturn($single_data[0]); + $link = $this->createMock(LinkItemInterface::class); + $link->expects($this->any()) + ->method('getUrl') + ->willReturn($url); - $single_data[0] = $link; - } + $context = $this->createMock(ExecutionContextInterface::class); + $context->expects($this->never()) + ->method('addViolation'); - return $data; + $this->validate($link, $context); } /** @@ -90,8 +93,8 @@ public function providerValidate() { * * @see \Drupal\Core\Url::fromUri */ - public function testValidateWithMalformedUri() { - $link = $this->createMock('Drupal\link\LinkItemInterface'); + public function testValidateWithMalformedUri(): void { + $link = $this->createMock(LinkItemInterface::class); $link->expects($this->any()) ->method('getUrl') ->willThrowException(new \InvalidArgumentException()); @@ -100,11 +103,16 @@ public function testValidateWithMalformedUri() { $context->expects($this->never()) ->method('addViolation'); - $constraint = new LinkNotExistingInternalConstraint(); + $this->validate($link, $context); + } + /** + * Validate the link. + */ + protected function validate(LinkItemInterface&MockObject $link, ExecutionContextInterface&MockObject $context): void { $validator = new LinkNotExistingInternalConstraintValidator(); $validator->initialize($context); - $validator->validate($link, $constraint); + $validator->validate($link, new LinkNotExistingInternalConstraint()); } }