. */ 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; #[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 IndividualReportModuleTest extends TestCase { protected static bool $uses_database = true; /** * @return array> */ public static function reportOptions(): array { return [ [ 'colors' => 'on', 'id' => 'X1030', 'notes' => 'on', 'page_size' => 'A4', 'photos' => 'all', 'sources' => 'on', ], [ 'colors' => '', 'id' => 'X1030', 'notes' => '', 'page_size' => 'A4', 'photos' => 'highlighted', 'sources' => '', ], [ 'colors' => 'on', 'id' => 'X1030', 'notes' => 'on', 'page_size' => 'US-Letter', 'photos' => 'none', 'sources' => 'on', ], [ 'colors' => '', 'id' => '', 'notes' => '', 'page_size' => '', 'photos' => '', 'sources' => '', ], ]; } #[DataProvider('reportOptions')] public function testReportRunsWithoutError( string $colors, string $id, string $notes, string $page_size, string $photos, string $sources ): 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 IndividualReportModule(); $module->setName('individual_report'); $xml = 'resources/' . $module->xmlFilename(); $vars = [ 'colors' => $colors, 'id' => $id, 'notes' => $notes, 'pageSize' => $page_size, 'photos' => $photos, 'sources' => $sources, ]; $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); } }