diff options
Diffstat (limited to 'tests/app/Module/StatisticsChartModuleTest.php')
| -rw-r--r-- | tests/app/Module/StatisticsChartModuleTest.php | 187 |
1 files changed, 184 insertions, 3 deletions
diff --git a/tests/app/Module/StatisticsChartModuleTest.php b/tests/app/Module/StatisticsChartModuleTest.php index 1e1e3feae5..626055ed95 100644 --- a/tests/app/Module/StatisticsChartModuleTest.php +++ b/tests/app/Module/StatisticsChartModuleTest.php @@ -19,17 +19,198 @@ declare(strict_types=1); namespace Fisharebest\Webtrees\Module; +use Fig\Http\Message\RequestMethodInterface; +use Fig\Http\Message\StatusCodeInterface; +use Fisharebest\Webtrees\Registry; +use Fisharebest\Webtrees\Statistics; +use Fisharebest\Webtrees\StatisticsData; use Fisharebest\Webtrees\TestCase; +use Fisharebest\Webtrees\Tree; use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\DataProvider; #[CoversClass(StatisticsChartModule::class)] +#[CoversClass(Statistics::class)] class StatisticsChartModuleTest extends TestCase { + protected static bool $uses_database = true; + + /** + * @return array<int,array{x_as:int,y_as:int,z_as:int}> + */ + public static function customChartFamilyAndIndividualOptions(): array + { + return [ + ['x_as' => StatisticsChartModule::X_AXIS_AGE_AT_DEATH, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_ALL], + ['x_as' => StatisticsChartModule::X_AXIS_AGE_AT_DEATH, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_SEX], + ['x_as' => StatisticsChartModule::X_AXIS_AGE_AT_DEATH, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_TIME], + ['x_as' => StatisticsChartModule::X_AXIS_AGE_AT_DEATH, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_ALL], + ['x_as' => StatisticsChartModule::X_AXIS_AGE_AT_DEATH, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_SEX], + ['x_as' => StatisticsChartModule::X_AXIS_AGE_AT_DEATH, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_TIME], + ['x_as' => StatisticsChartModule::X_AXIS_AGE_AT_FIRST_MARRIAGE, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_ALL], + ['x_as' => StatisticsChartModule::X_AXIS_AGE_AT_FIRST_MARRIAGE, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_SEX], + ['x_as' => StatisticsChartModule::X_AXIS_AGE_AT_FIRST_MARRIAGE, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_TIME], + ['x_as' => StatisticsChartModule::X_AXIS_AGE_AT_FIRST_MARRIAGE, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_ALL], + ['x_as' => StatisticsChartModule::X_AXIS_AGE_AT_FIRST_MARRIAGE, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_SEX], + ['x_as' => StatisticsChartModule::X_AXIS_AGE_AT_FIRST_MARRIAGE, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_TIME], + ['x_as' => StatisticsChartModule::X_AXIS_AGE_AT_MARRIAGE, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_ALL], + ['x_as' => StatisticsChartModule::X_AXIS_AGE_AT_MARRIAGE, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_SEX], + ['x_as' => StatisticsChartModule::X_AXIS_AGE_AT_MARRIAGE, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_TIME], + ['x_as' => StatisticsChartModule::X_AXIS_AGE_AT_MARRIAGE, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_ALL], + ['x_as' => StatisticsChartModule::X_AXIS_AGE_AT_MARRIAGE, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_SEX], + ['x_as' => StatisticsChartModule::X_AXIS_AGE_AT_MARRIAGE, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_TIME], + ['x_as' => StatisticsChartModule::X_AXIS_BIRTH_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_ALL], + ['x_as' => StatisticsChartModule::X_AXIS_BIRTH_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_SEX], + ['x_as' => StatisticsChartModule::X_AXIS_BIRTH_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_TIME], + ['x_as' => StatisticsChartModule::X_AXIS_BIRTH_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_ALL], + ['x_as' => StatisticsChartModule::X_AXIS_BIRTH_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_SEX], + ['x_as' => StatisticsChartModule::X_AXIS_BIRTH_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_TIME], + ['x_as' => StatisticsChartModule::X_AXIS_DEATH_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_ALL], + ['x_as' => StatisticsChartModule::X_AXIS_DEATH_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_SEX], + ['x_as' => StatisticsChartModule::X_AXIS_DEATH_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_TIME], + ['x_as' => StatisticsChartModule::X_AXIS_DEATH_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_ALL], + ['x_as' => StatisticsChartModule::X_AXIS_DEATH_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_SEX], + ['x_as' => StatisticsChartModule::X_AXIS_DEATH_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_TIME], + ['x_as' => StatisticsChartModule::X_AXIS_FIRST_CHILD_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_ALL], + ['x_as' => StatisticsChartModule::X_AXIS_FIRST_CHILD_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_SEX], + ['x_as' => StatisticsChartModule::X_AXIS_FIRST_CHILD_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_TIME], + ['x_as' => StatisticsChartModule::X_AXIS_FIRST_CHILD_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_ALL], + ['x_as' => StatisticsChartModule::X_AXIS_FIRST_CHILD_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_SEX], + ['x_as' => StatisticsChartModule::X_AXIS_FIRST_CHILD_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_TIME], + ['x_as' => StatisticsChartModule::X_AXIS_FIRST_MARRIAGE_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_ALL], + ['x_as' => StatisticsChartModule::X_AXIS_FIRST_MARRIAGE_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_TIME], + ['x_as' => StatisticsChartModule::X_AXIS_FIRST_MARRIAGE_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_ALL], + ['x_as' => StatisticsChartModule::X_AXIS_FIRST_MARRIAGE_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_TIME], + ['x_as' => StatisticsChartModule::X_AXIS_MARRIAGE_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_ALL], + ['x_as' => StatisticsChartModule::X_AXIS_MARRIAGE_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_TIME], + ['x_as' => StatisticsChartModule::X_AXIS_MARRIAGE_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_ALL], + ['x_as' => StatisticsChartModule::X_AXIS_MARRIAGE_MONTH, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_TIME], + ['x_as' => StatisticsChartModule::X_AXIS_NUMBER_OF_CHILDREN, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_ALL], + ['x_as' => StatisticsChartModule::X_AXIS_NUMBER_OF_CHILDREN, 'y_as' => StatisticsChartModule::Y_AXIS_NUMBERS, 'z_as' => StatisticsChartModule::Z_AXIS_TIME], + ['x_as' => StatisticsChartModule::X_AXIS_NUMBER_OF_CHILDREN, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_ALL], + ['x_as' => StatisticsChartModule::X_AXIS_NUMBER_OF_CHILDREN, 'y_as' => StatisticsChartModule::Y_AXIS_PERCENT, 'z_as' => StatisticsChartModule::Z_AXIS_TIME], + ]; + } + /** - * Test that the class exists + * @return array<int,array{x_as:int,chart_shows:string,chart_type:string,surn:string}> */ - public function testClassExists(): void + public static function customChartMapOptions(): array + { + return [ + ['x_as' => StatisticsChartModule::X_AXIS_INDIVIDUAL_MAP, 'chart_shows' => 'world', 'chart_type' => 'indi_distribution_chart', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_INDIVIDUAL_MAP, 'chart_shows' => '150', 'chart_type' => 'indi_distribution_chart', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_INDIVIDUAL_MAP, 'chart_shows' => '021', 'chart_type' => 'indi_distribution_chart', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_INDIVIDUAL_MAP, 'chart_shows' => '005', 'chart_type' => 'indi_distribution_chart', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_INDIVIDUAL_MAP, 'chart_shows' => '142', 'chart_type' => 'indi_distribution_chart', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_INDIVIDUAL_MAP, 'chart_shows' => '145', 'chart_type' => 'indi_distribution_chart', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_INDIVIDUAL_MAP, 'chart_shows' => '002', 'chart_type' => 'indi_distribution_chart', 'surn' => ''], + + ['x_as' => StatisticsChartModule::X_AXIS_INDIVIDUAL_MAP, 'chart_shows' => 'world', 'chart_type' => 'surname_distribution_chart', 'surn' => 'smith'], + ['x_as' => StatisticsChartModule::X_AXIS_INDIVIDUAL_MAP, 'chart_shows' => '150', 'chart_type' => 'surname_distribution_chart', 'surn' => 'smith'], + ['x_as' => StatisticsChartModule::X_AXIS_INDIVIDUAL_MAP, 'chart_shows' => '021', 'chart_type' => 'surname_distribution_chart', 'surn' => 'smith'], + ['x_as' => StatisticsChartModule::X_AXIS_INDIVIDUAL_MAP, 'chart_shows' => '005', 'chart_type' => 'surname_distribution_chart', 'surn' => 'smith'], + ['x_as' => StatisticsChartModule::X_AXIS_INDIVIDUAL_MAP, 'chart_shows' => '142', 'chart_type' => 'surname_distribution_chart', 'surn' => 'smith'], + ['x_as' => StatisticsChartModule::X_AXIS_INDIVIDUAL_MAP, 'chart_shows' => '145', 'chart_type' => 'surname_distribution_chart', 'surn' => 'smith'], + ['x_as' => StatisticsChartModule::X_AXIS_INDIVIDUAL_MAP, 'chart_shows' => '002', 'chart_type' => 'surname_distribution_chart', 'surn' => 'smith'], + + ['x_as' => StatisticsChartModule::X_AXIS_BIRTH_MAP, 'chart_shows' => 'world', 'chart_type' => '', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_BIRTH_MAP, 'chart_shows' => '150', 'chart_type' => '', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_BIRTH_MAP, 'chart_shows' => '021', 'chart_type' => '', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_BIRTH_MAP, 'chart_shows' => '005', 'chart_type' => '', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_BIRTH_MAP, 'chart_shows' => '142', 'chart_type' => '', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_BIRTH_MAP, 'chart_shows' => '145', 'chart_type' => '', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_BIRTH_MAP, 'chart_shows' => '002', 'chart_type' => '', 'surn' => ''], + + ['x_as' => StatisticsChartModule::X_AXIS_DEATH_MAP, 'chart_shows' => 'world', 'chart_type' => '', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_DEATH_MAP, 'chart_shows' => '150', 'chart_type' => '', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_DEATH_MAP, 'chart_shows' => '021', 'chart_type' => '', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_DEATH_MAP, 'chart_shows' => '005', 'chart_type' => '', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_DEATH_MAP, 'chart_shows' => '142', 'chart_type' => '', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_DEATH_MAP, 'chart_shows' => '145', 'chart_type' => '', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_DEATH_MAP, 'chart_shows' => '002', 'chart_type' => '', 'surn' => ''], + + ['x_as' => StatisticsChartModule::X_AXIS_MARRIAGE_MAP, 'chart_shows' => 'world', 'chart_type' => '', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_MARRIAGE_MAP, 'chart_shows' => '150', 'chart_type' => '', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_MARRIAGE_MAP, 'chart_shows' => '021', 'chart_type' => '', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_MARRIAGE_MAP, 'chart_shows' => '005', 'chart_type' => '', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_MARRIAGE_MAP, 'chart_shows' => '142', 'chart_type' => '', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_MARRIAGE_MAP, 'chart_shows' => '145', 'chart_type' => '', 'surn' => ''], + ['x_as' => StatisticsChartModule::X_AXIS_MARRIAGE_MAP, 'chart_shows' => '002', 'chart_type' => '', 'surn' => ''], + ]; + } + + public function testTabContent(): void + { + $tree = $this->importTree('demo.ged'); + Registry::container()->set(Tree::class, $tree); + + $module = new StatisticsChartModule(); + $request = self::createRequest(RequestMethodInterface::METHOD_POST) + ->withAttribute('tree', $tree); + + $response = $module->getChartAction($request); + self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode()); + self::assertNotEmpty($response->getBody()->getContents()); + + //$response = $module->getFamiliesAction($request); + //self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode()); + //self::assertNotEmpty($response->getBody()->getContents()); + + $response = $module->getIndividualsAction($request); + self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode()); + self::assertNotEmpty($response->getBody()->getContents()); + + $response = $module->getOtherAction($request); + self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode()); + self::assertNotEmpty($response->getBody()->getContents()); + } + + #[DataProvider('customChartFamilyAndIndividualOptions')] + public function testCustomFamilyAndIndividualCharts(int $x_as, int $y_as, int $z_as): void { - self::assertTrue(class_exists(StatisticsChartModule::class)); + $tree = $this->importTree('demo.ged'); + Registry::container()->set(Tree::class, $tree); + + $module = new StatisticsChartModule(); + $request = self::createRequest(RequestMethodInterface::METHOD_POST) + ->withAttribute('tree', $tree) + ->withParsedBody([ + 'x-as' => $x_as, + 'y-as' => $y_as, + 'z-as' => $z_as, + 'x-axis-boundaries-ages' => '1,5,10,20,30,40,50,60,70,80,90,100', + 'x-axis-boundaries-ages_m' => '16,18,20,22,24,26,28,30,32,35,40,50', + 'z-axis-boundaries-periods' => '1700,1750,1800,1850,1900,1950,2000', + ]); + + $response = $module->postCustomChartAction($request); + + self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode()); + self::assertNotEmpty($response->getBody()->getContents()); + } + + #[DataProvider('customChartMapOptions')] + public function testCustomMapCharts(int $x_as, string $chart_shows, string $chart_type, string $surn): void + { + $tree = $this->importTree('demo.ged'); + Registry::container()->set(Tree::class, $tree); + + $module = new StatisticsChartModule(); + $request = self::createRequest(RequestMethodInterface::METHOD_POST) + ->withAttribute('tree', $tree) + ->withParsedBody([ + 'x-as' => $x_as, + 'y-as' => '0', + 'z-as' => '0', + 'chart_shows' => $chart_shows, + 'chart_type' => $chart_type, + 'SURN' => $surn, + ]); + + $response = $module->postCustomChartAction($request); + + self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode()); + self::assertNotEmpty($response->getBody()->getContents()); } } |
