mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-09-24 15:44:59 +00:00
Add attachments to workflow
This commit is contained in:
@@ -11,10 +11,13 @@ declare(strict_types=1);
|
||||
|
||||
namespace Chill\DocStoreBundle\Tests\GenericDoc;
|
||||
|
||||
use Chill\DocStoreBundle\Entity\StoredObject;
|
||||
use Chill\DocStoreBundle\GenericDoc\Exception\NotNormalizableGenericDocException;
|
||||
use Chill\DocStoreBundle\GenericDoc\FetchQuery;
|
||||
use Chill\DocStoreBundle\GenericDoc\FetchQueryInterface;
|
||||
use Chill\DocStoreBundle\GenericDoc\GenericDocDTO;
|
||||
use Chill\DocStoreBundle\GenericDoc\GenericDocForPersonProviderInterface;
|
||||
use Chill\DocStoreBundle\GenericDoc\GenericDocNormalizerInterface;
|
||||
use Chill\DocStoreBundle\GenericDoc\Manager;
|
||||
use Chill\DocStoreBundle\GenericDoc\GenericDocForAccompanyingPeriodProviderInterface;
|
||||
use Chill\PersonBundle\Entity\AccompanyingPeriod;
|
||||
@@ -58,6 +61,7 @@ class ManagerTest extends KernelTestCase
|
||||
$manager = new Manager(
|
||||
[new SimpleGenericDocAccompanyingPeriodProvider()],
|
||||
[new SimpleGenericDocPersonProvider()],
|
||||
[],
|
||||
$this->connection,
|
||||
);
|
||||
|
||||
@@ -79,6 +83,7 @@ class ManagerTest extends KernelTestCase
|
||||
$manager = new Manager(
|
||||
[new SimpleGenericDocAccompanyingPeriodProvider()],
|
||||
[new SimpleGenericDocPersonProvider()],
|
||||
[],
|
||||
$this->connection,
|
||||
);
|
||||
|
||||
@@ -100,6 +105,7 @@ class ManagerTest extends KernelTestCase
|
||||
$manager = new Manager(
|
||||
[new SimpleGenericDocAccompanyingPeriodProvider()],
|
||||
[new SimpleGenericDocPersonProvider()],
|
||||
[],
|
||||
$this->connection,
|
||||
);
|
||||
|
||||
@@ -121,6 +127,7 @@ class ManagerTest extends KernelTestCase
|
||||
$manager = new Manager(
|
||||
[new SimpleGenericDocAccompanyingPeriodProvider()],
|
||||
[new SimpleGenericDocPersonProvider()],
|
||||
[],
|
||||
$this->connection,
|
||||
);
|
||||
|
||||
@@ -142,6 +149,7 @@ class ManagerTest extends KernelTestCase
|
||||
$manager = new Manager(
|
||||
[new SimpleGenericDocAccompanyingPeriodProvider()],
|
||||
[new SimpleGenericDocPersonProvider()],
|
||||
[],
|
||||
$this->connection,
|
||||
);
|
||||
|
||||
@@ -163,6 +171,7 @@ class ManagerTest extends KernelTestCase
|
||||
$manager = new Manager(
|
||||
[new SimpleGenericDocAccompanyingPeriodProvider()],
|
||||
[new SimpleGenericDocPersonProvider()],
|
||||
[],
|
||||
$this->connection,
|
||||
);
|
||||
|
||||
@@ -170,10 +179,77 @@ class ManagerTest extends KernelTestCase
|
||||
|
||||
self::assertEquals(['accompanying_course_document_dummy'], $places);
|
||||
}
|
||||
|
||||
public function testIsGenericDocNormalizable(): void
|
||||
{
|
||||
$genericDoc = new GenericDocDTO('test', ['id' => 1], new \DateTimeImmutable(), new AccompanyingPeriod());
|
||||
|
||||
$manager = new Manager([], [], [$this->buildNormalizer(true)], $this->connection);
|
||||
self::assertTrue($manager->isGenericDocNormalizable($genericDoc, 'json'));
|
||||
|
||||
$manager = new Manager([], [], [$this->buildNormalizer(false)], $this->connection);
|
||||
self::assertFalse($manager->isGenericDocNormalizable($genericDoc, 'json'));
|
||||
}
|
||||
|
||||
public function testNormalizeGenericDocMetadata(): void
|
||||
{
|
||||
$genericDoc = new GenericDocDTO('test', ['id' => 1], new \DateTimeImmutable(), new AccompanyingPeriod());
|
||||
|
||||
$manager = new Manager([], [], [$this->buildNormalizer(false), $this->buildNormalizer(true)], $this->connection);
|
||||
self::assertEquals(['title' => 'Some title'], $manager->normalizeGenericDoc($genericDoc, 'json'));
|
||||
}
|
||||
|
||||
public function testNormalizeGenericDocMetadataNoNormalizer(): void
|
||||
{
|
||||
$genericDoc = new GenericDocDTO('test', ['id' => 1], new \DateTimeImmutable(), new AccompanyingPeriod());
|
||||
|
||||
$manager = new Manager([], [], [$this->buildNormalizer(false)], $this->connection);
|
||||
|
||||
$this->expectException(NotNormalizableGenericDocException::class);
|
||||
|
||||
self::assertEquals(['title' => 'Some title'], $manager->normalizeGenericDoc($genericDoc, 'json'));
|
||||
}
|
||||
|
||||
public function buildNormalizer(bool $supports): GenericDocNormalizerInterface
|
||||
{
|
||||
return new class ($supports) implements GenericDocNormalizerInterface {
|
||||
public function __construct(private readonly bool $supports) {}
|
||||
|
||||
public function supportsNormalization(GenericDocDTO $genericDocDTO, string $format, array $context = []): bool
|
||||
{
|
||||
return $this->supports;
|
||||
}
|
||||
|
||||
public function normalize(GenericDocDTO $genericDocDTO, string $format, array $context = []): array
|
||||
{
|
||||
return ['title' => 'Some title'];
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
final readonly class SimpleGenericDocAccompanyingPeriodProvider implements GenericDocForAccompanyingPeriodProviderInterface
|
||||
{
|
||||
public function fetchAssociatedStoredObject(GenericDocDTO $genericDocDTO): ?StoredObject
|
||||
{
|
||||
throw new \BadMethodCallException('not implemented');
|
||||
}
|
||||
|
||||
public function supportsGenericDoc(GenericDocDTO $genericDocDTO): bool
|
||||
{
|
||||
throw new \BadMethodCallException('not implemented');
|
||||
}
|
||||
|
||||
public function supportsKeyAndIdentifiers(string $key, array $identifiers): bool
|
||||
{
|
||||
return 'accompanying_course_document_dummy' === $key;
|
||||
}
|
||||
|
||||
public function buildOneGenericDoc(string $key, array $identifiers): ?GenericDocDTO
|
||||
{
|
||||
return new GenericDocDTO('accompanying_course_document_dummy', $identifiers, new \DateTimeImmutable(), new AccompanyingPeriod());
|
||||
}
|
||||
|
||||
public function buildFetchQueryForAccompanyingPeriod(AccompanyingPeriod $accompanyingPeriod, ?\DateTimeImmutable $startDate = null, ?\DateTimeImmutable $endDate = null, ?string $content = null, ?string $origin = null): FetchQueryInterface
|
||||
{
|
||||
$query = new FetchQuery(
|
||||
|
@@ -13,6 +13,7 @@ namespace Chill\DocStoreBundle\Tests\GenericDoc\Providers;
|
||||
|
||||
use Chill\DocStoreBundle\GenericDoc\FetchQueryToSqlBuilder;
|
||||
use Chill\DocStoreBundle\GenericDoc\Providers\AccompanyingCourseDocumentGenericDocProvider;
|
||||
use Chill\DocStoreBundle\Repository\AccompanyingCourseDocumentRepository;
|
||||
use Chill\DocStoreBundle\Security\Authorization\AccompanyingCourseDocumentVoter;
|
||||
use Chill\PersonBundle\Entity\AccompanyingPeriod;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
@@ -56,7 +57,8 @@ class AccompanyingCourseDocumentGenericDocProviderTest extends KernelTestCase
|
||||
|
||||
$provider = new AccompanyingCourseDocumentGenericDocProvider(
|
||||
$security->reveal(),
|
||||
$this->entityManager
|
||||
$this->entityManager,
|
||||
$this->prophesize(AccompanyingCourseDocumentRepository::class)->reveal()
|
||||
);
|
||||
|
||||
$query = $provider->buildFetchQueryForAccompanyingPeriod($period, $startDate, $endDate, $content);
|
||||
|
@@ -14,6 +14,7 @@ namespace Chill\DocStoreBundle\Tests\GenericDoc\Providers;
|
||||
use Chill\DocStoreBundle\GenericDoc\FetchQueryToSqlBuilder;
|
||||
use Chill\DocStoreBundle\GenericDoc\Providers\PersonDocumentGenericDocProvider;
|
||||
use Chill\DocStoreBundle\Repository\PersonDocumentACLAwareRepositoryInterface;
|
||||
use Chill\DocStoreBundle\Repository\PersonDocumentRepository;
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Prophecy\PhpUnit\ProphecyTrait;
|
||||
@@ -33,11 +34,14 @@ class PersonDocumentGenericDocProviderTest extends KernelTestCase
|
||||
|
||||
private PersonDocumentACLAwareRepositoryInterface $personDocumentACLAwareRepository;
|
||||
|
||||
private PersonDocumentRepository $personDocumentRepository;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
self::bootKernel();
|
||||
$this->entityManager = self::getContainer()->get(EntityManagerInterface::class);
|
||||
$this->personDocumentACLAwareRepository = self::getContainer()->get(PersonDocumentACLAwareRepositoryInterface::class);
|
||||
$this->personDocumentRepository = self::getContainer()->get(PersonDocumentRepository::class);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -60,7 +64,8 @@ class PersonDocumentGenericDocProviderTest extends KernelTestCase
|
||||
|
||||
$provider = new PersonDocumentGenericDocProvider(
|
||||
$security->reveal(),
|
||||
$this->personDocumentACLAwareRepository
|
||||
$this->personDocumentACLAwareRepository,
|
||||
$this->personDocumentRepository,
|
||||
);
|
||||
|
||||
$query = $provider->buildFetchQueryForPerson($person, $startDate, $endDate, $content);
|
||||
|
@@ -16,6 +16,7 @@ use Chill\DocStoreBundle\Security\Authorization\StoredObjectRoleEnum;
|
||||
use Chill\DocStoreBundle\Security\Authorization\StoredObjectVoter;
|
||||
use Chill\DocStoreBundle\Security\Authorization\StoredObjectVoterInterface;
|
||||
use Chill\MainBundle\Entity\User;
|
||||
use Chill\MainBundle\Repository\Workflow\EntityWorkflowAttachmentRepository;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Psr\Log\NullLogger;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
||||
@@ -44,7 +45,7 @@ class StoredObjectVoterTest extends TestCase
|
||||
->with($this->logicalOr($this->identicalTo('ROLE_USER'), $this->identicalTo('ROLE_ADMIN')))
|
||||
->willReturn($securityIsGrantedResult);
|
||||
|
||||
$voter = new StoredObjectVoter($security, $storedObjectVoters, new NullLogger());
|
||||
$voter = new StoredObjectVoter($security, $storedObjectVoters, new NullLogger(), $this->createMock(EntityWorkflowAttachmentRepository::class));
|
||||
|
||||
self::assertEquals($expected, $voter->vote($token, $subject, [$attribute]));
|
||||
}
|
||||
|
@@ -0,0 +1,75 @@
|
||||
<?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\DocGeneratorBundle\Tests\Serializer\Normalizer;
|
||||
|
||||
use Chill\DocStoreBundle\GenericDoc\GenericDocDTO;
|
||||
use Chill\DocStoreBundle\GenericDoc\ManagerInterface;
|
||||
use Chill\DocStoreBundle\Serializer\Normalizer\GenericDocNormalizer;
|
||||
use Chill\PersonBundle\Entity\AccompanyingPeriod;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*
|
||||
* @coversNothing
|
||||
*/
|
||||
class GenericDocNormalizerTest extends TestCase
|
||||
{
|
||||
private $normalizer;
|
||||
|
||||
private ManagerInterface $manager;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->manager = $this->createMock(ManagerInterface::class);
|
||||
|
||||
$this->normalizer = new GenericDocNormalizer($this->manager);
|
||||
|
||||
$innerNormalizer = $this->createMock(NormalizerInterface::class);
|
||||
$innerNormalizer->method('normalize')
|
||||
->willReturnCallback(fn ($date) => $date instanceof \DateTimeImmutable ? $date->format(DATE_ATOM) : null);
|
||||
|
||||
$this->normalizer->setNormalizer($innerNormalizer);
|
||||
}
|
||||
|
||||
public function testNormalize()
|
||||
{
|
||||
$docDate = new \DateTimeImmutable('2023-10-01T15:03:01.012345Z');
|
||||
|
||||
$object = new GenericDocDTO(
|
||||
'some_key',
|
||||
['id' => 'id1', 'other_id' => 'id2'],
|
||||
$docDate,
|
||||
new AccompanyingPeriod(),
|
||||
);
|
||||
|
||||
$expected = [
|
||||
'type' => 'doc_store_generic_doc',
|
||||
'key' => 'some_key',
|
||||
'identifiers' => ['id' => 'id1', 'other_id' => 'id2'],
|
||||
'context' => 'accompanying-period',
|
||||
'doc_date' => $docDate->format(DATE_ATOM),
|
||||
'uniqueKey' => 'some_keyidother_idid1id2',
|
||||
'metadata' => [],
|
||||
'storedObject' => null,
|
||||
];
|
||||
|
||||
$this->manager->expects($this->once())->method('isGenericDocNormalizable')
|
||||
->with($object, 'json', [])
|
||||
->willReturn(true);
|
||||
|
||||
$actual = $this->normalizer->normalize($object, 'json', []);
|
||||
|
||||
$this->assertEquals($expected, $actual);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user