‪TYPO3CMS  ‪main
ModelServiceTest.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 
28 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
29 
30 final class ‪ModelServiceTest extends FunctionalTestCase
31 {
33 
34  protected function ‪setUp(): void
35  {
36  parent::setUp();
37  $this->subject = $this->get(ModelService::class);
38  }
39 
40  protected function ‪tearDown(): void
41  {
42  unset($this->subject);
43  }
44 
45  public static function ‪enumSourceInterfaceIsBuiltFromStringDataProvider(): \Generator
46  {
47  yield 'nonce-proxy' => ["'nonce-anything'", SourceKeyword::nonceProxy];
48  yield 'none' => ["'none'", SourceKeyword::none];
49  yield 'self' => ["'self'", SourceKeyword::self];
50  yield 'strict-dynamic' => ["'strict-dynamic'", SourceKeyword::strictDynamic];
51  yield 'unsafe-inline' => ["'unsafe-inline'", SourceKeyword::unsafeInline];
52  yield 'unsafe-eval' => ["'unsafe-eval'", SourceKeyword::unsafeEval];
53 
54  yield 'blob:' => ['blob:', SourceScheme::blob];
55  yield 'data:' => ['data:', SourceScheme::data];
56  yield 'https:' => ['https:', SourceScheme::https];
57  yield 'wss:' => ['wss:', ‪SourceScheme::wss];
58  }
59 
64  public function ‪enumSourceInterfaceIsBuiltFromString(string $string, ‪SourceInterface $expectation): void
65  {
66  self::assertSame($expectation, $this->subject->buildSourceFromString($string));
67  }
68 
72  public function ‪uriValueIsBuiltFromString(): void
73  {
74  $uri = 'https://*.example.org/';
75  $source = $this->subject->buildSourceFromString($uri);
76  self::assertInstanceOf(UriValue::class, $source);
77  self::assertSame($uri, (string)$source);
78  }
79 
83  public function ‪rawValueIsBuiltFromString(): void
84  {
85  $value = 'https:////slashes.example.org';
86  $source = $this->subject->buildSourceFromString($value);
87  self::assertInstanceOf(RawValue::class, $source);
88  self::assertSame($value, (string)$source);
89  }
90 
94  public function ‪hashValueIsBuiltFromString(): void
95  {
96  $hash = hash('sha256', 'test', true);
97  $hashB64 = base64_encode($hash);
98  $value = sprintf("'sha256-%s'", $hashB64);
99  $source = $this->subject->buildSourceFromString($value);
100  self::assertInstanceOf(HashValue::class, $source);
101  self::assertSame($hashB64, $source->value);
102  }
103 
107  public function ‪urlHashProxyIsBuiltFromString(): void
108  {
109  ‪$url = 'https://example.org/file.js';
110  $value = '\'hash-proxy-{"type":"sha256","urls":["' . $url . '"]}\'';
111  $source = $this->subject->buildSourceFromString($value);
112 
113  self::assertInstanceOf(HashProxy::class, $source);
114  $object = new \ReflectionObject($source);
115  $property = $object->getProperty('urls');
116  self::assertSame(‪$url, $property->getValue($source)[0] ?? null);
117  }
118 
119  public static function ‪buildMutationFromArrayThrowsValueErrorDataProvider(): \Generator
120  {
121  yield 'undefined mutation mode' => [
122  [
123  'directive' => 'script-src',
124  'sources' => ['https:'],
125  ],
126  '"" is not a valid backing value for enum',
127  ];
128  yield 'invalid mutation mode' => [
129  [
130  'mode' => 'invalid',
131  'directive' => 'script-src',
132  'sources' => ['https:'],
133  ],
134  '"invalid" is not a valid backing value for enum',
135  ];
136  yield 'undefined directive' => [
137  [
138  'mode' => 'extend',
139  'sources' => ['https:'],
140  ],
141  '"" is not a valid backing value for enum',
142  ];
143  yield "source 'unsafe-inline' used as directive" => [
144  [
145  'mode' => 'extend',
146  'directive' => "'unsafe-inline'",
147  'sources' => ['https:'],
148  ],
149  '"\'unsafe-inline\'" is not a valid backing value for enum',
150  ];
151  }
152 
157  public function ‪buildMutationFromArrayThrowsValueError(array $array, string $expectedErrorMessage): void
158  {
159  $this->expectException(\ValueError::class);
160  $this->expectExceptionMessage($expectedErrorMessage);
161  $this->subject->buildMutationFromArray($array);
162  }
163 }
‪TYPO3\CMS\Core\Tests\Functional\Security\ContentSecurityPolicy\ModelServiceTest\tearDown
‪tearDown()
Definition: ModelServiceTest.php:40
‪TYPO3\CMS\Core\Tests\Functional\Security\ContentSecurityPolicy\ModelServiceTest
Definition: ModelServiceTest.php:31
‪TYPO3\CMS\Core\Tests\Functional\Security\ContentSecurityPolicy\ModelServiceTest\rawValueIsBuiltFromString
‪rawValueIsBuiltFromString()
Definition: ModelServiceTest.php:83
‪TYPO3\CMS\Core\Security\ContentSecurityPolicy\RawValue
Definition: RawValue.php:27
‪TYPO3\CMS\Core\Security\ContentSecurityPolicy\HashValue
Definition: HashValue.php:27
‪TYPO3\CMS\Core\Tests\Functional\Security\ContentSecurityPolicy\ModelServiceTest\buildMutationFromArrayThrowsValueError
‪buildMutationFromArrayThrowsValueError(array $array, string $expectedErrorMessage)
Definition: ModelServiceTest.php:157
‪TYPO3\CMS\Core\Tests\Functional\Security\ContentSecurityPolicy\ModelServiceTest\uriValueIsBuiltFromString
‪uriValueIsBuiltFromString()
Definition: ModelServiceTest.php:72
‪TYPO3\CMS\Core\Security\ContentSecurityPolicy\ModelService
Definition: ModelService.php:28
‪TYPO3\CMS\Core\Security\ContentSecurityPolicy\SourceInterface
Definition: SourceInterface.php:27
‪TYPO3\CMS\Core\Tests\Functional\Security\ContentSecurityPolicy\ModelServiceTest\enumSourceInterfaceIsBuiltFromStringDataProvider
‪static enumSourceInterfaceIsBuiltFromStringDataProvider()
Definition: ModelServiceTest.php:45
‪TYPO3\CMS\Core\Tests\Functional\Security\ContentSecurityPolicy\ModelServiceTest\setUp
‪setUp()
Definition: ModelServiceTest.php:34
‪TYPO3\CMS\Core\Tests\Functional\Security\ContentSecurityPolicy\ModelServiceTest\hashValueIsBuiltFromString
‪hashValueIsBuiltFromString()
Definition: ModelServiceTest.php:94
‪TYPO3\CMS\Core\Security\ContentSecurityPolicy\HashProxy
Definition: HashProxy.php:32
‪TYPO3\CMS\Core\Tests\Functional\Security\ContentSecurityPolicy
Definition: ModelServiceTest.php:18
‪TYPO3\CMS\Core\Security\ContentSecurityPolicy\wss
‪@ wss
Definition: SourceScheme.php:33
‪TYPO3\CMS\Core\Tests\Functional\Security\ContentSecurityPolicy\ModelServiceTest\urlHashProxyIsBuiltFromString
‪urlHashProxyIsBuiltFromString()
Definition: ModelServiceTest.php:107
‪TYPO3\CMS\Core\Security\ContentSecurityPolicy\SourceKeyword
‪SourceKeyword
Definition: SourceKeyword.php:25
‪TYPO3\CMS\Webhooks\Message\$url
‪identifier readonly UriInterface $url
Definition: LoginErrorOccurredMessage.php:36
‪TYPO3\CMS\Core\Tests\Functional\Security\ContentSecurityPolicy\ModelServiceTest\buildMutationFromArrayThrowsValueErrorDataProvider
‪static buildMutationFromArrayThrowsValueErrorDataProvider()
Definition: ModelServiceTest.php:119
‪TYPO3\CMS\Core\Security\ContentSecurityPolicy\UriValue
Definition: UriValue.php:29
‪TYPO3\CMS\Core\Tests\Functional\Security\ContentSecurityPolicy\ModelServiceTest\enumSourceInterfaceIsBuiltFromString
‪enumSourceInterfaceIsBuiltFromString(string $string, SourceInterface $expectation)
Definition: ModelServiceTest.php:64
‪TYPO3\CMS\Core\Security\ContentSecurityPolicy\SourceScheme
‪SourceScheme
Definition: SourceScheme.php:25
‪TYPO3\CMS\Core\Tests\Functional\Security\ContentSecurityPolicy\ModelServiceTest\$subject
‪ModelService $subject
Definition: ModelServiceTest.php:32