mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-08-21 15:13:50 +00:00
Feature: [docgen] create a service to generate a document from a template
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
|
||||
namespace Chill\DocGeneratorBundle\tests\Service\Context\Generator;
|
||||
|
||||
use Chill\DocGeneratorBundle\Context\ContextManagerInterface;
|
||||
use Chill\DocGeneratorBundle\Context\DocGeneratorContextInterface;
|
||||
use Chill\DocGeneratorBundle\Entity\DocGeneratorTemplate;
|
||||
use Chill\DocGeneratorBundle\GeneratorDriver\DriverInterface;
|
||||
use Chill\DocGeneratorBundle\Service\Generator\Generator;
|
||||
use Chill\DocGeneratorBundle\Service\Generator\ObjectReadyException;
|
||||
use Chill\DocGeneratorBundle\Service\Generator\RelatedEntityNotFoundException;
|
||||
use Chill\DocStoreBundle\Entity\StoredObject;
|
||||
use Chill\DocStoreBundle\Service\StoredObjectManagerInterface;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Prophecy\Argument;
|
||||
use Prophecy\PhpUnit\ProphecyTrait;
|
||||
use Psr\Log\NullLogger;
|
||||
|
||||
class GeneratorTest extends TestCase
|
||||
{
|
||||
use ProphecyTrait;
|
||||
|
||||
public function testSuccessfulGeneration(): void
|
||||
{
|
||||
$template = (new DocGeneratorTemplate())->setFile($templateStoredObject = (new StoredObject())
|
||||
->setType('application/test'));
|
||||
$destinationStoredObject = (new StoredObject())->setStatus(StoredObject::STATUS_PENDING);
|
||||
$entity = new class {};
|
||||
$data = [];
|
||||
|
||||
$context = $this->prophesize(DocGeneratorContextInterface::class);
|
||||
$context->getData($template, $entity, Argument::type('array'))->willReturn($data);
|
||||
$context->storeGenerated($template, $destinationStoredObject, $entity, Argument::type('array'))
|
||||
->shouldBeCalled();
|
||||
$context->getName()->willReturn('dummy_context');
|
||||
$context->getEntityClass()->willReturn('DummyClass');
|
||||
$context = $context->reveal();
|
||||
|
||||
$contextManagerInterface = $this->prophesize(ContextManagerInterface::class);
|
||||
$contextManagerInterface->getContextByDocGeneratorTemplate($template)
|
||||
->willReturn($context);
|
||||
|
||||
$driver = $this->prophesize(DriverInterface::class);
|
||||
$driver->generateFromString('template', 'application/test', $data, Argument::any())
|
||||
->willReturn('generated');
|
||||
|
||||
$entityManager = $this->prophesize(EntityManagerInterface::class);
|
||||
$entityManager->find(Argument::type('string'), Argument::type('int'))
|
||||
->willReturn($entity);
|
||||
$entityManager->flush()->shouldBeCalled();
|
||||
|
||||
$storedObjectManager = $this->prophesize(StoredObjectManagerInterface::class);
|
||||
$storedObjectManager->read($templateStoredObject)->willReturn('template');
|
||||
$storedObjectManager->write($destinationStoredObject, 'generated')->shouldBeCalled();
|
||||
|
||||
|
||||
$generator = new Generator(
|
||||
$contextManagerInterface->reveal(),
|
||||
$driver->reveal(),
|
||||
$entityManager->reveal(),
|
||||
new NullLogger(),
|
||||
$storedObjectManager->reveal()
|
||||
);
|
||||
|
||||
$generator->generateDocFromTemplate(
|
||||
$template,
|
||||
'DummyEntity',
|
||||
1,
|
||||
$destinationStoredObject
|
||||
);
|
||||
}
|
||||
|
||||
public function testPreventRegenerateDocument(): void
|
||||
{
|
||||
$this->expectException(ObjectReadyException::class);
|
||||
|
||||
$generator = new Generator(
|
||||
$this->prophesize(ContextManagerInterface::class)->reveal(),
|
||||
$this->prophesize(DriverInterface::class)->reveal(),
|
||||
$this->prophesize(EntityManagerInterface::class)->reveal(),
|
||||
new NullLogger(),
|
||||
$this->prophesize(StoredObjectManagerInterface::class)->reveal()
|
||||
);
|
||||
|
||||
$template = (new DocGeneratorTemplate())->setFile($templateStoredObject = (new StoredObject())
|
||||
->setType('application/test'));
|
||||
$destinationStoredObject = (new StoredObject())->setStatus(StoredObject::STATUS_READY);
|
||||
|
||||
$generator->generateDocFromTemplate(
|
||||
$template,
|
||||
'DummyEntity',
|
||||
1,
|
||||
$destinationStoredObject
|
||||
);
|
||||
}
|
||||
|
||||
public function testRelatedEntityNotFound(): void
|
||||
{
|
||||
$this->expectException(RelatedEntityNotFoundException::class);
|
||||
|
||||
$template = (new DocGeneratorTemplate())->setFile($templateStoredObject = (new StoredObject())
|
||||
->setType('application/test'));
|
||||
$destinationStoredObject = (new StoredObject())->setStatus(StoredObject::STATUS_PENDING);
|
||||
|
||||
$context = $this->prophesize(DocGeneratorContextInterface::class);
|
||||
$context->getName()->willReturn('dummy_context');
|
||||
$context->getEntityClass()->willReturn('DummyClass');
|
||||
$context = $context->reveal();
|
||||
|
||||
$contextManagerInterface = $this->prophesize(ContextManagerInterface::class);
|
||||
$contextManagerInterface->getContextByDocGeneratorTemplate($template)
|
||||
->willReturn($context);
|
||||
|
||||
$entityManager = $this->prophesize(EntityManagerInterface::class);
|
||||
$entityManager->find(Argument::type('string'), Argument::type('int'))
|
||||
->willReturn(null);
|
||||
|
||||
$generator = new Generator(
|
||||
$contextManagerInterface->reveal(),
|
||||
$this->prophesize(DriverInterface::class)->reveal(),
|
||||
$entityManager->reveal(),
|
||||
new NullLogger(),
|
||||
$this->prophesize(StoredObjectManagerInterface::class)->reveal()
|
||||
);
|
||||
|
||||
$generator->generateDocFromTemplate(
|
||||
$template,
|
||||
'DummyEntity',
|
||||
1,
|
||||
$destinationStoredObject
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user