‪TYPO3CMS  11.5
CanonicalGeneratorTest.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 
22 use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\Internal\TypoScriptInstruction;
23 use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\InternalRequest;
24 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
25 
29 class ‪CanonicalGeneratorTest extends FunctionalTestCase
30 {
32 
33  protected const ‪LANGUAGE_PRESETS = [
34  'EN' => ['id' => 0, 'title' => 'English', 'locale' => 'en_US.UTF8', 'iso' => 'en', 'hrefLang' => 'en-US', 'direction' => ''],
35  ];
36 
38  'SC_OPTIONS' => [
39  'Core/TypoScript/TemplateService' => [
40  'runThroughTemplatesPostProcessing' => [
41  'FunctionalTest' => \TYPO3\TestingFramework\Core\Functional\Framework\Frontend\Hook\TypoScriptInstructionModifier::class . '->apply',
42  ],
43  ],
44  ],
45  ];
46 
47  protected ‪$coreExtensionsToLoad = ['seo'];
48 
49  protected function ‪setUp(): void
50  {
51  parent::setUp();
52 
54  'website-local',
55  $this->‪buildSiteConfiguration(1, 'http://localhost/'),
56  [
57  $this->‪buildDefaultLanguageConfiguration('EN', '/'),
58  ]
59  );
60 
62  'website-example',
63  $this->‪buildSiteConfiguration(100, 'http://example.com/'),
64  [
65  $this->‪buildDefaultLanguageConfiguration('EN', '/'),
66  ]
67  );
68 
70  'dummy',
71  $this->‪buildSiteConfiguration(200, '/'),
72  [
73  $this->‪buildDefaultLanguageConfiguration('EN', '/'),
74  ]
75  );
76 
77  $this->importCSVDataSet(__DIR__ . '/../Fixtures/pages-canonical.csv');
78  $this->setUpFrontendRootPage(
79  1,
80  ['typo3/sysext/seo/Tests/Functional/Fixtures/Canonical.typoscript']
81  );
82  }
83 
84  public function ‪generateDataProvider(): array
85  {
86  return [
87  'uid: 1 with canonical_link' => [
88  'http://localhost/',
89  '<link rel="canonical" href="http://localhost/"/>' . chr(10),
90  ],
91  'uid: 2 with canonical_link' => [
92  'http://localhost/dummy-1-2',
93  '<link rel="canonical" href="http://localhost/dummy-1-2"/>' . chr(10),
94  ],
95  'uid: 3 with canonical_link AND content_from_pid = 2' => [
96  'http://localhost/dummy-1-3',
97  '<link rel="canonical" href="http://localhost/dummy-1-3"/>' . chr(10),
98  ],
99  'uid: 4 without canonical_link AND content_from_pid = 2' => [
100  'http://localhost/dummy-1-4',
101  '<link rel="canonical" href="http://localhost/dummy-1-2"/>' . chr(10),
102  ],
103  'uid: 5 without canonical_link AND without content_from_pid set' => [
104  'http://localhost/dummy-1-2-5',
105  '<link rel="canonical" href="http://localhost/dummy-1-2-5"/>' . chr(10),
106  ],
107  'uid: 8 without canonical_link AND content_from_pid = 9 (but target page is hidden) results in no canonical' => [
108  'http://localhost/dummy-1-2-8',
109  '',
110  ],
111  'uid: 10 no index' => [
112  'http://localhost/dummy-1-2-10',
113  '',
114  ],
115  'uid: 11 with mount_pid_ol = 0' => [
116  'http://localhost/dummy-1-2-11',
117  '<link rel="canonical" href="http://localhost/dummy-1-2-11"/>' . chr(10),
118  ],
119  'uid: 12 with mount_pid_ol = 1' => [
120  'http://localhost/dummy-1-2-12',
121  '<link rel="canonical" href="http://example.com/"/>' . chr(10),
122  ],
123  'subpage of page with mount_pid_ol = 0' => [
124  'http://localhost/dummy-1-2-11/subpage-of-new-root',
125  '<link rel="canonical" href="http://example.com/subpage-of-new-root"/>' . chr(10),
126  ],
127  'subpage of page with mount_pid_ol = 1' => [
128  'http://localhost/dummy-1-2-12/subpage-of-new-root',
129  '<link rel="canonical" href="http://example.com/subpage-of-new-root"/>' . chr(10),
130  ],
131  'mountpoint to page without siteroot' => [
132  'http://localhost/dummy-1-2-13',
133  '',
134  ],
135  'subpage of mountpoint without siteroot' => [
136  'http://localhost/dummy-1-2-13/imprint',
137  '',
138  ],
139  'uid: 14 typoscript setting config.disableCanonical' => [
140  'http://localhost/no-canonical',
141  '',
142  ],
143  ];
144  }
145 
153  public function ‪generate(string $targetUri, string $expectedCanonicalUrl): void
154  {
155  $response = $this->executeFrontendSubRequest(
156  (new InternalRequest($targetUri))->withInstructions([$this->‪buildPageTypoScript()])
157  );
158 
159  if ($expectedCanonicalUrl) {
160  self::assertStringContainsString($expectedCanonicalUrl, (string)$response->getBody());
161  } else {
162  self::assertStringNotContainsString('<link rel="canonical"', (string)$response->getBody());
163  }
164  }
165 
166  private function ‪buildPageTypoScript(): TypoScriptInstruction
167  {
168  return (new TypoScriptInstruction(TemplateService::class))
169  ->withTypoScript([
170  'page' => 'PAGE',
171  'page.' => [
172  'typeNum' => 0,
173  ],
174  ]);
175  }
176 }
‪TYPO3\CMS\Seo\Tests\Functional\Canonical\CanonicalGeneratorTest\$coreExtensionsToLoad
‪$coreExtensionsToLoad
Definition: CanonicalGeneratorTest.php:46
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait
Definition: SiteBasedTestTrait.php:36
‪TYPO3
‪TYPO3\CMS\Seo\Tests\Functional\Canonical
Definition: CanonicalGeneratorTest.php:18
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\writeSiteConfiguration
‪writeSiteConfiguration(string $identifier, array $site=[], array $languages=[], array $errorHandling=[])
Definition: SiteBasedTestTrait.php:58
‪TYPO3\CMS\Seo\Tests\Functional\Canonical\CanonicalGeneratorTest\buildPageTypoScript
‪buildPageTypoScript()
Definition: CanonicalGeneratorTest.php:165
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\buildDefaultLanguageConfiguration
‪array buildDefaultLanguageConfiguration(string $identifier, string $base)
Definition: SiteBasedTestTrait.php:126
‪TYPO3\CMS\Seo\Tests\Functional\Canonical\CanonicalGeneratorTest\generate
‪generate(string $targetUri, string $expectedCanonicalUrl)
Definition: CanonicalGeneratorTest.php:152
‪TYPO3\CMS\Seo\Tests\Functional\Canonical\CanonicalGeneratorTest\$configurationToUseInTestInstance
‪$configurationToUseInTestInstance
Definition: CanonicalGeneratorTest.php:36
‪TYPO3\CMS\Seo\Tests\Functional\Canonical\CanonicalGeneratorTest
Definition: CanonicalGeneratorTest.php:30
‪TYPO3\CMS\Seo\Tests\Functional\Canonical\CanonicalGeneratorTest\LANGUAGE_PRESETS
‪const LANGUAGE_PRESETS
Definition: CanonicalGeneratorTest.php:32
‪TYPO3\CMS\Seo\Tests\Functional\Canonical\CanonicalGeneratorTest\setUp
‪setUp()
Definition: CanonicalGeneratorTest.php:48
‪TYPO3\CMS\Core\TypoScript\TemplateService
Definition: TemplateService.php:46
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\buildSiteConfiguration
‪array buildSiteConfiguration(int $rootPageId, string $base='')
Definition: SiteBasedTestTrait.php:111
‪TYPO3\CMS\Seo\Tests\Functional\Canonical\CanonicalGeneratorTest\generateDataProvider
‪generateDataProvider()
Definition: CanonicalGeneratorTest.php:83