Skip to content

Commit b69c030

Browse files
authored
test(html): cover html_sanitizer wiring for 100% Clover coverage (#34)
* test(html): cover html_sanitizer wiring for 100% Clover coverage Exercise allowlist/custom/empty sanitizer paths and buildForm transformer hooks. * style(test): align Ckeditor5EditorTypeTest with php-cs-fixer
1 parent dfde4ba commit b69c030

3 files changed

Lines changed: 92 additions & 0 deletions

File tree

tests/Unit/DependencyInjection/ConfigurationTest.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,23 @@ public function testMergedScalarChunkNormalizesThroughEarlyReturn(): void
152152
$processor = new Processor();
153153
$processor->processConfiguration(new Configuration(), [true]);
154154
}
155+
156+
public function testHtmlSanitizerDefaultsToNull(): void
157+
{
158+
$processor = new Processor();
159+
$config = $processor->processConfiguration(new Configuration(), [[]]);
160+
161+
self::assertArrayHasKey('html_sanitizer', $config);
162+
self::assertNull($config['html_sanitizer']);
163+
}
164+
165+
public function testFlatConfigurationPreservesHtmlSanitizer(): void
166+
{
167+
$processor = new Processor();
168+
$config = $processor->processConfiguration(new Configuration(), [[
169+
'html_sanitizer' => 'allowlist',
170+
]]);
171+
172+
self::assertSame('allowlist', $config['html_sanitizer']);
173+
}
155174
}

tests/Unit/DependencyInjection/NowoCkeditor5EditorExtensionTest.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@
66

77
use Nowo\Ckeditor5EditorBundle\DependencyInjection\Configuration;
88
use Nowo\Ckeditor5EditorBundle\DependencyInjection\NowoCkeditor5EditorExtension;
9+
use Nowo\Ckeditor5EditorBundle\Form\Ckeditor5EditorType;
910
use Nowo\Ckeditor5EditorBundle\Security\AllowlistCkeditor5HtmlSanitizer;
1011
use Nowo\Ckeditor5EditorBundle\Security\Ckeditor5HtmlSanitizerInterface;
1112
use PHPUnit\Framework\TestCase;
13+
use ReflectionMethod;
1214
use Symfony\Bundle\FrameworkBundle\DependencyInjection\FrameworkExtension;
1315
use Symfony\Component\DependencyInjection\ContainerBuilder;
1416
use Symfony\Component\DependencyInjection\Extension\Extension;
17+
use Symfony\Component\DependencyInjection\Reference;
1518

1619
/**
1720
* @covers \Nowo\Ckeditor5EditorBundle\DependencyInjection\NowoCkeditor5EditorExtension
@@ -79,6 +82,48 @@ public function testLoadWithAllowlistHtmlSanitizer(): void
7982
AllowlistCkeditor5HtmlSanitizer::class,
8083
(string) $container->getAlias(Ckeditor5HtmlSanitizerInterface::class),
8184
);
85+
86+
$typeDefinition = $container->getDefinition(Ckeditor5EditorType::class);
87+
$arg = $typeDefinition->getArgument('$htmlSanitizer');
88+
self::assertInstanceOf(Reference::class, $arg);
89+
self::assertSame(Ckeditor5HtmlSanitizerInterface::class, (string) $arg);
90+
}
91+
92+
public function testLoadWithHtmlSanitizerCustomService(): void
93+
{
94+
$container = new ContainerBuilder();
95+
$extension = new NowoCkeditor5EditorExtension();
96+
$extension->load([['html_sanitizer' => 'app.custom_sanitizer']], $container);
97+
98+
self::assertTrue($container->hasAlias(Ckeditor5HtmlSanitizerInterface::class));
99+
self::assertSame('app.custom_sanitizer', (string) $container->getAlias(Ckeditor5HtmlSanitizerInterface::class));
100+
}
101+
102+
public function testLoadWithHtmlSanitizerEmptyDisables(): void
103+
{
104+
$container = new ContainerBuilder();
105+
$extension = new NowoCkeditor5EditorExtension();
106+
$extension->load([['html_sanitizer' => '']], $container);
107+
108+
$typeDefinition = $container->getDefinition(Ckeditor5EditorType::class);
109+
self::assertNull($typeDefinition->getArgument('$htmlSanitizer'));
110+
}
111+
112+
public function testConfigureHtmlSanitizerRegistersAllowlistWhenMissing(): void
113+
{
114+
$container = new ContainerBuilder();
115+
$container->register(Ckeditor5EditorType::class, Ckeditor5EditorType::class)
116+
->setAutowired(true)
117+
->setAutoconfigured(true)
118+
->addTag('form.type');
119+
120+
$extension = new NowoCkeditor5EditorExtension();
121+
$method = new ReflectionMethod(NowoCkeditor5EditorExtension::class, 'configureHtmlSanitizer');
122+
$method->setAccessible(true);
123+
$method->invoke($extension, $container, 'allowlist');
124+
125+
self::assertTrue($container->hasDefinition(AllowlistCkeditor5HtmlSanitizer::class));
126+
self::assertTrue($container->hasAlias(Ckeditor5HtmlSanitizerInterface::class));
82127
}
83128

84129
public function testPrependAddsTwigFormTheme(): void

tests/Unit/Form/Ckeditor5EditorTypeTest.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55
namespace Nowo\Ckeditor5EditorBundle\Tests\Unit\Form;
66

77
use Nowo\Ckeditor5EditorBundle\Form\Ckeditor5EditorType;
8+
use Nowo\Ckeditor5EditorBundle\Form\DataTransformer\Ckeditor5HtmlSanitizeTransformer;
9+
use Nowo\Ckeditor5EditorBundle\Security\AllowlistCkeditor5HtmlSanitizer;
810
use PHPUnit\Framework\TestCase;
911
use ReflectionMethod;
1012
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
13+
use Symfony\Component\Form\FormBuilderInterface;
1114
use Symfony\Component\Form\FormInterface;
1215
use Symfony\Component\Form\FormView;
1316
use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
@@ -400,4 +403,29 @@ public function testNormalizeThemePrivate(): void
400403
self::assertSame('light', $m->invoke($type, 'invalid-theme'));
401404
self::assertSame('auto', $m->invoke($type, ' AuTo '));
402405
}
406+
407+
public function testBuildFormAddsSanitizerTransformer(): void
408+
{
409+
$type = new Ckeditor5EditorType(
410+
$this->sampleConfigs(),
411+
'default',
412+
$this->createCsrfTokenManager(),
413+
new AllowlistCkeditor5HtmlSanitizer(),
414+
);
415+
$builder = $this->createMock(FormBuilderInterface::class);
416+
$builder->expects(self::once())
417+
->method('addModelTransformer')
418+
->with(self::isInstanceOf(Ckeditor5HtmlSanitizeTransformer::class));
419+
420+
$type->buildForm($builder, []);
421+
}
422+
423+
public function testBuildFormSkipsTransformerWithoutSanitizer(): void
424+
{
425+
$type = $this->createType();
426+
$builder = $this->createMock(FormBuilderInterface::class);
427+
$builder->expects(self::never())->method('addModelTransformer');
428+
429+
$type->buildForm($builder, []);
430+
}
403431
}

0 commit comments

Comments
 (0)