Skip to content

Commit

Permalink
test: Replace atoum with PHPUnit for unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ambroisemaupate committed Mar 12, 2024
1 parent 3d8c83b commit 49f315f
Show file tree
Hide file tree
Showing 58 changed files with 1,681 additions and 2,157 deletions.
2 changes: 0 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ test:
vendor/bin/monorepo-builder validate
make phpstan
XDEBUG_MODE=coverage vendor/bin/phpunit -v
XDEBUG_MODE=coverage vendor/bin/atoum -d ./lib/Documents/tests
XDEBUG_MODE=coverage vendor/bin/atoum -f ./lib/EntityGenerator/tests/units/*
php -d "memory_limit=-1" vendor/bin/phpcs -p
php -d "memory_limit=-1" bin/console lint:twig ./lib/Rozier/src/Resources/views
php -d "memory_limit=-1" bin/console lint:twig ./lib/Documents/src/Resources/views
Expand Down
1 change: 0 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,6 @@
"require-dev": {
"ambroisemaupate/intervention-request": "^4.0",
"async-aws/simple-s3": "^1.1",
"atoum/atoum": "^4.0.0",
"league/flysystem-async-aws-s3": "^3.10",
"league/flysystem-aws-s3-v3": "^3.10",
"php-coveralls/php-coveralls": "^2.4",
Expand Down
4 changes: 2 additions & 2 deletions lib/Documents/.github/workflows/run-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ jobs:
${{ runner.os }}-php-${{ matrix.php-version }}-
- name: Install Dependencies
run: composer install --no-scripts --no-ansi --no-interaction --no-progress
- name: Run atoum unit tests
run: vendor/bin/atoum -d tests
- name: Run Unit tests
run: vendor/bin/phpunit -v --whitelist ./src --coverage-clover ./build/logs/clover.xml src/Test
- name: Run PHP Code Sniffer
run: vendor/bin/phpcs -p ./src
- name: Run PHPStan
Expand Down
4 changes: 2 additions & 2 deletions lib/Documents/Makefile
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
test:
vendor/bin/atoum -d tests
vendor/bin/phpunit -v --whitelist ./src --coverage-clover ./build/logs/clover.xml src/Test
vendor/bin/phpstan analyse -c phpstan.neon
vendor/bin/phpcs --report=full --report-file=./report.txt -p ./src

dev-test:
vendor/bin/atoum -d tests -l
vendor/bin/phpunit -v --whitelist ./src --coverage-clover ./build/logs/clover.xml src/Test

phpcs:
vendor/bin/phpcs --report=full --report-file=./report.txt -p ./src
Expand Down
2 changes: 1 addition & 1 deletion lib/Documents/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.4",
"atoum/atoum": "^4.0.0",
"phpunit/phpunit": "^9.5",
"squizlabs/php_codesniffer": "^3.5",
"phpstan/phpstan": "^1.5.3",
"phpstan/phpstan-doctrine": "^1.3"
Expand Down
28 changes: 28 additions & 0 deletions lib/Documents/src/Test/MediaFinders/SimpleVimeoEmbedFinder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

declare(strict_types=1);

namespace RZ\Roadiz\Documents\Test\MediaFinders;

use Doctrine\Persistence\ObjectManager;
use RZ\Roadiz\Documents\MediaFinders\AbstractVimeoEmbedFinder;
use RZ\Roadiz\Documents\Models\DocumentInterface;

final class SimpleVimeoEmbedFinder extends AbstractVimeoEmbedFinder
{
/**
* @inheritDoc
*/
protected function documentExists(ObjectManager $objectManager, string $embedId, ?string $embedPlatform): bool
{
throw new \RuntimeException('Not implemented');
}

/**
* @inheritDoc
*/
protected function injectMetaInDocument(ObjectManager $objectManager, DocumentInterface $document): DocumentInterface
{
throw new \RuntimeException('Not implemented');
}
}
28 changes: 28 additions & 0 deletions lib/Documents/src/Test/MediaFinders/SimpleYoutubeEmbedFinder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

declare(strict_types=1);

namespace RZ\Roadiz\Documents\Test\MediaFinders;

use Doctrine\Persistence\ObjectManager;
use RZ\Roadiz\Documents\MediaFinders\AbstractYoutubeEmbedFinder;
use RZ\Roadiz\Documents\Models\DocumentInterface;

final class SimpleYoutubeEmbedFinder extends AbstractYoutubeEmbedFinder
{
/**
* @inheritDoc
*/
protected function documentExists(ObjectManager $objectManager, string $embedId, ?string $embedPlatform): bool
{
throw new \RuntimeException('Not implemented');
}

/**
* @inheritDoc
*/
protected function injectMetaInDocument(ObjectManager $objectManager, DocumentInterface $document): DocumentInterface
{
throw new \RuntimeException('Not implemented');
}
}
94 changes: 94 additions & 0 deletions lib/Documents/src/Test/Renderer/AbstractRendererTestCase.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
<?php

declare(strict_types=1);

namespace RZ\Roadiz\Documents\Test\Renderer;

use League\Flysystem\Config;
use League\Flysystem\Filesystem;
use League\Flysystem\FilesystemOperator;
use League\Flysystem\Local\LocalFilesystemAdapter;
use League\Flysystem\MountManager;
use League\Flysystem\UrlGeneration\PublicUrlGenerator;
use PHPUnit\Framework\TestCase;
use RZ\Roadiz\Documents\MediaFinders\EmbedFinderFactory;
use RZ\Roadiz\Documents\Test\MediaFinders\SimpleVimeoEmbedFinder;
use RZ\Roadiz\Documents\Test\MediaFinders\SimpleYoutubeEmbedFinder;
use RZ\Roadiz\Documents\UrlGenerators\DocumentUrlGeneratorInterface;
use RZ\Roadiz\Documents\UrlGenerators\DummyDocumentUrlGenerator;
use Twig\Environment;
use Twig\Loader\FilesystemLoader;

abstract class AbstractRendererTestCase extends TestCase
{
protected function htmlTidy(string $body): string
{
$body = preg_replace('#[\n\r\t\s]{2,}#', ' ', $body);
$body = str_replace("&#x2F;", '/', $body);
$body = html_entity_decode($body);
return preg_replace('#\>[\n\r\t\s]+\<#', '><', $body);
}

protected function getUrlGenerator(): DocumentUrlGeneratorInterface
{
return new DummyDocumentUrlGenerator();
}

protected function getFilesystemOperator(): FilesystemOperator
{
return new MountManager([
'public' => new Filesystem(
new LocalFilesystemAdapter(dirname(__DIR__) . '/../../files/'),
publicUrlGenerator: new class () implements PublicUrlGenerator
{
public function publicUrl(string $path, Config $config): string
{
return '/files/' . $path;
}
}
),
'private' => new Filesystem(
new LocalFilesystemAdapter(dirname(__DIR__) . '/../../files/'),
publicUrlGenerator: new class () implements PublicUrlGenerator
{
public function publicUrl(string $path, Config $config): string
{
return '/files/' . $path;
}
}
)
]);
}

protected function getEnvironment(): Environment
{
$loader = new FilesystemLoader([
dirname(__DIR__) . '/../Resources/views'
]);
return new Environment($loader, [
'autoescape' => false
]);
}



/**
* @return EmbedFinderFactory
*/
protected function getEmbedFinderFactory(): EmbedFinderFactory
{
return new EmbedFinderFactory([
'youtube' => SimpleYoutubeEmbedFinder::class,
'vimeo' => SimpleVimeoEmbedFinder::class,
]);
}

public function assertHtmlTidyEquals(string $expected, string $actual, string $message = ''): void
{
$this->assertEquals(
$this->htmlTidy($expected),
$this->htmlTidy($actual),
$message
);
}
}
139 changes: 139 additions & 0 deletions lib/Documents/src/Test/Renderer/AudioRendererTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
<?php

declare(strict_types=1);

namespace RZ\Roadiz\Documents\Test\Renderer;

use RZ\Roadiz\Documents\ArrayDocumentFinder;
use RZ\Roadiz\Documents\DocumentFinderInterface;
use RZ\Roadiz\Documents\Models\DocumentInterface;
use RZ\Roadiz\Documents\Models\SimpleDocument;
use RZ\Roadiz\Documents\Renderer\AudioRenderer;

class AudioRendererTest extends AbstractRendererTestCase
{
protected function getRenderer(): AudioRenderer
{
return new AudioRenderer(
$this->getFilesystemOperator(),
$this->getDocumentFinder(),
$this->getEnvironment(),
$this->getUrlGenerator()
);
}

public function testSupports(): void
{
/** @var DocumentInterface $mockValidDocument */
$mockValidDocument = new SimpleDocument();
$mockValidDocument->setFilename('file.mp3');
$mockValidDocument->setMimeType('audio/mpeg');

/** @var DocumentInterface $mockInvalidDocument */
$mockInvalidDocument = new SimpleDocument();
$mockInvalidDocument->setFilename('file.jpg');
$mockInvalidDocument->setMimeType('image/jpeg');

$renderer = $this->getRenderer();

$this->assertIsString($mockValidDocument->getMimeType());
$this->assertEquals('audio/mpeg', $mockValidDocument->getMimeType());
$this->assertIsBool($renderer->supports($mockValidDocument, []));
$this->assertTrue($renderer->supports($mockValidDocument, []));

$this->assertIsString($mockInvalidDocument->getMimeType());
$this->assertEquals('image/jpeg', $mockInvalidDocument->getMimeType());
$this->assertIsBool($renderer->supports($mockInvalidDocument, []));
$this->assertFalse($renderer->supports($mockInvalidDocument, []));
}

public function testRender(): void
{
/** @var DocumentInterface $mockDocument */
$mockDocument = new SimpleDocument();
$mockDocument->setFilename('file.mp3');
$mockDocument->setFolder('folder');
$mockDocument->setMimeType('audio/mpeg');

/** @var DocumentInterface $mockDocument2 */
$mockDocument2 = new SimpleDocument();
$mockDocument2->setFilename('file2.mp3');
$mockDocument2->setFolder('folder');
$mockDocument2->setMimeType('audio/mpeg');


$renderer = $this->getRenderer();
$this->assertHtmlTidyEquals((<<<EOT
<audio controls>
<source type="audio/ogg" src="/files/folder/file.ogg">
<source type="audio/mpeg" src="/files/folder/file.mp3">
<p>Your browser does not support native audio.</p>
</audio>
EOT
), ($renderer->render($mockDocument, [])));


$this->assertHtmlTidyEquals((<<<EOT
<audio controls>
<source type="audio/mpeg" src="/files/folder/file2.mp3">
<p>Your browser does not support native audio.</p>
</audio>
EOT
), ($renderer->render($mockDocument2, [])));


$this->assertHtmlTidyEquals((<<<EOT
<audio controls autoplay loop>
<source type="audio/ogg" src="/files/folder/file.ogg">
<source type="audio/mpeg" src="/files/folder/file.mp3">
<p>Your browser does not support native audio.</p>
</audio>
EOT
), ($renderer->render($mockDocument, [
'controls' => true,
'loop' => true,
'autoplay' => true,
])));


$this->assertHtmlTidyEquals((<<<EOT
<audio>
<source type="audio/ogg" src="/files/folder/file.ogg">
<source type="audio/mpeg" src="/files/folder/file.mp3">
<p>Your browser does not support native audio.</p>
</audio>
EOT
), ($renderer->render($mockDocument, [
'controls' => false
])));
}

/**
* @return DocumentFinderInterface
*/
private function getDocumentFinder(): DocumentFinderInterface
{
$finder = new ArrayDocumentFinder();

$finder->addDocument(
(new SimpleDocument())
->setFilename('file.mp3')
->setFolder('folder')
->setMimeType('audio/mpeg')
);
$finder->addDocument(
(new SimpleDocument())
->setFilename('file.ogg')
->setFolder('folder')
->setMimeType('audio/ogg')
);
$finder->addDocument(
(new SimpleDocument())
->setFilename('file2.mp3')
->setFolder('folder')
->setMimeType('audio/mpeg')
);

return $finder;
}
}
Loading

0 comments on commit 49f315f

Please sign in to comment.