summaryrefslogtreecommitdiff
path: root/tests/app/Module/StatisticsChartModuleTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/app/Module/StatisticsChartModuleTest.php')
-rw-r--r--tests/app/Module/StatisticsChartModuleTest.php187
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());
}
}