Adding Unit Test to ensure a right behaviour of BpmnWorkflow Adapter
- flow->gateways (bpmn) to route (workflow) conversion is working fine - start and end event (bpmn) to setting start and end tasks is working fine
This commit is contained in:
@@ -226,6 +226,11 @@ class Route extends BaseRoute
|
||||
return empty($rows) ? null : $rows[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $field
|
||||
* @param null $value
|
||||
* @return \Route[]
|
||||
*/
|
||||
public static function findAllBy($field, $value = null)
|
||||
{
|
||||
$field = is_array($field) ? $field : array($field => $value);
|
||||
|
||||
@@ -191,42 +191,42 @@ class BpmnWorkflow extends Project\Bpmn
|
||||
parent::removeGateway($gatUid);
|
||||
}
|
||||
|
||||
// public function addFlow($data)
|
||||
// {
|
||||
// parent::addFlow($data);
|
||||
public function addFlow($data)
|
||||
{
|
||||
$floUid = parent::addFlow($data);
|
||||
|
||||
// to add a workflow route
|
||||
// - activity -> activity ==> route
|
||||
// - activity -> gateway -> activity ==> selection, evaluation, parallel or parallel by evaluation route
|
||||
// $routes = self::mapBpmnFlowsToWorkflowRoute($data, $flows);
|
||||
//
|
||||
// if ($routes !== null) {
|
||||
// foreach ($routes as $routeData) {
|
||||
// $this->wp->addRoute($routeData["from"], $routeData["to"], $routeData["type"]);
|
||||
// }
|
||||
//
|
||||
// return true;
|
||||
// }
|
||||
//
|
||||
// // to add start event->activity as initial or end task
|
||||
// switch ($data["FLO_ELEMENT_ORIGIN_TYPE"]) {
|
||||
// case "bpmnEvent":
|
||||
// switch ($data["FLO_ELEMENT_DEST_TYPE"]) {
|
||||
// case "bpmnActivity":
|
||||
// $event = \BpmnEventPeer::retrieveByPK($data["FLO_ELEMENT_ORIGIN"]);
|
||||
//
|
||||
// switch ($event && $event->getEvnType()) {
|
||||
// case "START":
|
||||
// // then set that activity/task as "Start Task"
|
||||
// $this->wp->setStartTask($data["FLO_ELEMENT_DEST"]);
|
||||
// break;
|
||||
// }
|
||||
// break;
|
||||
// }
|
||||
// break;
|
||||
// }
|
||||
// to add start event->activity as initial or end task
|
||||
switch ($data["FLO_ELEMENT_ORIGIN_TYPE"]) {
|
||||
case "bpmnEvent":
|
||||
switch ($data["FLO_ELEMENT_DEST_TYPE"]) {
|
||||
case "bpmnActivity":
|
||||
$event = \BpmnEventPeer::retrieveByPK($data["FLO_ELEMENT_ORIGIN"]);
|
||||
|
||||
// }
|
||||
// setting as start task
|
||||
if ($event && $event->getEvnType() == "START") {
|
||||
$this->wp->setStartTask($data["FLO_ELEMENT_DEST"]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case "bpmnActivity":
|
||||
switch ($data["FLO_ELEMENT_DEST_TYPE"]) {
|
||||
case "bpmnEvent":
|
||||
$actUid = $data["FLO_ELEMENT_ORIGIN"];
|
||||
$evnUid = $data["FLO_ELEMENT_DEST"];
|
||||
$event = \BpmnEventPeer::retrieveByPK($evnUid);
|
||||
|
||||
// setting as end task
|
||||
if ($event && $event->getEvnType() == "END") {
|
||||
$this->wp->setEndTask($actUid);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return $floUid;
|
||||
}
|
||||
|
||||
// public function updateFlow($floUid, $data, $flows)
|
||||
// {
|
||||
@@ -247,8 +247,10 @@ class BpmnWorkflow extends Project\Bpmn
|
||||
|
||||
if (! is_null($event) && $event->getEvnType() == "START") {
|
||||
$activity = \BpmnActivityPeer::retrieveByPK($flow->getFloElementDest());
|
||||
if (! is_null($activity)) {
|
||||
$this->wp->setStartTask($activity->getActUid(), false);
|
||||
}
|
||||
}
|
||||
} elseif ($flow->getFloElementOriginType() == "bpmnActivity" &&
|
||||
$flow->getFloElementDestType() == "bpmnEvent") {
|
||||
// verify case: activity -> event(end)
|
||||
@@ -284,7 +286,7 @@ class BpmnWorkflow extends Project\Bpmn
|
||||
throw new \RuntimeException("Required param \"EVN_TYPE\" is missing.");
|
||||
}
|
||||
|
||||
parent::addEvent($data);
|
||||
return parent::addEvent($data);
|
||||
}
|
||||
|
||||
public function mapBpmnFlowsToWorkflowRoutes()
|
||||
|
||||
@@ -354,6 +354,8 @@ class Bpmn extends Handler
|
||||
$event->save();
|
||||
|
||||
self::log("Add Event Success!");
|
||||
|
||||
return $event->getEvnUid();
|
||||
} catch (\Exception $e) {
|
||||
self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString());
|
||||
throw $e;
|
||||
|
||||
@@ -212,15 +212,24 @@ class Workflow extends Handler
|
||||
|
||||
public function getTask($tasUid)
|
||||
{
|
||||
try {
|
||||
$task = new Task();
|
||||
return $task->load($tasUid);
|
||||
$taskData = $task->load($tasUid);
|
||||
} catch (\Exception $e){
|
||||
$taskData = null;
|
||||
}
|
||||
|
||||
return $taskData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return array()
|
||||
*/
|
||||
public function getTasks()
|
||||
{
|
||||
if (empty($this->proUid)) {
|
||||
return null;
|
||||
return array();
|
||||
}
|
||||
|
||||
$tasks = new Tasks();
|
||||
|
||||
@@ -21,7 +21,7 @@ class BpmnWorkflowTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
public static function tearDownAfterClass()
|
||||
{
|
||||
//return false;
|
||||
return false;
|
||||
//cleaning DB
|
||||
foreach (self::$uids as $prjUid) {
|
||||
$bwap = Project\Adapter\BpmnWorkflow::load($prjUid);
|
||||
@@ -32,8 +32,8 @@ class BpmnWorkflowTest extends \PHPUnit_Framework_TestCase
|
||||
function testNew()
|
||||
{
|
||||
$data = array(
|
||||
"PRJ_NAME" => "Test Bpmn/Workflow Project #1",
|
||||
"PRJ_DESCRIPTION" => "Description for - Test BPMN Project #1",
|
||||
"PRJ_NAME" => "Test Bpmn/Workflow Project #1.". rand(1, 100),
|
||||
"PRJ_DESCRIPTION" => "Description for - Test BPMN Project #1." . rand(1, 100),
|
||||
"PRJ_AUTHOR" => "00000000000000000000000000000001"
|
||||
);
|
||||
|
||||
@@ -299,7 +299,7 @@ class BpmnWorkflowTest extends \PHPUnit_Framework_TestCase
|
||||
"BOU_Y" => 163
|
||||
));
|
||||
|
||||
$flowUid1 = $bwap->addFlow(array(
|
||||
$bwap->addFlow(array(
|
||||
'FLO_TYPE' => 'SEQUENCE',
|
||||
'FLO_ELEMENT_ORIGIN' => $actUid1,
|
||||
'FLO_ELEMENT_ORIGIN_TYPE' => 'bpmnActivity',
|
||||
@@ -311,7 +311,7 @@ class BpmnWorkflowTest extends \PHPUnit_Framework_TestCase
|
||||
'FLO_Y2' => 163,
|
||||
));
|
||||
|
||||
$flowUid2 = $bwap->addFlow(array(
|
||||
$bwap->addFlow(array(
|
||||
'FLO_TYPE' => 'SEQUENCE',
|
||||
'FLO_ELEMENT_ORIGIN' => $gatUid,
|
||||
'FLO_ELEMENT_ORIGIN_TYPE' => 'bpmnGateway',
|
||||
@@ -325,19 +325,20 @@ class BpmnWorkflowTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
$bwap->mapBpmnFlowsToWorkflowRoutes();
|
||||
|
||||
$this->assertCount(2, $bwap->getActivities());
|
||||
$this->assertCount(1, $bwap->getGateways());
|
||||
$this->assertCount(2, $bwap->getFlows());
|
||||
|
||||
$flows1 = \BpmnFlow::findAllBy(\BpmnFlowPeer::FLO_ELEMENT_DEST, $gatUid);
|
||||
$flows2 = \BpmnFlow::findAllBy(\BpmnFlowPeer::FLO_ELEMENT_ORIGIN, $gatUid);
|
||||
|
||||
$this->assertCount(1, $flows1);
|
||||
$this->assertCount(1, $flows2);
|
||||
$this->assertEquals($flows1[0]->getFloElementOrigin(), $actUid1);
|
||||
$this->assertEquals($flows2[0]->getFloElementDest(), $actUid2);
|
||||
|
||||
// cleaning
|
||||
$bwap->removeActivity($actUid1);
|
||||
$bwap->removeActivity($actUid2);
|
||||
$bwap->removeGateway($gatUid);
|
||||
|
||||
$this->assertCount(0, $bwap->getActivities());
|
||||
$this->assertCount(0, $bwap->getGateways());
|
||||
$this->assertCount(0, $bwap->getFlows());
|
||||
|
||||
$wp = Project\Workflow::load($bwap->getUid());
|
||||
|
||||
$this->assertCount(0, $wp->getTasks());
|
||||
$this->assertCount(0, $wp->getRoutes());
|
||||
$this->resetProject($bwap);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -523,6 +524,189 @@ class BpmnWorkflowTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertCount(1, \Route::findAllBy(\RoutePeer::TAS_UID, $activitiesUid[2]));
|
||||
$this->assertCount(3, \Route::findAllBy(\RoutePeer::ROU_NEXT_TASK, $actUid5));
|
||||
|
||||
// cleaning
|
||||
$this->resetProject($bwap);
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testNew
|
||||
* @param \ProcessMaker\Project\Adapter\BpmnWorkflow $bwap
|
||||
* @return string
|
||||
*/
|
||||
function testSetStartEvent($bwap)
|
||||
{
|
||||
$actUid = $bwap->addActivity(array(
|
||||
"ACT_NAME" => "Activity #1",
|
||||
"BOU_X" => 312,
|
||||
"BOU_Y" => 464
|
||||
));
|
||||
$evnUid = $bwap->addEvent(array(
|
||||
"EVN_NAME" => "Event #1",
|
||||
"EVN_TYPE" => "START",
|
||||
"BOU_X" => 369,
|
||||
"BOU_Y" => 338,
|
||||
"EVN_MARKER" => "MESSAGE",
|
||||
"EVN_MESSAGE" => "LEAD"
|
||||
));
|
||||
$floUid = $bwap->addFlow(array(
|
||||
'FLO_TYPE' => 'SEQUENCE',
|
||||
'FLO_ELEMENT_ORIGIN' => $evnUid,
|
||||
'FLO_ELEMENT_ORIGIN_TYPE' => 'bpmnEvent',
|
||||
'FLO_ELEMENT_DEST' => $actUid,
|
||||
'FLO_ELEMENT_DEST_TYPE' => 'bpmnActivity',
|
||||
'FLO_X1' => 174,
|
||||
'FLO_Y1' => 365,
|
||||
'FLO_X2' => 355,
|
||||
'FLO_Y2' => 355,
|
||||
));
|
||||
|
||||
$this->assertCount(1, $bwap->getActivities());
|
||||
$this->assertCount(1, $bwap->getEvents());
|
||||
$this->assertCount(1, $bwap->getFlows());
|
||||
|
||||
$wp = Project\Workflow::load($bwap->getUid());
|
||||
$task = $wp->getTask($actUid);
|
||||
|
||||
$this->assertCount(1, $wp->getTasks());
|
||||
$this->assertCount(0, $wp->getRoutes());
|
||||
$this->assertNotNull($task);
|
||||
|
||||
$this->assertEquals($task["TAS_START"], "TRUE");
|
||||
|
||||
return $floUid;
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testNew
|
||||
* @depends testSetStartEvent
|
||||
* @param \ProcessMaker\Project\Adapter\BpmnWorkflow $bwap
|
||||
* @param string $floUid
|
||||
*/
|
||||
function testUnsetStartEvent($bwap, $floUid)
|
||||
{
|
||||
$bwap->removeFlow($floUid);
|
||||
|
||||
$this->assertCount(1, $bwap->getActivities());
|
||||
$this->assertCount(1, $bwap->getEvents());
|
||||
$this->assertCount(0, $bwap->getFlows());
|
||||
|
||||
$wp = Project\Workflow::load($bwap->getUid());
|
||||
|
||||
$tasks = $wp->getTasks();
|
||||
$this->assertCount(1, $tasks);
|
||||
$this->assertCount(0, $wp->getRoutes());
|
||||
$this->assertEquals($tasks[0]["TAS_START"], "FALSE");
|
||||
|
||||
// cleaning
|
||||
$this->resetProject($bwap);
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testNew
|
||||
* @param \ProcessMaker\Project\Adapter\BpmnWorkflow $bwap
|
||||
*/
|
||||
function testSetEndEvent($bwap)
|
||||
{
|
||||
$actUid = $bwap->addActivity(array(
|
||||
"ACT_NAME" => "Activity #1",
|
||||
"BOU_X" => 312,
|
||||
"BOU_Y" => 464
|
||||
));
|
||||
$evnUid = $bwap->addEvent(array(
|
||||
"EVN_NAME" => "Event #1",
|
||||
"EVN_TYPE" => "END",
|
||||
"BOU_X" => 369,
|
||||
"BOU_Y" => 338,
|
||||
"EVN_MARKER" => "MESSAGE",
|
||||
"EVN_MESSAGE" => "LEAD"
|
||||
));
|
||||
$floUid = $bwap->addFlow(array(
|
||||
'FLO_TYPE' => 'SEQUENCE',
|
||||
'FLO_ELEMENT_ORIGIN' => $actUid,
|
||||
'FLO_ELEMENT_ORIGIN_TYPE' => 'bpmnActivity',
|
||||
'FLO_ELEMENT_DEST' => $evnUid,
|
||||
'FLO_ELEMENT_DEST_TYPE' => 'bpmnEvent',
|
||||
'FLO_X1' => 174,
|
||||
'FLO_Y1' => 365,
|
||||
'FLO_X2' => 355,
|
||||
'FLO_Y2' => 355,
|
||||
));
|
||||
|
||||
$this->assertCount(1, $bwap->getActivities());
|
||||
$this->assertCount(1, $bwap->getEvents());
|
||||
$this->assertCount(1, $bwap->getFlows());
|
||||
|
||||
$wp = Project\Workflow::load($bwap->getUid());
|
||||
$task = $wp->getTask($actUid);
|
||||
|
||||
$this->assertCount(1, $wp->getTasks());
|
||||
$this->assertCount(1, $wp->getRoutes());
|
||||
$this->assertNotNull($task);
|
||||
|
||||
$routes = \Route::findAllBy(\RoutePeer::TAS_UID, $task["TAS_UID"]);
|
||||
|
||||
$this->assertCount(1, $routes);
|
||||
$this->assertEquals($routes[0]->getRouNextTask(), "-1");
|
||||
|
||||
return $floUid;
|
||||
}
|
||||
|
||||
/**
|
||||
* @depends testNew
|
||||
* @depends testSetEndEvent
|
||||
* @param \ProcessMaker\Project\Adapter\BpmnWorkflow $bwap
|
||||
* @param $floUid
|
||||
*/
|
||||
function testUnsetEndEvent($bwap, $floUid)
|
||||
{
|
||||
$bwap->removeFlow($floUid);
|
||||
|
||||
$this->assertCount(1, $bwap->getActivities());
|
||||
$this->assertCount(1, $bwap->getEvents());
|
||||
$this->assertCount(0, $bwap->getFlows());
|
||||
|
||||
$wp = Project\Workflow::load($bwap->getUid());
|
||||
|
||||
$this->assertCount(1, $wp->getTasks());
|
||||
$this->assertCount(0, $wp->getRoutes());
|
||||
|
||||
// cleaning
|
||||
$this->resetProject($bwap);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \ProcessMaker\Project\Adapter\BpmnWorkflow $bwap
|
||||
*/
|
||||
protected function resetProject(\ProcessMaker\Project\Adapter\BpmnWorkflow $bwap)
|
||||
{
|
||||
// cleaning
|
||||
$activities = $bwap->getActivities();
|
||||
foreach ($activities as $activity) {
|
||||
$bwap->removeActivity($activity["ACT_UID"]);
|
||||
}
|
||||
$events = $bwap->getEvents();
|
||||
foreach ($events as $event) {
|
||||
$bwap->removeEvent($event["EVN_UID"]);
|
||||
}
|
||||
$gateways = $bwap->getGateways();
|
||||
foreach ($gateways as $gateway) {
|
||||
$bwap->removeGateway($gateway["GAT_UID"]);
|
||||
}
|
||||
$flows = $bwap->getFlows();
|
||||
foreach ($flows as $flow) {
|
||||
$bwap->removeFlow($flow["FLO_UID"]);
|
||||
}
|
||||
|
||||
// verifying that project is cleaned
|
||||
$this->assertCount(0, $bwap->getActivities());
|
||||
$this->assertCount(0, $bwap->getEvents());
|
||||
$this->assertCount(0, $bwap->getGateways());
|
||||
$this->assertCount(0, $bwap->getFlows());
|
||||
|
||||
$wp = Project\Workflow::load($bwap->getUid());
|
||||
|
||||
$this->assertCount(0, $wp->getTasks());
|
||||
$this->assertCount(0, $wp->getRoutes());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user