buildHelper($object, $entityWorkflow, $user); self::assertEquals($expected, $helper->notBlockedByWorkflow($entityWorkflow), $message); } private function buildHelper(object $relatedEntity, EntityWorkflow $entityWorkflow, User $user): WorkflowStoredObjectPermissionHelper { $security = $this->prophesize(Security::class); $security->getUser()->willReturn($user); $entityWorkflowManager = $this->prophesize(EntityWorkflowManager::class); $entityWorkflowManager->findByRelatedEntity(Argument::type('object'))->willReturn([$entityWorkflow]); return new WorkflowStoredObjectPermissionHelper($security->reveal(), $entityWorkflowManager->reveal()); } public static function provideDataNotBlockByWorkflow(): iterable { $entityWorkflow = new EntityWorkflow(); $dto = new WorkflowTransitionContextDTO($entityWorkflow); $entityWorkflow->setStep('test', $dto, 'to_test', new \DateTimeImmutable()); yield [$entityWorkflow, new User(), false, 'blocked because the user is not present as a dest user']; $entityWorkflow = new EntityWorkflow(); $dto = new WorkflowTransitionContextDTO($entityWorkflow); $dto->futureDestUsers[] = $user = new User(); $entityWorkflow->setStep('test', $dto, 'to_test', new \DateTimeImmutable(), $user); yield [$entityWorkflow, $user, true, 'allowed because the user is present as a dest user']; $entityWorkflow = new EntityWorkflow(); $dto = new WorkflowTransitionContextDTO($entityWorkflow); $dto->futureDestUsers[] = $user = new User(); $entityWorkflow->setStep('test', $dto, 'to_test', new \DateTimeImmutable(), $user); $entityWorkflow->getCurrentStep()->setIsFinal(true); yield [$entityWorkflow, $user, false, 'blocked because the step is final']; $entityWorkflow = new EntityWorkflow(); $dto = new WorkflowTransitionContextDTO($entityWorkflow); $dto->futureDestUsers[] = $user = new User(); $entityWorkflow->setStep('test', $dto, 'to_test', new \DateTimeImmutable(), $user); $step = $entityWorkflow->getCurrentStep(); new EntityWorkflowStepSignature($step, new Person()); yield [$entityWorkflow, $user, true, 'allow, a signature is present but still pending']; $entityWorkflow = new EntityWorkflow(); $dto = new WorkflowTransitionContextDTO($entityWorkflow); $dto->futureDestUsers[] = $user = new User(); $entityWorkflow->setStep('test', $dto, 'to_test', new \DateTimeImmutable(), $user); $step = $entityWorkflow->getCurrentStep(); $signature = new EntityWorkflowStepSignature($step, new Person()); $signature->setState(EntityWorkflowSignatureStateEnum::SIGNED); yield [$entityWorkflow, $user, false, 'blocked, a signature is present and signed']; } }