Ensure workflow was trashed before deleting it
[MAILPOET-4540]
This commit is contained in:
@ -21,6 +21,11 @@ class DeleteWorkflowController {
|
||||
if (!$workflow) {
|
||||
throw Exceptions::workflowNotFound($id);
|
||||
}
|
||||
|
||||
if ($workflow->getStatus() !== Workflow::STATUS_TRASH) {
|
||||
throw Exceptions::workflowNotTrashed($id);
|
||||
}
|
||||
|
||||
$this->workflowStorage->deleteWorkflow($workflow);
|
||||
return $workflow;
|
||||
}
|
||||
|
@ -29,6 +29,7 @@ class Exceptions {
|
||||
private const WORKFLOW_STEP_MODIFIED_WHEN_UNKNOWN = 'mailpoet_automation_workflow_step_modified_when_unknown';
|
||||
private const WORKFLOW_NOT_VALID = 'mailpoet_automation_workflow_not_valid';
|
||||
private const MISSING_REQUIRED_SUBJECTS = 'mailpoet_automation_missing_required_subjects';
|
||||
private const WORKFLOW_NOT_TRASHED = 'mailpoet_automation_workflow_not_trashed';
|
||||
|
||||
public function __construct() {
|
||||
throw new InvalidStateException(
|
||||
@ -204,4 +205,11 @@ class Exceptions {
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public static function workflowNotTrashed(int $id): UnexpectedValueException {
|
||||
return UnexpectedValueException::create()
|
||||
->withErrorCode(self::WORKFLOW_NOT_TRASHED)
|
||||
// translators: %d is the ID of the workflow.
|
||||
->withMessage(sprintf(__("Can't delete workflow with ID '%d' because it was not trashed.", 'mailpoet'), $id));
|
||||
}
|
||||
}
|
||||
|
@ -48,7 +48,24 @@ class WorkflowsDeleteEndpointTest extends AutomationTest {
|
||||
$this->assertSame('Testing workflow', $workflow->getName());
|
||||
}
|
||||
|
||||
public function testCantDeleteWorkflowWhenNotTrashed(): void {
|
||||
$data = $this->delete(sprintf(self::ENDPOINT_PATH, $this->workflow->getId()));
|
||||
|
||||
$this->assertSame([
|
||||
'code' => 'mailpoet_automation_workflow_not_trashed',
|
||||
'message' => "Can't delete workflow with ID '{$this->workflow->getId()}' because it was not trashed.",
|
||||
'data' => ['status' => 400, 'errors' => []],
|
||||
], $data);
|
||||
|
||||
$workflow = $this->workflowStorage->getWorkflow($this->workflow->getId());
|
||||
$this->assertInstanceOf(Workflow::class, $workflow);
|
||||
$this->assertSame('Testing workflow', $workflow->getName());
|
||||
}
|
||||
|
||||
public function testItDeletesAWorkflow(): void {
|
||||
$this->workflow->setStatus(Workflow::STATUS_TRASH);
|
||||
$this->workflowStorage->updateWorkflow($this->workflow);
|
||||
|
||||
$data = $this->delete(sprintf(self::ENDPOINT_PATH, $this->workflow->getId()));
|
||||
$this->assertSame(['data' => null], $data);
|
||||
|
||||
|
Reference in New Issue
Block a user