mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2026-03-03 20:49:41 +00:00
# Conflicts: # docs/source/_static/code/exports/BirthdateFilter.php # rector.php # src/Bundle/ChillActivityBundle/Export/Aggregator/ACPAggregators/ByActivityTypeAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/ACPAggregators/BySocialActionAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/ACPAggregators/BySocialIssueAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityLocationAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityPresenceAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityReasonAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityTypeAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityUserAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityUsersAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityUsersJobAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/ActivityUsersScopeAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/ByCreatorAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/ByThirdpartyAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/CreatorJobAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/CreatorScopeAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/DateAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/LocationTypeAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/PersonAggregators/HouseholdAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/PersonAggregators/PersonAggregator.php # src/Bundle/ChillActivityBundle/Export/Aggregator/PersonsAggregator.php # src/Bundle/ChillActivityBundle/Export/Export/LinkedToACP/SumActivityDuration.php # src/Bundle/ChillActivityBundle/Export/Export/LinkedToACP/SumActivityVisitDuration.php # src/Bundle/ChillActivityBundle/Export/Filter/ACPFilters/ActivityTypeFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/ACPFilters/BySocialActionFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/ACPFilters/BySocialIssueFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/ACPFilters/HasNoActivityFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/ACPFilters/PeriodHavingActivityBetweenDatesFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/ActivityDateFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/ActivityPresenceFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/ActivityTypeFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/ActivityUsersFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/ByCreatorFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/CreatorJobFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/CreatorScopeFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/EmergencyFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/LocationFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/LocationTypeFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/PersonFilters/ActivityReasonFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/PersonsFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/SentReceivedFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/UserFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/UsersJobFilter.php # src/Bundle/ChillActivityBundle/Export/Filter/UsersScopeFilter.php # src/Bundle/ChillActivityBundle/Validator/Constraints/ActivityValidity.php # src/Bundle/ChillAsideActivityBundle/src/Export/Aggregator/ByActivityTypeAggregator.php # src/Bundle/ChillAsideActivityBundle/src/Export/Aggregator/ByUserJobAggregator.php # src/Bundle/ChillAsideActivityBundle/src/Export/Aggregator/ByUserScopeAggregator.php # src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByActivityTypeFilter.php # src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByDateFilter.php # src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByUserFilter.php # src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByUserJobFilter.php # src/Bundle/ChillAsideActivityBundle/src/Export/Filter/ByUserScopeFilter.php # src/Bundle/ChillCalendarBundle/Export/Aggregator/AgentAggregator.php # src/Bundle/ChillCalendarBundle/Export/Aggregator/CancelReasonAggregator.php # src/Bundle/ChillCalendarBundle/Export/Aggregator/JobAggregator.php # src/Bundle/ChillCalendarBundle/Export/Aggregator/LocationAggregator.php # src/Bundle/ChillCalendarBundle/Export/Aggregator/LocationTypeAggregator.php # src/Bundle/ChillCalendarBundle/Export/Aggregator/MonthYearAggregator.php # src/Bundle/ChillCalendarBundle/Export/Aggregator/ScopeAggregator.php # src/Bundle/ChillCalendarBundle/Export/Aggregator/UrgencyAggregator.php # src/Bundle/ChillCalendarBundle/Export/Filter/AgentFilter.php # src/Bundle/ChillCalendarBundle/Export/Filter/BetweenDatesFilter.php # src/Bundle/ChillCalendarBundle/Export/Filter/CalendarRangeFilter.php # src/Bundle/ChillCalendarBundle/Export/Filter/JobFilter.php # src/Bundle/ChillCalendarBundle/Export/Filter/ScopeFilter.php # src/Bundle/ChillEventBundle/Export/Aggregator/EventDateAggregator.php # src/Bundle/ChillEventBundle/Export/Aggregator/EventTypeAggregator.php # src/Bundle/ChillEventBundle/Export/Aggregator/RoleAggregator.php # src/Bundle/ChillEventBundle/Export/Filter/EventDateFilter.php # src/Bundle/ChillEventBundle/Export/Filter/EventTypeFilter.php # src/Bundle/ChillEventBundle/Export/Filter/RoleFilter.php # src/Bundle/ChillMainBundle/Controller/ExportController.php # src/Bundle/ChillMainBundle/Controller/SavedExportController.php # src/Bundle/ChillMainBundle/DependencyInjection/CompilerPass/ExportsCompilerPass.php # src/Bundle/ChillMainBundle/Entity/Notification.php # src/Bundle/ChillMainBundle/Export/ExportManager.php # src/Bundle/ChillMainBundle/Export/Formatter/CSVFormatter.php # src/Bundle/ChillMainBundle/Export/Formatter/CSVListFormatter.php # src/Bundle/ChillMainBundle/Export/Formatter/CSVPivotedListFormatter.php # src/Bundle/ChillMainBundle/Export/Formatter/SpreadSheetFormatter.php # src/Bundle/ChillMainBundle/Export/Formatter/SpreadsheetListFormatter.php # src/Bundle/ChillMainBundle/Form/SavedExportType.php # src/Bundle/ChillMainBundle/Form/Type/DataTransformer/EntityToJsonTransformer.php # src/Bundle/ChillMainBundle/Tests/Export/ExportManagerTest.php # src/Bundle/ChillMainBundle/Tests/Export/SortExportElementTest.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/AdministrativeLocationAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/ClosingDateAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/ClosingMotiveAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/ConfidentialAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/CreatorJobAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/DurationAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/EmergencyAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/EvaluationAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/GeographicalUnitStatAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/IntensityAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/JobWorkingOnCourseAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/OpeningDateAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/OriginAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/PersonParticipatingAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/ReferrerAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/ReferrerScopeAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/RequestorAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/ScopeAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/ScopeWorkingOnCourseAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/SocialActionAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/SocialIssueAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/StepAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/UserJobAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingCourseAggregators/UserWorkingOnCourseAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingPeriodStepHistoryAggregators/ByClosingMotiveAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingPeriodStepHistoryAggregators/ByDateAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/AccompanyingPeriodStepHistoryAggregators/ByStepAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/EvaluationAggregators/ByEndDateAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/EvaluationAggregators/ByMaxDateAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/EvaluationAggregators/ByStartDateAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/EvaluationAggregators/EvaluationTypeAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/EvaluationAggregators/HavingEndDateAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/HouseholdAggregators/ChildrenNumberAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/HouseholdAggregators/CompositionAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/AdministrativeStatusAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/AgeAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/ByHouseholdCompositionAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/CenterAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/EmploymentStatusAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/GenderAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/HouseholdPositionAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/MaritalStatusAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/NationalityAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/PersonAggregators/PostalCodeAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/ActionTypeAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/CreatorAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/CreatorJobAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/CreatorScopeAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/GoalAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/GoalResultAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/HandlingThirdPartyAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/JobAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/ReferrerAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/ResultAggregator.php # src/Bundle/ChillPersonBundle/Export/Aggregator/SocialWorkAggregators/ScopeAggregator.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/ActiveOnDateFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/ActiveOneDayBetweenDatesFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/AdministrativeLocationFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/ClosingMotiveFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/ConfidentialFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/CreatorFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/CreatorJobFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/EmergencyFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/EvaluationFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/GeographicalUnitStatFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/HandlingThirdPartyFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/HasNoReferrerFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/HasTemporaryLocationFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/IntensityFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/NotAssociatedWithAReferenceAddressFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/OpenBetweenDatesFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/OriginFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/ReferrerFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/ReferrerFilterBetweenDates.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/RequestorFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/SocialActionFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/SocialIssueFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/StepFilterBetweenDates.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/StepFilterOnDate.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/UserJobFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingPeriodStepHistoryFilters/ByDateFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingPeriodStepHistoryFilters/ByStepFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/EvaluationFilters/EvaluationTypeFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/EvaluationFilters/MaxDateFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/AddressRefStatusFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/AgeFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/BirthdateFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/ByHouseholdCompositionFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/DeadOrAliveFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/DeathdateFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/GenderFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/GeographicalUnitFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/MaritalStatusFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/NationalityFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/ResidentialAddressAtThirdpartyFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/ResidentialAddressAtUserFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/WithParticipationBetweenDatesFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/WithoutHouseholdComposition.php # src/Bundle/ChillPersonBundle/Export/Filter/PersonFilters/WithoutParticipationBetweenDatesFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/SocialWorkFilters/CreatorFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/SocialWorkFilters/CreatorJobFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/SocialWorkFilters/CreatorScopeFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/SocialWorkFilters/JobFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/SocialWorkFilters/ReferrerFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/SocialWorkFilters/ScopeFilter.php # src/Bundle/ChillPersonBundle/Export/Filter/SocialWorkFilters/SocialWorkTypeFilter.php # src/Bundle/ChillPersonBundle/Export/Helper/FilterListAccompanyingPeriodHelper.php # src/Bundle/ChillPersonBundle/Security/Authorization/AccompanyingPeriodVoter.php # src/Bundle/ChillPersonBundle/Tests/Export/Export/ListAccompanyingPeriodTest.php # src/Bundle/ChillPersonBundle/Validator/Constraints/AccompanyingPeriod/AccompanyingPeriodValidity.php # src/Bundle/ChillPersonBundle/Validator/Constraints/AccompanyingPeriod/ConfidentialCourseMustHaveReferrer.php # src/Bundle/ChillPersonBundle/Validator/Constraints/AccompanyingPeriod/LocationValidity.php # src/Bundle/ChillPersonBundle/Validator/Constraints/Household/MaxHolder.php # src/Bundle/ChillReportBundle/Export/Export/ReportList.php # src/Bundle/ChillReportBundle/Export/Filter/ReportDateFilter.php
450 lines
14 KiB
PHP
450 lines
14 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/*
|
|
* Chill is a software for social workers
|
|
*
|
|
* For the full copyright and license information, please view
|
|
* the LICENSE file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Chill\MainBundle\Test\Export;
|
|
|
|
use Chill\MainBundle\Entity\User;
|
|
use Chill\MainBundle\Export\DirectExportInterface;
|
|
use Chill\MainBundle\Export\ExportGenerationContext;
|
|
use Chill\MainBundle\Export\ExportInterface;
|
|
use Chill\MainBundle\Test\PrepareClientTrait;
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
use Doctrine\ORM\NativeQuery;
|
|
use Doctrine\ORM\QueryBuilder;
|
|
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
|
|
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
|
|
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
|
|
|
/**
|
|
* This class provide a set of tests for exports.
|
|
*
|
|
* The tests provided by this class will check basic things, like
|
|
* the type of value are conform to the expected, etc.
|
|
*/
|
|
abstract class AbstractExportTest extends WebTestCase
|
|
{
|
|
use PrepareClientTrait;
|
|
|
|
/**
|
|
* Return an array usable as ACL.
|
|
*
|
|
* If this method is overridden, the returned result must be an array
|
|
* with this form :
|
|
*
|
|
* ```
|
|
* array(
|
|
* array(
|
|
* 'center' => //center instance
|
|
* 'circles' => array(// array of circles instances )
|
|
* )
|
|
* );
|
|
* ```
|
|
*/
|
|
public static function getACL()
|
|
{
|
|
if (null === static::$kernel) {
|
|
static::bootKernel();
|
|
}
|
|
|
|
$em = static::getContainer()->get(EntityManagerInterface::class);
|
|
|
|
$centers = $em->getRepository(\Chill\MainBundle\Entity\Center::class)
|
|
->findAll();
|
|
$circles = $em->getRepository(\Chill\MainBundle\Entity\Scope::class)
|
|
->findAll();
|
|
|
|
if (0 === \count($centers)) {
|
|
throw new \RuntimeException('No center found. Did you forget to run `doctrine:fixtures:load` command before ?');
|
|
}
|
|
|
|
if (0 === \count($circles)) {
|
|
throw new \RuntimeException('No circle found. Did you forget to run `doctrine:fixtures:load` command before ?');
|
|
}
|
|
|
|
return [[
|
|
'center' => $centers[0],
|
|
'circles' => [
|
|
$circles,
|
|
], ]];
|
|
}
|
|
|
|
/**
|
|
* Create an instance of the report to test.
|
|
*
|
|
* @return ExportInterface|DirectExportInterface|iterable<ExportInterface>|iterable<DirectExportInterface> an instance of the export to test
|
|
*/
|
|
abstract public function getExport();
|
|
|
|
/**
|
|
* Create possible combinaison of data (produced by the form).
|
|
*
|
|
* This data will be used to generate data providers using this data.
|
|
*
|
|
* @return array an array of data. Example : `array( array(), array('fields' => array(1,2,3), ...)` where an empty array and `array(1,2,3)` are possible values
|
|
*/
|
|
abstract public static function getFormData(): array;
|
|
|
|
/**
|
|
* get the possible modifiers which could apply in combination to this
|
|
* export.
|
|
* .
|
|
*
|
|
* @return list<list<string>> of string[] an array which contains an array of possible modifiers. Example : `array( array('modifier_1', 'modifier_2'), array('modifier_1'), ...)`
|
|
*/
|
|
abstract public static function getModifiersCombination(): array;
|
|
|
|
protected function getUser(): User
|
|
{
|
|
$em = static::getContainer()->get(EntityManagerInterface::class);
|
|
if (null === $user = $em->createQueryBuilder()->select('u')
|
|
->from(User::class, 'u')
|
|
->setMaxResults(1)
|
|
->getQuery()->getOneOrNullResult()) {
|
|
throw new \RuntimeException('User not found');
|
|
}
|
|
|
|
return $user;
|
|
}
|
|
|
|
protected function getParameters(bool $filterStatsByCenter): ParameterBagInterface
|
|
{
|
|
return new ParameterBag(['chill_main' => ['acl' => ['filter_stats_by_center' => $filterStatsByCenter]]]);
|
|
}
|
|
|
|
/**
|
|
* wrap the results of @see{self::getExports()}, which may be an iterable or an export into an iterble.
|
|
*/
|
|
private function getExports(): iterable
|
|
{
|
|
$exports = $this->getExport();
|
|
|
|
if (is_iterable($exports)) {
|
|
return $exports;
|
|
}
|
|
|
|
return [$exports];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider dataProviderFormDataToNormalize
|
|
*/
|
|
public function testDataNormalization(array $data, int $version, array $customAssert): void
|
|
{
|
|
$export = $this->getExport();
|
|
|
|
if (is_iterable($export)) {
|
|
foreach ($export as $e) {
|
|
$this->testOneDataNormalization($e, $data, $version, $customAssert);
|
|
}
|
|
} else {
|
|
$this->testOneDataNormalization($export, $data, $version, $customAssert);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* A list of data to normalize.
|
|
*
|
|
* @return iterable{array}
|
|
*/
|
|
public static function dataProviderFormDataToNormalize(): iterable
|
|
{
|
|
foreach (static::getFormData() as $data) {
|
|
yield [$data, 1, []];
|
|
}
|
|
}
|
|
|
|
private function testOneDataNormalization(ExportInterface|DirectExportInterface $export, array $data, int $version, array $customAssert): void
|
|
{
|
|
$normalized = $export->normalizeFormData($data);
|
|
$actual = $export->denormalizeFormData($normalized, $version);
|
|
|
|
self::assertEqualsCanonicalizing(array_keys($data), array_keys($actual));
|
|
|
|
foreach ($data as $key => $value) {
|
|
self::assertArrayHasKey($key, $actual);
|
|
if (array_key_exists($key, $customAssert)) {
|
|
call_user_func($customAssert[$key], $actual[$key], $value);
|
|
} elseif (is_iterable($value)) {
|
|
continue;
|
|
} elseif (is_object($value) && method_exists($value, 'getId')) {
|
|
self::assertEquals($value->getId(), $actual[$key]->getId());
|
|
} else {
|
|
self::assertEquals($value, $actual[$key]);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test the formatters type are string.
|
|
*/
|
|
public function testGetAllowedFormattersType(): void
|
|
{
|
|
foreach ($this->getExports() as $export) {
|
|
$formattersTypes = $export->getAllowedFormattersTypes();
|
|
|
|
$this->assertContainsOnly(
|
|
'string',
|
|
$formattersTypes,
|
|
true,
|
|
'Test that the method `getAllowedFormattersTypes` returns an array of string'
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test that the description is not empty.
|
|
*/
|
|
public function testGetDescription(): void
|
|
{
|
|
foreach ($this->getExports() as $export) {
|
|
$this->assertIsString(
|
|
$export->getDescription(),
|
|
'Assert that the `getDescription` method return a string'
|
|
);
|
|
$this->assertNotEmpty(
|
|
$export->getDescription(),
|
|
'Assert that the `getDescription` method does not return an empty '
|
|
.'string.'
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test that the query keys are strings.
|
|
*
|
|
* @dataProvider dataProviderGetQueryKeys
|
|
*/
|
|
public function testGetQueryKeys(array $data): void
|
|
{
|
|
foreach ($this->getExports() as $export) {
|
|
$queryKeys = $export->getQueryKeys($data);
|
|
|
|
$this->assertContainsOnly(
|
|
'string',
|
|
$queryKeys,
|
|
true,
|
|
'test that the query keys returned by `getQueryKeys` are only strings'
|
|
);
|
|
$this->assertGreaterThanOrEqual(
|
|
1,
|
|
\count($queryKeys),
|
|
'test that there are at least one query key returned'
|
|
);
|
|
}
|
|
}
|
|
|
|
public static function dataProviderGetQueryKeys()
|
|
{
|
|
foreach (static::getFormData() as $data) {
|
|
yield [$data];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test that.
|
|
*
|
|
* - the results have a correct form (are arrays or traversable)
|
|
* - each key in a row are present in getQueryKeys ;
|
|
* - each returned object of the `getLabels` method is callable
|
|
* - each result can be converted to string using this callable
|
|
* - each of this callable can provide a string for '_header'
|
|
*
|
|
* @param string[] $modifiers
|
|
* @param array $acl
|
|
*
|
|
* @dataProvider dataProviderInitiateQuery
|
|
*/
|
|
public function testGetResultsAndLabels($modifiers, $acl, array $data): void
|
|
{
|
|
foreach ($this->getExports() as $export) {
|
|
// it is more convenient to group the `getResult` and `getLabels` test
|
|
// due to the fact that testing both methods use the same tools.
|
|
|
|
$queryKeys = $export->getQueryKeys($data);
|
|
$query = $export->initiateQuery($modifiers, $acl, $data, $exportGenerationContext = new ExportGenerationContext($this->getUser()));
|
|
|
|
// limit the result for the query for performance reason (only for QueryBuilder,
|
|
// not possible in NativeQuery)
|
|
if ($query instanceof QueryBuilder) {
|
|
$query->setMaxResults(1);
|
|
}
|
|
|
|
$results = $export->getResult($query, $data, $exportGenerationContext);
|
|
|
|
$this->assertIsArray(
|
|
$results,
|
|
'assert that the returned result is an array'
|
|
);
|
|
|
|
if (0 === \count($results)) {
|
|
$this->markTestIncomplete('The result is empty. We cannot process tests '
|
|
.'on results');
|
|
}
|
|
|
|
// testing the result
|
|
$result = $results[0];
|
|
|
|
$this->assertTrue(
|
|
is_iterable($result),
|
|
'test that each row in the result is traversable or an array'
|
|
);
|
|
|
|
$i = 0;
|
|
foreach ($result as $key => $value) {
|
|
$this->assertContains(
|
|
$key,
|
|
$queryKeys,
|
|
'test that each key is present in `getQueryKeys`'
|
|
);
|
|
|
|
$closure = $export->getLabels($key, [$value], $data);
|
|
|
|
$this->assertTrue(
|
|
\is_callable($closure, false),
|
|
'test that the `getLabels` for key is a callable'
|
|
);
|
|
|
|
$this->assertTrue(
|
|
// conditions
|
|
\is_string((string) \call_user_func($closure, '_header'))
|
|
&& !empty(\call_user_func($closure, '_header'))
|
|
&& '_header' !== \call_user_func($closure, '_header'),
|
|
// message
|
|
sprintf('Test that the callable return by `getLabels` for key %s '
|
|
.'can provide an header', $key)
|
|
);
|
|
++$i;
|
|
|
|
if ($i > 15) {
|
|
// do not iterate on each result
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test that the getType method return a string.
|
|
*/
|
|
public function testGetType(): void
|
|
{
|
|
foreach ($this->getExports() as $export) {
|
|
$this->assertIsString(
|
|
$export->getType(),
|
|
'Assert that the `getType` method return a string'
|
|
);
|
|
$this->assertNotEmpty($export->getType(), 'Assert that the `getType` method'
|
|
.' does not return an empty string.');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* test that the query returned is a QueryBuilder or a NativeQuery.
|
|
*
|
|
* If the query is a QueryBuilder, test that select and from is not empty.
|
|
*
|
|
* If the query is a native sql, test the query is not empty (length is
|
|
* > 0).
|
|
*
|
|
* @dataProvider dataProviderInitiateQuery
|
|
*/
|
|
public function testInitiateQuery(mixed $modifiers, mixed $acl, mixed $data): void
|
|
{
|
|
foreach ($this->getExports() as $export) {
|
|
$query = $export->initiateQuery($modifiers, $acl, $data, new ExportGenerationContext($this->getUser()));
|
|
|
|
$this->assertTrue(
|
|
$query instanceof QueryBuilder || $query instanceof NativeQuery,
|
|
sprintf(
|
|
'Assert that the returned query is an instance of %s or %s',
|
|
QueryBuilder::class,
|
|
NativeQuery::class
|
|
)
|
|
);
|
|
|
|
if ($query instanceof QueryBuilder) {
|
|
$this->assertGreaterThanOrEqual(
|
|
1,
|
|
\count($query->getDQLPart('select')),
|
|
"assert there is at least one 'select' part"
|
|
);
|
|
|
|
$this->assertGreaterThanOrEqual(
|
|
1,
|
|
\count($query->getDQLPart('from')),
|
|
"assert there is at least one 'from' part"
|
|
);
|
|
} elseif ($query instanceof NativeQuery) {
|
|
$this->assertNotEmpty(
|
|
$query->getSQL(),
|
|
'check that the SQL query is not empty'
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test required role is an instance of Role.
|
|
*/
|
|
public function testRequiredRole(): void
|
|
{
|
|
foreach ($this->getExports() as $export) {
|
|
$role = $export->requiredRole();
|
|
|
|
self::assertIsString($role);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test that supportsModifier return :.
|
|
*
|
|
* - an array of string, if the query is a QueryBuilder ;
|
|
* - nothing, if the query is a native SQL
|
|
*
|
|
* @dataProvider dataProviderInitiateQuery
|
|
*/
|
|
public function testSupportsModifier(mixed $modifiers, mixed $acl, mixed $data): void
|
|
{
|
|
foreach ($this->getExports() as $export) {
|
|
$query = $export->initiateQuery($modifiers, $acl, $data, new ExportGenerationContext($this->getUser()));
|
|
|
|
if ($query instanceof QueryBuilder) {
|
|
$this->assertContainsOnly(
|
|
'string',
|
|
$export->supportsModifiers(),
|
|
true,
|
|
'Test that the `supportsModifiers` method returns only strings'
|
|
);
|
|
} elseif ($query instanceof NativeQuery) {
|
|
$this->assertTrue(
|
|
null === $export->supportsModifiers()
|
|
|| 0 === \count($export->supportsModifiers()),
|
|
'Test that the `supportsModifier` methods returns null or an empty array'
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* create data for `ìnitiateQuery` method.
|
|
*/
|
|
public static function dataProviderInitiateQuery()
|
|
{
|
|
$acl = static::getAcl();
|
|
|
|
foreach (static::getModifiersCombination() as $modifiers) {
|
|
foreach (static::getFormData() as $data) {
|
|
yield [$modifiers, $acl, $data];
|
|
}
|
|
}
|
|
}
|
|
}
|