. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Module; use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Contracts\UserInterface; use Fisharebest\Webtrees\Report\AbstractRenderer; use Fisharebest\Webtrees\Report\HtmlRenderer; use Fisharebest\Webtrees\Report\PdfRenderer; use Fisharebest\Webtrees\Report\ReportBaseCell; use Fisharebest\Webtrees\Report\ReportBaseElement; use Fisharebest\Webtrees\Report\ReportBaseFootnote; use Fisharebest\Webtrees\Report\ReportBaseImage; use Fisharebest\Webtrees\Report\ReportBaseLine; use Fisharebest\Webtrees\Report\ReportBaseText; use Fisharebest\Webtrees\Report\ReportBaseTextBox; use Fisharebest\Webtrees\Report\ReportExpressionLanguageProvider; use Fisharebest\Webtrees\Report\ReportHtmlCell; use Fisharebest\Webtrees\Report\ReportHtmlFootnote; use Fisharebest\Webtrees\Report\ReportHtmlImage; use Fisharebest\Webtrees\Report\ReportHtmlLine; use Fisharebest\Webtrees\Report\ReportHtmlText; use Fisharebest\Webtrees\Report\ReportHtmlTextBox; use Fisharebest\Webtrees\Report\ReportParserBase; use Fisharebest\Webtrees\Report\ReportParserGenerate; use Fisharebest\Webtrees\Report\ReportParserSetup; use Fisharebest\Webtrees\Report\ReportPdfCell; use Fisharebest\Webtrees\Report\ReportPdfFootnote; use Fisharebest\Webtrees\Report\ReportPdfImage; use Fisharebest\Webtrees\Report\ReportPdfLine; use Fisharebest\Webtrees\Report\ReportPdfText; use Fisharebest\Webtrees\Report\ReportPdfTextBox; use Fisharebest\Webtrees\Report\TcpdfWrapper; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\Site; use Fisharebest\Webtrees\TestCase; use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\DataProvider; use function ob_get_clean; #[CoversClass(PedigreeReportModule::class)] #[CoversClass(AbstractRenderer::class)] #[CoversClass(HtmlRenderer::class)] #[CoversClass(PdfRenderer::class)] #[CoversClass(ReportBaseCell::class)] #[CoversClass(ReportBaseElement::class)] #[CoversClass(ReportBaseFootnote::class)] #[CoversClass(ReportBaseImage::class)] #[CoversClass(ReportBaseLine::class)] #[CoversClass(ReportBaseText::class)] #[CoversClass(ReportBaseTextBox::class)] #[CoversClass(ReportExpressionLanguageProvider::class)] #[CoversClass(ReportHtmlCell::class)] #[CoversClass(ReportHtmlFootnote::class)] #[CoversClass(ReportHtmlImage::class)] #[CoversClass(ReportHtmlLine::class)] #[CoversClass(ReportHtmlText::class)] #[CoversClass(ReportHtmlTextBox::class)] #[CoversClass(ReportParserBase::class)] #[CoversClass(ReportParserGenerate::class)] #[CoversClass(ReportParserSetup::class)] #[CoversClass(ReportPdfCell::class)] #[CoversClass(ReportPdfFootnote::class)] #[CoversClass(ReportPdfImage::class)] #[CoversClass(ReportPdfLine::class)] #[CoversClass(ReportPdfText::class)] #[CoversClass(ReportPdfTextBox::class)] #[CoversClass(TcpdfWrapper::class)] class FactSourcesReportModuleTest extends TestCase { protected static bool $uses_database = true; /** * @return array> */ public static function reportOptions(): array { return [ [ 'page_size' => 'A4', 'sid' => 'X1102', 'sortby' => 'BIRT:DATE', 'stype' => 'facts', ], [ 'page_size' => 'US-Letter', 'sid' => 'X1102', 'sortby' => 'NAME', 'stype' => 'records', ], [ 'page_size' => '', 'sid' => '', 'sortby' => '', 'stype' => '', ], ]; } #[DataProvider('reportOptions')] public function testReportRunsWithoutError( string $page_size, string $sid, string $sortby, string $stype, ): void { $user = (new UserService())->create('user', 'User', 'user@example.com', 'secret'); $user->setPreference(UserInterface::PREF_IS_ADMINISTRATOR, '1'); Auth::login($user); $tree = $this->importTree('demo.ged'); $module = new FactSourcesReportModule(); $module->setName('fact_sources'); $xml = 'resources/' . $module->xmlFilename(); $vars = [ 'pageSize' => $page_size, 'sid' => $sid, 'sortby' => $sortby, 'stype' => $stype, ]; $parser = new ReportParserSetup($xml); $this->assertNotEmpty($parser->reportDescription()); $this->assertNotEmpty($parser->reportTitle()); $this->assertNotEmpty($parser->reportInputs()); Site::setPreference('INDEX_DIRECTORY', 'tests/data/'); ob_start(); new ReportParserGenerate($xml, new HtmlRenderer(), $vars, $tree); $html = ob_get_clean(); self::assertIsString($html); self::assertStringStartsWith('<', $html); self::assertStringEndsWith('>', $html); ob_start(); new ReportParserGenerate($xml, new PdfRenderer(), $vars, $tree); $pdf = ob_get_clean(); self::assertIsString($pdf); self::assertStringStartsWith('%PDF', $pdf); self::assertStringEndsWith("%%EOF\n", $pdf); } }