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];
|
return empty($rows) ? null : $rows[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $field
|
||||||
|
* @param null $value
|
||||||
|
* @return \Route[]
|
||||||
|
*/
|
||||||
public static function findAllBy($field, $value = null)
|
public static function findAllBy($field, $value = null)
|
||||||
{
|
{
|
||||||
$field = is_array($field) ? $field : array($field => $value);
|
$field = is_array($field) ? $field : array($field => $value);
|
||||||
|
|||||||
@@ -191,42 +191,42 @@ class BpmnWorkflow extends Project\Bpmn
|
|||||||
parent::removeGateway($gatUid);
|
parent::removeGateway($gatUid);
|
||||||
}
|
}
|
||||||
|
|
||||||
// public function addFlow($data)
|
public function addFlow($data)
|
||||||
// {
|
{
|
||||||
// parent::addFlow($data);
|
$floUid = parent::addFlow($data);
|
||||||
|
|
||||||
// to add a workflow route
|
// to add start event->activity as initial or end task
|
||||||
// - activity -> activity ==> route
|
switch ($data["FLO_ELEMENT_ORIGIN_TYPE"]) {
|
||||||
// - activity -> gateway -> activity ==> selection, evaluation, parallel or parallel by evaluation route
|
case "bpmnEvent":
|
||||||
// $routes = self::mapBpmnFlowsToWorkflowRoute($data, $flows);
|
switch ($data["FLO_ELEMENT_DEST_TYPE"]) {
|
||||||
//
|
case "bpmnActivity":
|
||||||
// if ($routes !== null) {
|
$event = \BpmnEventPeer::retrieveByPK($data["FLO_ELEMENT_ORIGIN"]);
|
||||||
// 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;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// }
|
// 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)
|
// public function updateFlow($floUid, $data, $flows)
|
||||||
// {
|
// {
|
||||||
@@ -247,7 +247,9 @@ class BpmnWorkflow extends Project\Bpmn
|
|||||||
|
|
||||||
if (! is_null($event) && $event->getEvnType() == "START") {
|
if (! is_null($event) && $event->getEvnType() == "START") {
|
||||||
$activity = \BpmnActivityPeer::retrieveByPK($flow->getFloElementDest());
|
$activity = \BpmnActivityPeer::retrieveByPK($flow->getFloElementDest());
|
||||||
$this->wp->setStartTask($activity->getActUid(), false);
|
if (! is_null($activity)) {
|
||||||
|
$this->wp->setStartTask($activity->getActUid(), false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} elseif ($flow->getFloElementOriginType() == "bpmnActivity" &&
|
} elseif ($flow->getFloElementOriginType() == "bpmnActivity" &&
|
||||||
$flow->getFloElementDestType() == "bpmnEvent") {
|
$flow->getFloElementDestType() == "bpmnEvent") {
|
||||||
@@ -284,7 +286,7 @@ class BpmnWorkflow extends Project\Bpmn
|
|||||||
throw new \RuntimeException("Required param \"EVN_TYPE\" is missing.");
|
throw new \RuntimeException("Required param \"EVN_TYPE\" is missing.");
|
||||||
}
|
}
|
||||||
|
|
||||||
parent::addEvent($data);
|
return parent::addEvent($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function mapBpmnFlowsToWorkflowRoutes()
|
public function mapBpmnFlowsToWorkflowRoutes()
|
||||||
|
|||||||
@@ -354,6 +354,8 @@ class Bpmn extends Handler
|
|||||||
$event->save();
|
$event->save();
|
||||||
|
|
||||||
self::log("Add Event Success!");
|
self::log("Add Event Success!");
|
||||||
|
|
||||||
|
return $event->getEvnUid();
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString());
|
self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString());
|
||||||
throw $e;
|
throw $e;
|
||||||
|
|||||||
@@ -212,15 +212,24 @@ class Workflow extends Handler
|
|||||||
|
|
||||||
public function getTask($tasUid)
|
public function getTask($tasUid)
|
||||||
{
|
{
|
||||||
$task = new Task();
|
try {
|
||||||
return $task->load($tasUid);
|
$task = new Task();
|
||||||
|
$taskData = $task->load($tasUid);
|
||||||
|
} catch (\Exception $e){
|
||||||
|
$taskData = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $taskData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array()
|
||||||
|
*/
|
||||||
public function getTasks()
|
public function getTasks()
|
||||||
{
|
{
|
||||||
if (empty($this->proUid)) {
|
if (empty($this->proUid)) {
|
||||||
return null;
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
$tasks = new Tasks();
|
$tasks = new Tasks();
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ class BpmnWorkflowTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
public static function tearDownAfterClass()
|
public static function tearDownAfterClass()
|
||||||
{
|
{
|
||||||
//return false;
|
return false;
|
||||||
//cleaning DB
|
//cleaning DB
|
||||||
foreach (self::$uids as $prjUid) {
|
foreach (self::$uids as $prjUid) {
|
||||||
$bwap = Project\Adapter\BpmnWorkflow::load($prjUid);
|
$bwap = Project\Adapter\BpmnWorkflow::load($prjUid);
|
||||||
@@ -32,8 +32,8 @@ class BpmnWorkflowTest extends \PHPUnit_Framework_TestCase
|
|||||||
function testNew()
|
function testNew()
|
||||||
{
|
{
|
||||||
$data = array(
|
$data = array(
|
||||||
"PRJ_NAME" => "Test Bpmn/Workflow Project #1",
|
"PRJ_NAME" => "Test Bpmn/Workflow Project #1.". rand(1, 100),
|
||||||
"PRJ_DESCRIPTION" => "Description for - Test BPMN Project #1",
|
"PRJ_DESCRIPTION" => "Description for - Test BPMN Project #1." . rand(1, 100),
|
||||||
"PRJ_AUTHOR" => "00000000000000000000000000000001"
|
"PRJ_AUTHOR" => "00000000000000000000000000000001"
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -299,7 +299,7 @@ class BpmnWorkflowTest extends \PHPUnit_Framework_TestCase
|
|||||||
"BOU_Y" => 163
|
"BOU_Y" => 163
|
||||||
));
|
));
|
||||||
|
|
||||||
$flowUid1 = $bwap->addFlow(array(
|
$bwap->addFlow(array(
|
||||||
'FLO_TYPE' => 'SEQUENCE',
|
'FLO_TYPE' => 'SEQUENCE',
|
||||||
'FLO_ELEMENT_ORIGIN' => $actUid1,
|
'FLO_ELEMENT_ORIGIN' => $actUid1,
|
||||||
'FLO_ELEMENT_ORIGIN_TYPE' => 'bpmnActivity',
|
'FLO_ELEMENT_ORIGIN_TYPE' => 'bpmnActivity',
|
||||||
@@ -311,7 +311,7 @@ class BpmnWorkflowTest extends \PHPUnit_Framework_TestCase
|
|||||||
'FLO_Y2' => 163,
|
'FLO_Y2' => 163,
|
||||||
));
|
));
|
||||||
|
|
||||||
$flowUid2 = $bwap->addFlow(array(
|
$bwap->addFlow(array(
|
||||||
'FLO_TYPE' => 'SEQUENCE',
|
'FLO_TYPE' => 'SEQUENCE',
|
||||||
'FLO_ELEMENT_ORIGIN' => $gatUid,
|
'FLO_ELEMENT_ORIGIN' => $gatUid,
|
||||||
'FLO_ELEMENT_ORIGIN_TYPE' => 'bpmnGateway',
|
'FLO_ELEMENT_ORIGIN_TYPE' => 'bpmnGateway',
|
||||||
@@ -325,19 +325,20 @@ class BpmnWorkflowTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
$bwap->mapBpmnFlowsToWorkflowRoutes();
|
$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
|
// cleaning
|
||||||
$bwap->removeActivity($actUid1);
|
$this->resetProject($bwap);
|
||||||
$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());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -523,6 +524,189 @@ class BpmnWorkflowTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertCount(1, \Route::findAllBy(\RoutePeer::TAS_UID, $activitiesUid[2]));
|
$this->assertCount(1, \Route::findAllBy(\RoutePeer::TAS_UID, $activitiesUid[2]));
|
||||||
$this->assertCount(3, \Route::findAllBy(\RoutePeer::ROU_NEXT_TASK, $actUid5));
|
$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