Mit Ereignis
', 'Mit Ereignis
']; yield 'drops style and class' => ['', $plain); } public function testFormattedTextInASharedAreaIsFilteredTheSameWay(): void { $header = $this->partials->findByKind('header'); $document = $header['document']; $document['schemaVersion'] = 12; $document['blocks'][0]['children'][0]['children'][0]['children'][0]['props']['text'] = 'kant cms'; $this->partials->save($header['id'], $document, $header['version']); $stored = $this->partials->findByKind('header')['document']; self::assertSame('kant cms', $stored['blocks'][0]['children'][0]['children'][0]['children'][0]['props']['text']); $this->pages->publish('page-1', $this->pages->saveDraft('page-1', DemoContent::pages()['home'], 0), 1); $html = $this->request('/')->getContent(); self::assertStringContainsString('kant cms', $html); self::assertStringNotContainsString('alert(1)', $html); } public function testOversizedFormattedTextIsRefused(): void { $document = DemoContent::starter('Zu lang'); $document['schemaVersion'] = 12; $document['blocks'][1]['children'][1]['props']['text'] = str_repeat('a', RichText::MAX_LENGTH + 1); $this->expectException(InvalidDocument::class); $this->pages->saveDraft('page-1', $document, 0); } private function request(string $url, string $method = 'GET'): Response { $previous = []; foreach (['APP_SECRET' => 'test-only', 'DATABASE_URL' => 'sqlite:///'.str_replace('\\', '/', $this->path), 'SITE_ORIGIN' => 'https://cms.test', 'MEDIA_DIRECTORY' => $this->path.'-media'] as $key => $value) { $previous[$key] = [$_SERVER[$key] ?? null, $_ENV[$key] ?? null]; $_SERVER[$key] = $_ENV[$key] = $value; } $kernel = new Kernel('test', false); try { return $kernel->handle(Request::create($url, $method)); } finally { $kernel->shutdown(); foreach ($previous as $key => [$server, $env]) { if (null === $server) { unset($_SERVER[$key]); } else { $_SERVER[$key] = $server; } if (null === $env) { unset($_ENV[$key]); } else { $_ENV[$key] = $env; } } } } }