Repository navigation
Expand file tree
/
Copy pathRollbackProcessRequestTest.php
More file actions
114 lines (97 loc) · 4.14 KB
/
Copy pathRollbackProcessRequestTest.php
File metadata and controls
114 lines (97 loc) · 4.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php
namespace Tests;
use Facades\ProcessMaker\RollbackProcessRequest;
use Illuminate\Support\Facades\Auth;
use Mockery;
use ProcessMaker\Facades\WorkflowManager;
use ProcessMaker\Models\Comment;
use ProcessMaker\Models\Process;
use ProcessMaker\Models\ProcessRequest;
use ProcessMaker\Models\ProcessRequestToken;
use ProcessMaker\Models\ProcessTaskAssignment;
use ProcessMaker\Models\Script;
use ProcessMaker\Models\User;
use ProcessMaker\Nayra\Contracts\Bpmn\ScriptTaskInterface;
use ProcessMaker\Nayra\Contracts\Bpmn\ServiceTaskInterface;
use ProcessMaker\Repositories\BpmnDocument;
class RollbackProcessRequestTest extends TestCase
{
public $processRequest;
public $rollbackToTask;
public function createTasks($rollbackToType)
{
$this->processRequest = ProcessRequest::factory()->create(['status' => 'ERROR']);
$this->rollbackToTask = ProcessRequestToken::factory()->create([
'status' => 'CLOSED',
'process_request_id' => $this->processRequest->id,
'element_id' => 'node_5',
'element_type' => $rollbackToType,
]);
ProcessRequestToken::factory()->create([
'status' => 'CLOSED',
'process_request_id' => $this->processRequest->id,
'element_id' => 'node_6',
'element_type' => 'gateway',
]);
$task = ProcessRequestToken::factory()->create([
'status' => 'FAILING',
'process_request_id' => $this->processRequest->id,
'element_id' => 'node_7',
'element_type' => 'scriptTask',
]);
return $task;
}
public function testRollbackToFormTask()
{
$task = $this->createTasks('task');
$mockProcessDefinitions = Mockery::mock(BpmnDocument::class);
$newTask = RollbackProcessRequest::rollback($task, $mockProcessDefinitions);
$this->assertEquals('node_5', $newTask->element_id);
$this->assertEquals('ACTIVE', $newTask->status);
$comment = Comment::orderBy('id', 'desc')->first();
$this->assertEquals($comment->body, "The System rolled back {$task->element_name} to {$newTask->element_name}");
}
public function testRollbackToScriptTask()
{
$task = $this->createTasks('scriptTask');
$mockProcessDefinitions = $this->mockRunScriptTask();
$newTask = RollbackProcessRequest::rollback($task, $mockProcessDefinitions);
$this->assertEquals('node_5', $newTask->element_id);
$this->assertEquals('ACTIVE', $newTask->status);
}
public function testRollbackToServiceTask()
{
$task = $this->createTasks('serviceTask');
$mockProcessDefinitions = $this->mockRunServiceTask();
$newTask = RollbackProcessRequest::rollback($task, $mockProcessDefinitions);
$this->assertEquals('node_5', $newTask->element_id);
$this->assertEquals('ACTIVE', $newTask->status);
$this->assertEquals('ACTIVE', $this->processRequest->refresh()->status);
}
private function mockRunScriptTask()
{
$mocksScriptTask = Mockery::mock(ScriptTaskInterface::class);
$mockProcessDefinitions = Mockery::mock(BpmnDocument::class);
$mockProcessDefinitions->shouldReceive('getEvent')
->with('node_5')
->andReturn($mocksScriptTask);
WorkflowManager::shouldReceive('runScripTask')
->withArgs(function ($scriptTask, $task) use ($mocksScriptTask) {
return $scriptTask === $mocksScriptTask && $task->element_id = 'node_5';
});
return $mockProcessDefinitions;
}
private function mockRunServiceTask()
{
$mockServiceTask = Mockery::mock(ServiceTaskInterface::class);
$mockProcessDefinitions = Mockery::mock(BpmnDocument::class);
$mockProcessDefinitions->shouldReceive('getEvent')
->with('node_5')
->andReturn($mockServiceTask);
WorkflowManager::shouldReceive('runServiceTask')
->withArgs(function ($serviceTask, $task) use ($mockServiceTask) {
return $serviceTask === $mockServiceTask && $task->element_id = 'node_5';
});
return $mockProcessDefinitions;
}
}