‪TYPO3CMS  ‪main
UriBuilderTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use PHPUnit\Framework\Attributes\DataProvider;
21 use PHPUnit\Framework\Attributes\Test;
31 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
32 
33 final class ‪UriBuilderTest extends UnitTestCase
34 {
35  public static function ‪validRoutesAreBuiltDataProvider(): array
36  {
37  return [
38  'plain route' => [
39  [ 'route' => new ‪Route('/test/route', []) ],
40  'route',
41  [],
42  '/typo3/test/route?token=dummyToken',
43  ],
44  'AJAX route' => [
45  [ 'route' => new ‪Route('/test/route', [ 'ajax' => true ]) ],
46  'route',
47  [],
48  '/typo3/test/route?token=dummyToken',
49  ],
50  'plain route with default parameters' => [
51  [ 'route' => new ‪Route('/test/route', [ 'parameters' => [ 'key' => 'value' ] ]) ],
52  'route',
53  [],
54  '/typo3/test/route?token=dummyToken&key=value',
55  ],
56  'AJAX route with default parameters' => [
57  [ 'route' => new ‪Route('/test/route', [ 'ajax' => true, 'parameters' => [ 'key' => 'value' ] ]) ],
58  'route',
59  [],
60  '/typo3/test/route?token=dummyToken&key=value',
61  ],
62  'plain route with overridden parameters' => [
63  [ 'route' => new ‪Route('/test/route', [ 'parameters' => [ 'key' => 'value' ] ]) ],
64  'route',
65  ['key' => 'overridden'],
66  '/typo3/test/route?token=dummyToken&key=overridden',
67  ],
68  'AJAX route with overridden parameters' => [
69  [ 'route' => new ‪Route('/test/route', [ 'ajax' => true, 'parameters' => [ 'key' => 'value' ] ]) ],
70  'route',
71  ['key' => 'overridden'],
72  '/typo3/test/route?token=dummyToken&key=overridden',
73  ],
74  ];
75  }
76 
77  #[DataProvider('validRoutesAreBuiltDataProvider')]
78  #[Test]
79  public function ‪validRoutesAreBuilt(
80  array $routes,
81  string $routeName,
82  array $routeParameters,
83  string $expectation
84  ): void {
85  $backendEntryPointResolver = new ‪BackendEntryPointResolver();
86  $requestContextFactory = new ‪RequestContextFactory($backendEntryPointResolver);
87  $router = new ‪Router($requestContextFactory, $backendEntryPointResolver);
88  foreach ($routes as $nameRoute => $route) {
89  $router->addRoute($nameRoute, $route);
90  }
91  $formProtectionFactory = $this->createMock(FormProtectionFactory::class);
92  $formProtectionFactory->method('createForType')->willReturn(new ‪DisabledFormProtection());
93  $subject = new ‪UriBuilder($router, $formProtectionFactory, $requestContextFactory);
94  $uri = $subject->buildUriFromRoute(
95  $routeName,
96  $routeParameters
97  );
98 
99  self::assertEquals($expectation, $uri->__toString());
100  }
101 
102  #[Test]
103  public function ‪nonExistingRouteThrowsException(): void
104  {
105  $formProtectionFactory = $this->createMock(FormProtectionFactory::class);
106  $formProtectionFactory->method('createForType')->willReturn(new ‪DisabledFormProtection());
107 
108  $this->expectException(RouteNotFoundException::class);
109  $this->expectExceptionCode(1476050190);
110  $backendEntryPointResolver = new ‪BackendEntryPointResolver();
111  $requestContextFactory = new ‪RequestContextFactory($backendEntryPointResolver);
112  $subject = new ‪UriBuilder(new ‪Router($requestContextFactory, $backendEntryPointResolver), $formProtectionFactory, $requestContextFactory);
113  $subject->buildUriFromRoute(‪StringUtility::getUniqueId('any'));
114  }
115 }
‪TYPO3\CMS\Backend\Tests\Unit\Routing\UriBuilderTest\validRoutesAreBuiltDataProvider
‪static validRoutesAreBuiltDataProvider()
Definition: UriBuilderTest.php:35
‪TYPO3\CMS\Core\FormProtection\DisabledFormProtection
Definition: DisabledFormProtection.php:23
‪TYPO3\CMS\Backend\Routing\Route
Definition: Route.php:24
‪TYPO3\CMS\Backend\Tests\Unit\Routing\UriBuilderTest\nonExistingRouteThrowsException
‪nonExistingRouteThrowsException()
Definition: UriBuilderTest.php:103
‪TYPO3\CMS\Backend\Routing\Exception\RouteNotFoundException
Definition: RouteNotFoundException.php:21
‪TYPO3\CMS\Backend\Routing\UriBuilder
Definition: UriBuilder.php:44
‪TYPO3\CMS\Backend\Tests\Unit\Routing\UriBuilderTest\validRoutesAreBuilt
‪validRoutesAreBuilt(array $routes, string $routeName, array $routeParameters, string $expectation)
Definition: UriBuilderTest.php:79
‪TYPO3\CMS\Backend\Tests\Unit\Routing\UriBuilderTest
Definition: UriBuilderTest.php:34
‪TYPO3\CMS\Core\FormProtection\FormProtectionFactory
Definition: FormProtectionFactory.php:43
‪TYPO3\CMS\Backend\Tests\Unit\Routing
Definition: PreviewUriBuilderTest.php:18
‪TYPO3\CMS\Core\Utility\StringUtility
Definition: StringUtility.php:24
‪TYPO3\CMS\Backend\Routing\Router
Definition: Router.php:40
‪TYPO3\CMS\Core\Routing\BackendEntryPointResolver
Definition: BackendEntryPointResolver.php:29
‪TYPO3\CMS\Core\Utility\StringUtility\getUniqueId
‪static getUniqueId(string $prefix='')
Definition: StringUtility.php:57
‪TYPO3\CMS\Core\Routing\RequestContextFactory
Definition: RequestContextFactory.php:30