110 lines
3.6 KiB
PHP
110 lines
3.6 KiB
PHP
<?php
|
|
|
|
use App\Actions\BbcodeFormatter;
|
|
|
|
it('returns empty string for null and empty input', function (): void {
|
|
expect(BbcodeFormatter::format(null))->toBe('');
|
|
expect(BbcodeFormatter::format(''))->toBe('');
|
|
});
|
|
|
|
it('formats bbcode content', function (): void {
|
|
$parserProp = new ReflectionProperty(BbcodeFormatter::class, 'parser');
|
|
$parserProp->setAccessible(true);
|
|
$parserProp->setValue(
|
|
\Mockery::mock(\s9e\TextFormatter\Parser::class)
|
|
->shouldReceive('parse')
|
|
->andReturn('<r/>')
|
|
->getMock()
|
|
);
|
|
|
|
$rendererProp = new ReflectionProperty(BbcodeFormatter::class, 'renderer');
|
|
$rendererProp->setAccessible(true);
|
|
$rendererProp->setValue(
|
|
\Mockery::mock(\s9e\TextFormatter\Renderer::class)
|
|
->shouldReceive('render')
|
|
->andReturn('<b>Bold</b>')
|
|
->getMock()
|
|
);
|
|
|
|
$html = BbcodeFormatter::format('[b]Bold[/b]');
|
|
|
|
expect($html)->toContain('<b>');
|
|
});
|
|
|
|
it('initializes parser and renderer when not set', function (): void {
|
|
$parserProp = new ReflectionProperty(BbcodeFormatter::class, 'parser');
|
|
$parserProp->setAccessible(true);
|
|
$parserProp->setValue(null);
|
|
|
|
$rendererProp = new ReflectionProperty(BbcodeFormatter::class, 'renderer');
|
|
$rendererProp->setAccessible(true);
|
|
$rendererProp->setValue(null);
|
|
|
|
$html = BbcodeFormatter::format('[b]Bold[/b]');
|
|
|
|
expect($html)->toBeString();
|
|
expect($parserProp->getValue())->not->toBeNull();
|
|
expect($rendererProp->getValue())->not->toBeNull();
|
|
});
|
|
|
|
it('build returns parser and renderer', function (): void {
|
|
putenv('BBCODE_FORCE_FAIL');
|
|
unset($_ENV['BBCODE_FORCE_FAIL'], $_SERVER['BBCODE_FORCE_FAIL']);
|
|
|
|
$ref = new ReflectionMethod(BbcodeFormatter::class, 'build');
|
|
$ref->setAccessible(true);
|
|
|
|
$result = $ref->invoke(null);
|
|
|
|
expect($result)->toBeArray();
|
|
expect($result)->toHaveCount(2);
|
|
expect($result[0])->toBeInstanceOf(\s9e\TextFormatter\Parser::class);
|
|
expect($result[1])->toBeInstanceOf(\s9e\TextFormatter\Renderer::class);
|
|
});
|
|
|
|
it('formats with real build when parser is reset', function (): void {
|
|
putenv('BBCODE_FORCE_FAIL');
|
|
unset($_ENV['BBCODE_FORCE_FAIL'], $_SERVER['BBCODE_FORCE_FAIL']);
|
|
|
|
$parserProp = new ReflectionProperty(BbcodeFormatter::class, 'parser');
|
|
$parserProp->setAccessible(true);
|
|
$parserProp->setValue(null);
|
|
|
|
$rendererProp = new ReflectionProperty(BbcodeFormatter::class, 'renderer');
|
|
$rendererProp->setAccessible(true);
|
|
$rendererProp->setValue(null);
|
|
|
|
$html = BbcodeFormatter::format('[b]Bold[/b]');
|
|
expect($html)->toBeString();
|
|
expect($parserProp->getValue())->not->toBeNull();
|
|
expect($rendererProp->getValue())->not->toBeNull();
|
|
});
|
|
|
|
it('throws when bbcode formatter cannot initialize', function (): void {
|
|
putenv('BBCODE_FORCE_FAIL=1');
|
|
$_ENV['BBCODE_FORCE_FAIL'] = '1';
|
|
$_SERVER['BBCODE_FORCE_FAIL'] = '1';
|
|
|
|
$parserProp = new ReflectionProperty(BbcodeFormatter::class, 'parser');
|
|
$parserProp->setAccessible(true);
|
|
$parserProp->setValue(null);
|
|
|
|
$rendererProp = new ReflectionProperty(BbcodeFormatter::class, 'renderer');
|
|
$rendererProp->setAccessible(true);
|
|
$rendererProp->setValue(null);
|
|
|
|
try {
|
|
BbcodeFormatter::format('test');
|
|
$this->fail('Expected exception not thrown.');
|
|
} catch (Throwable $e) {
|
|
expect($e)->toBeInstanceOf(RuntimeException::class);
|
|
} finally {
|
|
putenv('BBCODE_FORCE_FAIL');
|
|
unset($_ENV['BBCODE_FORCE_FAIL'], $_SERVER['BBCODE_FORCE_FAIL']);
|
|
}
|
|
});
|
|
|
|
afterEach(function (): void {
|
|
\Mockery::close();
|
|
});
|