‪TYPO3CMS  ‪main
HtmlViewHelperTest.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;
22 use Psr\Log\LogLevel;
28 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
29 use TYPO3Fluid\Fluid\View\TemplateView;
30 
31 final class ‪HtmlViewHelperTest extends FunctionalTestCase
32 {
33  protected bool ‪$initializeDatabase = false;
34 
36  'LOG' => [
37  'TYPO3' => [
38  'HtmlSanitizer' => [
39  'writerConfiguration' => [
40  LogLevel::DEBUG => [
41  DummyWriter::class => [],
42  ],
43  ],
44  ],
45  ],
46  ],
47  ];
48 
49  protected function ‪tearDown(): void
50  {
51  parent::tearDown();
53  }
54 
55  public static function ‪isSanitizedDataProvider(): array
56  {
57  // @todo splitter for functional tests cannot deal with external classes
59  }
60 
61  #[DataProvider('isSanitizedDataProvider')]
62  #[Test]
63  public function ‪isSanitizedUsingNodeInstruction(string $payload, string $expectation): void
64  {
65  $context = $this->get(RenderingContextFactory::class)->create();
66  $context->getTemplatePaths()->setTemplateSource(sprintf('<f:sanitize.html>%s</f:sanitize.html>', $payload));
67  self::assertSame($expectation, (new TemplateView($context))->render());
68  }
69 
70  #[DataProvider('isSanitizedDataProvider')]
71  #[Test]
72  public function ‪isSanitizedUsingInlineInstruction(string $payload, string $expectation): void
73  {
74  $context = $this->get(RenderingContextFactory::class)->create();
75  $context->getTemplatePaths()->setTemplateSource('{payload -> f:sanitize.html()}');
76  $view = new TemplateView($context);
77  $view->assign('payload', $payload);
78  self::assertSame($expectation, $view->render());
79  }
80 
81  #[Test]
82  public function ‪incidentIsLogged(): void
83  {
84  $templatePath = __DIR__ . '/Fixtures/Template.html';
85  $context = $this->get(RenderingContextFactory::class)->create();
86  $context->getTemplatePaths()->setTemplatePathAndFilename($templatePath);
87  $view = new TemplateView($context);
88  $view->assign('payload', '<script>alert(1)</script>');
89  $view->render();
90 
91  $logItemDataExpectation = [
92  'behavior' => 'default',
93  'nodeType' => 1,
94  'nodeName' => 'script',
95  'initiator' => HtmlViewHelper::class,
96  ];
97  $logItem = end(‪DummyWriter::$logs);
98  self::assertInstanceOf(LogRecord::class, $logItem);
99  self::assertSame($logItemDataExpectation, $logItem->getData());
100  self::assertSame('TYPO3.HtmlSanitizer.Visitor.CommonVisitor', $logItem->getComponent());
101  }
102 }
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Sanitize\HtmlViewHelperTest\isSanitizedDataProvider
‪static isSanitizedDataProvider()
Definition: HtmlViewHelperTest.php:55
‪TYPO3\CMS\Fluid\ViewHelpers\Sanitize\HtmlViewHelper
Definition: HtmlViewHelper.php:59
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Sanitize\HtmlViewHelperTest\$configurationToUseInTestInstance
‪array $configurationToUseInTestInstance
Definition: HtmlViewHelperTest.php:35
‪TYPO3\CMS\Core\Tests\Functional\Html\DefaultSanitizerBuilderTest\isSanitizedDataProvider
‪static isSanitizedDataProvider()
Definition: DefaultSanitizerBuilderTest.php:57
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Sanitize\HtmlViewHelperTest\isSanitizedUsingNodeInstruction
‪isSanitizedUsingNodeInstruction(string $payload, string $expectation)
Definition: HtmlViewHelperTest.php:63
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Sanitize\HtmlViewHelperTest\tearDown
‪tearDown()
Definition: HtmlViewHelperTest.php:49
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Sanitize\HtmlViewHelperTest
Definition: HtmlViewHelperTest.php:32
‪TYPO3\CMS\Core\Log\LogRecord
Definition: LogRecord.php:24
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Sanitize\HtmlViewHelperTest\incidentIsLogged
‪incidentIsLogged()
Definition: HtmlViewHelperTest.php:82
‪TYPO3\CMS\Core\Tests\Functional\Fixtures\Log\DummyWriter\$logs
‪static array $logs
Definition: DummyWriter.php:26
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Sanitize\HtmlViewHelperTest\isSanitizedUsingInlineInstruction
‪isSanitizedUsingInlineInstruction(string $payload, string $expectation)
Definition: HtmlViewHelperTest.php:72
‪TYPO3\CMS\Core\Tests\Functional\Html\DefaultSanitizerBuilderTest
Definition: DefaultSanitizerBuilderTest.php:34
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Sanitize\HtmlViewHelperTest\$initializeDatabase
‪bool $initializeDatabase
Definition: HtmlViewHelperTest.php:33
‪TYPO3\CMS\Fluid\Core\Rendering\RenderingContextFactory
Definition: RenderingContextFactory.php:51
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Sanitize
Definition: HtmlViewHelperTest.php:18
‪TYPO3\CMS\Core\Tests\Functional\Fixtures\Log\DummyWriter
Definition: DummyWriter.php:24