mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-08-21 15:13:50 +00:00
Feature: [docgen] generate documents in an async queue
The documents are now generated in a queue, using symfony messenger. This queue should be configured: ```yaml # app/config/messenger.yaml framework: messenger: # reset services after consuming messages # reset_on_message: true failure_transport: failed transports: # https://symfony.com/doc/current/messenger.html#transport-configuration async: '%env(MESSENGER_TRANSPORT_DSN)%' priority: dsn: '%env(MESSENGER_TRANSPORT_DSN)%' failed: 'doctrine://default?queue_name=failed' routing: # ... other messages 'Chill\DocGeneratorBundle\Service\Messenger\RequestGenerationMessage': priority ``` `StoredObject`s now have additionnal properties: * status (pending, failure, ready (by default) ), which explain if the document is generated; * a generationTrialCounter, which is incremented on each generation trial, which prevent each generation more than 5 times; The generator computation is moved from the `DocGenTemplateController` to a `Generator` (implementing `GeneratorInterface`. There are new methods to `Context` which allow to normalize/denormalize context data to/from a messenger's `Message`.
This commit is contained in:
@@ -26,13 +26,14 @@ class GeneratorTest extends TestCase
|
||||
$template = (new DocGeneratorTemplate())->setFile($templateStoredObject = (new StoredObject())
|
||||
->setType('application/test'));
|
||||
$destinationStoredObject = (new StoredObject())->setStatus(StoredObject::STATUS_PENDING);
|
||||
$reflection = new \ReflectionClass($destinationStoredObject);
|
||||
$reflection->getProperty('id')->setAccessible(true);
|
||||
$reflection->getProperty('id')->setValue($destinationStoredObject, 1);
|
||||
$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();
|
||||
@@ -46,8 +47,11 @@ class GeneratorTest extends TestCase
|
||||
->willReturn('generated');
|
||||
|
||||
$entityManager = $this->prophesize(EntityManagerInterface::class);
|
||||
$entityManager->find(Argument::type('string'), Argument::type('int'))
|
||||
$entityManager->find(StoredObject::class, 1)
|
||||
->willReturn($destinationStoredObject);
|
||||
$entityManager->find('DummyClass', Argument::type('int'))
|
||||
->willReturn($entity);
|
||||
$entityManager->clear()->shouldBeCalled();
|
||||
$entityManager->flush()->shouldBeCalled();
|
||||
|
||||
$storedObjectManager = $this->prophesize(StoredObjectManagerInterface::class);
|
||||
@@ -65,8 +69,8 @@ class GeneratorTest extends TestCase
|
||||
|
||||
$generator->generateDocFromTemplate(
|
||||
$template,
|
||||
'DummyEntity',
|
||||
1,
|
||||
[],
|
||||
$destinationStoredObject
|
||||
);
|
||||
}
|
||||
@@ -89,8 +93,8 @@ class GeneratorTest extends TestCase
|
||||
|
||||
$generator->generateDocFromTemplate(
|
||||
$template,
|
||||
'DummyEntity',
|
||||
1,
|
||||
[],
|
||||
$destinationStoredObject
|
||||
);
|
||||
}
|
||||
@@ -102,6 +106,9 @@ class GeneratorTest extends TestCase
|
||||
$template = (new DocGeneratorTemplate())->setFile($templateStoredObject = (new StoredObject())
|
||||
->setType('application/test'));
|
||||
$destinationStoredObject = (new StoredObject())->setStatus(StoredObject::STATUS_PENDING);
|
||||
$reflection = new \ReflectionClass($destinationStoredObject);
|
||||
$reflection->getProperty('id')->setAccessible(true);
|
||||
$reflection->getProperty('id')->setValue($destinationStoredObject, 1);
|
||||
|
||||
$context = $this->prophesize(DocGeneratorContextInterface::class);
|
||||
$context->getName()->willReturn('dummy_context');
|
||||
@@ -126,8 +133,8 @@ class GeneratorTest extends TestCase
|
||||
|
||||
$generator->generateDocFromTemplate(
|
||||
$template,
|
||||
'DummyEntity',
|
||||
1,
|
||||
[],
|
||||
$destinationStoredObject
|
||||
);
|
||||
}
|
||||
|
Reference in New Issue
Block a user