Files
sidata/vendor/geekcom/phpjasper/tests/PHPJasperTest.php
T

193 lines
5.2 KiB
PHP

<?php
/*
* This file is part of the PHPJasper.
*
* (c) Daniel Rodrigues (geekcom)
*
* For the full copyright and license information, please view the LICENSE.md
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace PHPJasper\Test;
use PHPUnit\Framework\TestCase;
use PHPJasper\PHPJasper;
use PHPJasper\Exception;
use ReflectionObject;
/**
* @author Rafael Queiroz <rafaelfqf@gmail.com>
* @author Daniel Rodrigues <geekcom@php.net>
*/
final class PHPJasperTest extends TestCase
{
private $instance;
public function setUp(): void
{
$this->instance = new PHPJasper();
}
/** @test */
public function constructor()
{
$this->assertInstanceOf(PHPJasper::class, new PHPJasper());
}
/** @test */
public function compile(): void
{
$result = $this->instance->compile('examples/hello_world.jrxml');
$this->expectOutputRegex('/.*jasperstarter compile ".*hello_world.jrxml"/', $result->printOutput());
}
/** @test */
public function process(): void
{
$result = $this->instance->process('examples/hello_world.jrxml', '{output_file}');
$expected = '.*jasperstarter process ".*hello_world.jrxml" -o "{output_file}"';
$this->expectOutputRegex('/' . $expected . '/', $result->printOutput());
}
/** @test */
public function processWithOptions(): void
{
$options = [
'locale' => 'en_US',
'params' => [
'param_1' => 'value_1',
'param_2' => 'value_2',
],
'db_connection' => [
'driver' => 'driver',
'username' => 'user',
'password' => '12345678',
'database' => 'db'
],
'resources' => 'foo',
];
$result = $this->instance->process('examples/hello_world.jrxml', '{output_file}', $options);
$expected = '.*jasperstarter --locale en_US process ".*hello_world.jrxml" -o "{output_file}" ';
$expected .= '-f pdf -P param_1="value_1" param_2="value_2" -t driver -u user -p 12345678 -n db -r foo';
$this->expectOutputRegex('/' . $expected . '/', $result->printOutput());
}
/** @test */
public function listParameters(): void
{
$result = $this->instance->listParameters('examples/hello_world.jrxml');
$this->expectOutputRegex('/.*jasperstarter list_parameters ".*hello_world.jrxml"/', $result->printOutput());
}
/** @test */
public function compileWithWrongInput(): void
{
$this->expectException(Exception\InvalidInputFile::class);
$this->instance->compile('');
}
/** @test */
public function outputWithUserOnExecute(): void
{
$this->expectException(Exception\ErrorCommandExecutable::class);
$this->instance->compile(__DIR__ . '/test.jrxml', __DIR__ . '/test')->execute('phpjasper');
$expected = 'su -u 1000 -c "./jasperstarter compile "/var/www/app/tests/test.jrxml" -o "/var/www/app/tests/test""';
$this->expectOutputRegex('/' . $expected . '/', $this->instance->printOutput());
}
/** @test */
public function executeWithoutCompile(): void
{
$this->expectException(Exception\InvalidCommandExecutable::class);
$this->instance->execute();
}
/** @test */
public function invalidInputFile(): void
{
$this->expectException(Exception\InvalidInputFile::class);
$this->instance->compile('{invalid}')->execute();
}
/** @test */
public function execute(): void
{
$actual = $this->instance->compile(__DIR__ . '/test.jrxml')->execute();
$this->assertIsArray($actual);
}
/** @test */
public function executeWithOutput(): void
{
$actual = $this->instance->compile(__DIR__ . '/test.jrxml', __DIR__ . '/test')->execute();
$this->assertIsArray($actual);
}
/** @test */
public function executeThrowsInvalidResourceDirectory(): void
{
$reflectionObject = new ReflectionObject($this->instance);
$reflectionProperty = $reflectionObject->getProperty('pathExecutable');
$reflectionProperty->setAccessible(true);
$reflectionProperty->setValue($this->instance, '');
$this->expectException(Exception\InvalidResourceDirectory::class);
$this->instance->compile(__DIR__ . '/test.jrxml', __DIR__ . '/test')->execute();
}
/** @test */
public function listParametersWithWrongInput(): void
{
$this->expectException(Exception\InvalidInputFile::class);
$this->instance->listParameters('');
}
/** @test */
public function processWithWrongInput(): void
{
$this->expectException(Exception\InvalidInputFile::class);
$this->instance->process(
'',
'',
[
'format' => 'mp3'
]
);
}
/** @test */
public function processWithWrongFormat(): void
{
$this->expectException(Exception\InvalidFormat::class);
$this->instance->process(
'hello_world.jrxml',
'',
[
'format' => 'mp3'
]
);
}
}