From 600f64f6b6f25e9a45cb5c5bee55f40988a3249b Mon Sep 17 00:00:00 2001 From: Sander Verkuil Date: Tue, 19 Apr 2022 22:05:09 +0200 Subject: [PATCH] Write test for column of type `blob`. (#99) * Wrote a test for #98 * Fixed phpcs issues * Handle the BLOB in the same way as BINARY --- .../Auditing/Transaction/AuditTrait.php | 1 + .../Doctrine/Fixtures/Issue98/Issue98.php | 73 +++++++++++++++++++ .../Provider/Doctrine/Issues/Issue98Test.php | 62 ++++++++++++++++ 3 files changed, 136 insertions(+) create mode 100644 tests/Provider/Doctrine/Fixtures/Issue98/Issue98.php create mode 100644 tests/Provider/Doctrine/Issues/Issue98Test.php diff --git a/src/Provider/Doctrine/Auditing/Transaction/AuditTrait.php b/src/Provider/Doctrine/Auditing/Transaction/AuditTrait.php index 75ae7546..2fc198c1 100644 --- a/src/Provider/Doctrine/Auditing/Transaction/AuditTrait.php +++ b/src/Provider/Doctrine/Auditing/Transaction/AuditTrait.php @@ -106,6 +106,7 @@ private function value(EntityManagerInterface $entityManager, Type $type, $value break; + case DoctrineHelper::getDoctrineType('BLOB'): case DoctrineHelper::getDoctrineType('BINARY'): if (\is_resource($value)) { // let's replace resources with a "simple" representation: resourceType#resourceId diff --git a/tests/Provider/Doctrine/Fixtures/Issue98/Issue98.php b/tests/Provider/Doctrine/Fixtures/Issue98/Issue98.php new file mode 100644 index 00000000..a7d90033 --- /dev/null +++ b/tests/Provider/Doctrine/Fixtures/Issue98/Issue98.php @@ -0,0 +1,73 @@ + true])] + protected $id; + + /** + * @ORM\Column(type="blob") + */ + #[ORM\Column(type: 'blob')] + protected $data; + + /** + * Get the value of id. + * + * @return mixed + */ + public function getId(): int + { + return $this->id; + } + + /** + * Set the value of id. + * + * @return DataObject + */ + public function setId(int $id): self + { + $this->id = $id; + + return $this; + } + + /** + * Get the value of data. + */ + public function getData() + { + return $this->data; + } + + /** + * Set the value of data. + * + * @param mixed $data + * + * @return DataObject + */ + public function setData($data): self + { + $this->data = $data; + + return $this; + } +} diff --git a/tests/Provider/Doctrine/Issues/Issue98Test.php b/tests/Provider/Doctrine/Issues/Issue98Test.php new file mode 100644 index 00000000..1949e317 --- /dev/null +++ b/tests/Provider/Doctrine/Issues/Issue98Test.php @@ -0,0 +1,62 @@ +createReader(); + + $em = $this->provider->getStorageServiceForEntity(Issue98::class)->getEntityManager(); + $entity = new Issue98(); + $entity->setData(fopen('data://text/plain,true', 'r')); + $em->persist($entity); + $em->flush(); + + $audits = $reader->createQuery(Issue98::class)->execute(); + self::assertCount(1, $audits, 'results count ok.'); + self::assertSame(Transaction::INSERT, $audits[0]->getType(), 'Reader::INSERT operation.'); + } + + private function createAndInitDoctrineProvider(): void + { + $auditor = $this->createAuditor(); + $this->provider = new DoctrineProvider($this->createProviderConfiguration()); + + $entityManager = $this->createEntityManager([ + __DIR__.'/../../../../src/Provider/Doctrine/Auditing/Annotation', + __DIR__.'/../Fixtures/Issue98', + ]); + $this->provider->registerStorageService(new StorageService('default', $entityManager)); + $this->provider->registerAuditingService(new AuditingService('default', $entityManager)); + + $auditor->registerProvider($this->provider); + } + + private function configureEntities(): void + { + $this->provider->getConfiguration()->setEntities([ + Issue98::class => ['enabled' => true], + ]); + } +}