. */ 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 MissingFactsReportModuleTest extends TestCase { protected static bool $uses_database = true; /** * @return array> */ public static function reportOptions(): array { return [ [ 'fbapm' => 'on', 'fbarm' => '', 'fbasm' => 'on', 'fbirt' => '', 'fburi' => 'on', 'fconf' => '', 'fdeat' => 'on', 'fenga' => '', 'ffcom' => 'on', 'fmarb' => '', 'fmarr' => 'on', 'freli' => '', 'fsour' => 'on', 'maxgen' => '-1', 'page_size' => 'A4', 'pid' => 'X1030', 'relatives' => 'child-family', ], [ 'fbapm' => '', 'fbarm' => 'on', 'fbasm' => '', 'fbirt' => 'on', 'fburi' => '', 'fconf' => 'on', 'fdeat' => '', 'fenga' => 'on', 'ffcom' => '', 'fmarb' => 'on', 'fmarr' => '', 'freli' => 'on', 'fsour' => '', 'maxgen' => '-1', 'page_size' => 'US-Letter', 'pid' => 'X1030', 'relatives' => 'spouse-family', ], [ 'fbapm' => 'on', 'fbarm' => '', 'fbasm' => 'on', 'fbirt' => '', 'fburi' => 'on', 'fconf' => '', 'fdeat' => 'on', 'fenga' => '', 'ffcom' => 'on', 'fmarb' => '', 'fmarr' => 'on', 'freli' => '', 'fsour' => 'on', 'maxgen' => '-1', 'page_size' => 'A4', 'pid' => 'X1030', 'relatives' => 'direct-ancestors', ], [ 'fbapm' => '', 'fbarm' => 'on', 'fbasm' => '', 'fbirt' => 'on', 'fburi' => '', 'fconf' => 'on', 'fdeat' => '', 'fenga' => 'on', 'ffcom' => '', 'fmarb' => 'on', 'fmarr' => '', 'freli' => 'on', 'fsour' => '', 'maxgen' => '-1', 'page_size' => 'US-Letter', 'pid' => 'X1030', 'relatives' => 'ancestors', ], [ 'fbapm' => 'on', 'fbarm' => '', 'fbasm' => 'on', 'fbirt' => '', 'fburi' => 'on', 'fconf' => '', 'fdeat' => 'on', 'fenga' => '', 'ffcom' => 'on', 'fmarb' => '', 'fmarr' => 'on', 'freli' => '', 'fsour' => 'on', 'maxgen' => '-1', 'page_size' => 'A4', 'pid' => 'X1030', 'relatives' => 'descendants', ], [ 'fbapm' => '', 'fbarm' => 'on', 'fbasm' => '', 'fbirt' => 'on', 'fburi' => '', 'fconf' => 'on', 'fdeat' => '', 'fenga' => 'on', 'ffcom' => '', 'fmarb' => 'on', 'fmarr' => '', 'freli' => 'on', 'fsour' => '', 'maxgen' => '-1', 'page_size' => 'US-Letter', 'pid' => 'X1030', 'relatives' => 'all', ], [ 'fbapm' => '', 'fbarm' => '', 'fbasm' => '', 'fbirt' => '', 'fburi' => '', 'fconf' => '', 'fdeat' => '', 'fenga' => '', 'ffcom' => '', 'fmarb' => '', 'fmarr' => '', 'freli' => '', 'fsour' => '', 'maxgen' => '', 'page_size' => '', 'pid' => '', 'relatives' => '', ], ]; } #[DataProvider('reportOptions')] public function testReportRunsWithoutError( string $fbapm, string $fbarm, string $fbasm, string $fbirt, string $fburi, string $fconf, string $fdeat, string $fenga, string $ffcom, string $fmarb, string $fmarr, string $freli, string $fsour, string $maxgen, string $page_size, string $pid, string $relatives, ): 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 MissingFactsReportModule(); $module->setName('missing_facts_report'); $xml = 'resources/' . $module->xmlFilename(); $vars = [ 'fbapm' => $fbapm, 'fbarm' => $fbarm, 'fbasm' => $fbasm, 'fbirt' => $fbirt, 'fburi' => $fburi, 'fconf' => $fconf, 'fdeat' => $fdeat, 'fenga' => $fenga, 'ffcom' => $ffcom, 'fmarb' => $fmarb, 'fmarr' => $fmarr, 'freli' => $freli, 'fsour' => $fsour, 'maxgen' => $maxgen, 'pageSize' => $page_size, 'pid' => $pid, 'relatives' => $relatives, ]; $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); } }