setMetadataStore( new InMemoryMetadataStore( placesMetadata: [ 'final' => ['isFinal' => true], 'cancel' => ['isFinal' => true, 'isFinalPositive' => false], ] ) ); $registry = new Registry(); $workflow = new Workflow($builder->build(), new EntityWorkflowMarkingStore(), $eventDispatcher = new EventDispatcher(), 'dummy'); $manager = $this->createMock(EntityWorkflowManager::class); $manager->method('getAssociatedStoredObject')->willReturn($storedObject); $eventSubscriber = new OnCancelRestoreDocumentToEditableEventSubscriber( $registry, $manager, $storedObjectRestore ); $eventDispatcher->addSubscriber($eventSubscriber); $registry->addWorkflow($workflow, new class () implements WorkflowSupportStrategyInterface { public function supports(WorkflowInterface $workflow, object $subject): bool { return true; } }); return $registry; } public function testOnCancelRestoreDocumentToEditableExpectsRestoring(): void { $storedObject = new StoredObject(); $version = $storedObject->registerVersion(); new StoredObjectPointInTime($version, StoredObjectPointInTimeReasonEnum::KEEP_BEFORE_CONVERSION); $storedObject->registerVersion(); $restore = $this->createMock(StoredObjectRestoreInterface::class); $restore->expects($this->once())->method('restore')->with($version); $registry = $this->buildRegistry($restore, $storedObject); $entityWorkflow = (new EntityWorkflow())->setWorkflowName('dummy'); $workflow = $registry->get($entityWorkflow, $entityWorkflow->getWorkflowName()); $context = new WorkflowTransitionContextDTO($entityWorkflow); $workflow->apply($entityWorkflow, 'to_cancel', [ 'context' => $context, 'transition' => 'to_cancel', 'transitionAt' => new \DateTimeImmutable('now'), ]); } public function testOnCancelRestoreDocumentDoNotExpectRestoring(): void { $storedObject = new StoredObject(); $version = $storedObject->registerVersion(); new StoredObjectPointInTime($version, StoredObjectPointInTimeReasonEnum::KEEP_BEFORE_CONVERSION); $storedObject->registerVersion(); $restore = $this->createMock(StoredObjectRestoreInterface::class); $restore->expects($this->never())->method('restore')->withAnyParameters(); $registry = $this->buildRegistry($restore, $storedObject); $entityWorkflow = (new EntityWorkflow())->setWorkflowName('dummy'); $workflow = $registry->get($entityWorkflow, $entityWorkflow->getWorkflowName()); $context = new WorkflowTransitionContextDTO($entityWorkflow); $workflow->apply($entityWorkflow, 'to_intermediate', [ 'context' => $context, 'transition' => 'to_intermediate', 'transitionAt' => new \DateTimeImmutable('now'), ]); $workflow->apply($entityWorkflow, 'intermediate_to_final', [ 'context' => $context, 'transition' => 'intermediate_to_final', 'transitionAt' => new \DateTimeImmutable('now'), ]); } public function testOnCancelRestoreDocumentToEditableToCancelStoredObjectWithoutKepts(): void { $storedObject = new StoredObject(); $storedObject->registerVersion(); $restore = $this->createMock(StoredObjectRestoreInterface::class); $restore->expects($this->never())->method('restore')->withAnyParameters(); $registry = $this->buildRegistry($restore, $storedObject); $entityWorkflow = (new EntityWorkflow())->setWorkflowName('dummy'); $workflow = $registry->get($entityWorkflow, $entityWorkflow->getWorkflowName()); $context = new WorkflowTransitionContextDTO($entityWorkflow); $workflow->apply($entityWorkflow, 'to_cancel', [ 'context' => $context, 'transition' => 'to_cancel', 'transitionAt' => new \DateTimeImmutable('now'), ]); } }