diff --git a/lib/SP/Domain/Account/Dtos/AccountHistoryDto.php b/lib/SP/Domain/Account/Dtos/AccountHistoryDto.php index c91b3458..67cc4b0d 100644 --- a/lib/SP/Domain/Account/Dtos/AccountHistoryDto.php +++ b/lib/SP/Domain/Account/Dtos/AccountHistoryDto.php @@ -60,8 +60,8 @@ final class AccountHistoryDto extends AccountDto ?array $userGroupsView = null, ?array $userGroupsEdit = null, public readonly ?int $accountId = null, - public readonly ?int $isDelete = null, - public readonly ?int $isModify = null, + public readonly ?bool $isDeleted = null, + public readonly ?bool $isModify = null, public readonly ?int $passDate = null, public readonly ?string $dateAdd = null, public readonly ?string $dateEdit = null, diff --git a/lib/SP/Domain/Account/Services/AccountHistory.php b/lib/SP/Domain/Account/Services/AccountHistory.php index 65f260c1..7ca8684c 100644 --- a/lib/SP/Domain/Account/Services/AccountHistory.php +++ b/lib/SP/Domain/Account/Services/AccountHistory.php @@ -79,7 +79,6 @@ final class AccountHistory extends Service implements AccountHistoryService * @param int $id * * @return array Con los registros con id como clave y fecha - usuario como valor - * @throws SPException */ public function getHistoryForAccount(int $id): array { diff --git a/lib/SP/Domain/Common/Adapters/DumpMode.php b/lib/SP/Domain/Common/Adapters/DumpMode.php new file mode 100644 index 00000000..eb4186d9 --- /dev/null +++ b/lib/SP/Domain/Common/Adapters/DumpMode.php @@ -0,0 +1,34 @@ +. + */ + +namespace SP\Domain\Common\Adapters; + +/** + * Enum DumpMode + */ +enum DumpMode +{ + case ONLY; + case EXCLUDE; +} diff --git a/lib/SP/Domain/Common/Dtos/Dto.php b/lib/SP/Domain/Common/Dtos/Dto.php index 8755ea75..3aebdb3c 100644 --- a/lib/SP/Domain/Common/Dtos/Dto.php +++ b/lib/SP/Domain/Common/Dtos/Dto.php @@ -30,6 +30,7 @@ use Closure; use ReflectionClass; use ReflectionException; use ReflectionMethod; +use SP\Domain\Common\Adapters\DumpMode; use SP\Domain\Common\Attributes\DtoTransformation; use SP\Domain\Common\Attributes\ModelBounded; use SP\Domain\Common\Models\Model; @@ -97,11 +98,22 @@ abstract class Dto implements DtoInterface } /** + * @param array|null $properties Properties to process + * @param DumpMode $mode The mode to process the properties * @return array */ - final public function toArray(): array + final public function toArray(?array $properties = null, DumpMode $mode = DumpMode::ONLY): array { - return get_object_vars($this); + $instanceProperties = get_object_vars($this); + + if (null !== $properties) { + return match ($mode) { + DumpMode::ONLY => array_intersect_key($instanceProperties, array_flip($properties)), + DumpMode::EXCLUDE => array_diff_key($instanceProperties, array_flip($properties)) + }; + } + + return $instanceProperties; } /** diff --git a/tests/SP/Domain/Account/Services/AccountHistoryTest.php b/tests/SP/Domain/Account/Services/AccountHistoryTest.php index 75600035..7c52cf00 100644 --- a/tests/SP/Domain/Account/Services/AccountHistoryTest.php +++ b/tests/SP/Domain/Account/Services/AccountHistoryTest.php @@ -33,6 +33,7 @@ use SP\Domain\Account\Dtos\EncryptedPassword; use SP\Domain\Account\Models\AccountHistory as AccountHistoryModel; use SP\Domain\Account\Ports\AccountHistoryRepository; use SP\Domain\Account\Services\AccountHistory; +use SP\Domain\Common\Adapters\DumpMode; use SP\Domain\Common\Services\ServiceException; use SP\Domain\Core\Dtos\ItemSearchDto; use SP\Domain\Core\Exceptions\SPException; @@ -138,10 +139,34 @@ class AccountHistoryTest extends UnitaryTestCase $this->accountHistoryRepository->expects(self::once())->method('getById')->with($id)->willReturn($queryResult); + $properties = [ + 'usersView', + 'usersEdit', + 'otherUserGroupsView', + 'otherUserGroupsEdit', + 'tags', + 'userGroupsView', + 'userGroupsEdit', + 'isDeleted', + 'isPrivate', + 'isPrivateGroup', + 'otherUserGroupEdit', + 'otherUserEdit', + 'isModify', + ]; + + $current = $this->accountHistory->getById($id); + $this->assertEquals( - $accountHistoryData->toArray(), - $this->accountHistory->getById($id)->toArray() + $accountHistoryData->toArray(null, $properties), + $current->toArray($properties, DumpMode::EXCLUDE) ); + $this->assertEquals((bool)$accountHistoryData->getIsDeleted(), $current->isDeleted); + $this->assertEquals((bool)$accountHistoryData->getIsPrivate(), $current->isPrivate); + $this->assertEquals((bool)$accountHistoryData->getIsPrivateGroup(), $current->isPrivateGroup); + $this->assertEquals((bool)$accountHistoryData->getOtherUserGroupEdit(), $current->otherUserGroupEdit); + $this->assertEquals((bool)$accountHistoryData->getOtherUserEdit(), $current->otherUserEdit); + $this->assertEquals((bool)$accountHistoryData->getIsModify(), $current->isModify); } /** diff --git a/tests/SP/Generators/AccountDataGenerator.php b/tests/SP/Generators/AccountDataGenerator.php index ae6fd882..8bcf3c04 100644 --- a/tests/SP/Generators/AccountDataGenerator.php +++ b/tests/SP/Generators/AccountDataGenerator.php @@ -235,8 +235,8 @@ final class AccountDataGenerator extends DataGenerator otherUserEdit: $this->faker->boolean(), otherUserGroupEdit: $this->faker->boolean(), accountId: $this->faker->randomNumber(3), - isDelete: (int)$this->faker->boolean(), - isModify: (int)$this->faker->boolean(), + isDeleted: $this->faker->boolean(), + isModify: $this->faker->boolean(), passDate: $this->faker->unixTime(), dateAdd: $this->faker->dateTime()->format('Y-m-d H:i:s'), dateEdit: $this->faker->dateTime()->format('Y-m-d H:i:s'),