This commit is contained in:
Andrea Adamczyk
2019-07-09 11:23:00 -04:00
parent 90ee77b6dd
commit 43c3790b43
5 changed files with 585 additions and 2 deletions

View File

@@ -0,0 +1,20 @@
<?php
use Faker\Generator as Faker;
$factory->define(\ProcessMaker\Model\BpmnProject::class, function (Faker $faker) {
return [
'PRJ_UID' => G::generateUniqueID(),
'PRJ_NAME' => '',
'PRJ_DESCRIPTION' => $faker->text,
'PRJ_EXPRESION_LANGUAGE' => '',
'PRJ_TYPE_LANGUAGE' => '',
'PRJ_EXPORTER' => '',
'PRJ_EXPORTER_VERSION' => '',
'PRJ_CREATE_DATE' => new \Carbon\Carbon(2030, 1, 1),
'PRJ_UPDATE_DATE' => new \Carbon\Carbon(2030, 1, 1),
'PRJ_AUTHOR' => '',
'PRJ_AUTHOR_VERSION' => '',
'PRJ_ORIGINAL_SOURCE' => '',
];
});

View File

@@ -35,6 +35,10 @@ define('PMTABLE_KEY', 'pmtable');
define('PATH_WORKFLOW_MYSQL_DATA', PATH_TRUNK . '/workflow/engine/data/mysql/'); define('PATH_WORKFLOW_MYSQL_DATA', PATH_TRUNK . '/workflow/engine/data/mysql/');
define('PATH_RBAC_MYSQL_DATA', PATH_TRUNK . '/rbac/engine/data/mysql/'); define('PATH_RBAC_MYSQL_DATA', PATH_TRUNK . '/rbac/engine/data/mysql/');
define('PATH_LANGUAGECONT', PATH_DATA . '/META-INF/'); define('PATH_LANGUAGECONT', PATH_DATA . '/META-INF/');
define('PM_NEW_PROCESS_SAVE', 1006);
define('PATH_DATA_SITE', PATH_DATA . 'sites/' . SYS_SYS . '/');
define("PATH_DATA_MAILTEMPLATES", PATH_DATA_SITE . "mailTemplates/");
define('PATH_DATA_PUBLIC', PATH_DATA_SITE . 'public/');
//timezone //timezone
$_SESSION['__SYSTEM_UTC_TIME_ZONE__'] = (int) (env('MAIN_SYSTEM_UTC_TIME_ZONE', 'workflow')) == 1; $_SESSION['__SYSTEM_UTC_TIME_ZONE__'] = (int) (env('MAIN_SYSTEM_UTC_TIME_ZONE', 'workflow')) == 1;

View File

@@ -0,0 +1,538 @@
<?php
namespace Tests\unit\workflow\engine\src\ProcessMaker\Importer;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use ProcessMaker\Importer\Importer;
use ProcessMaker\Model\BpmnProject;
use ProcessMaker\Model\Process;
use ReflectionClass;
use Tests\TestCase;
class ImporterTest extends TestCase
{
use DatabaseTransactions;
/**
* Declared to avoid the incompatibility exception
*/
public function setUp()
{
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
}
/**
* Sets protected property on an object using reflection
*
* @param object $object
* @param string $property
* @param array $value
*
* @return void
*/
private function setProtectedProperty($object, $property, $value)
{
$reflection = new ReflectionClass($object);
$reflection_property = $reflection->getProperty($property);
$reflection_property->setAccessible(true);
$reflection_property->setValue($object, $value);
}
/**
* Tests the import method when importing a process with a new uid
*
* @test
*/
public function it_should_test_the_import_method_when_importing_a_process_with_a_new_uid()
{
// Create the existing process
$process = factory(Process::class)->create(
['PRO_CREATE_DATE' => '2019-07-10 10:00:00']
);
// Mock the abstract class
$importer = $this
->getMockBuilder('ProcessMaker\Importer\Importer')
->getMockForAbstractClass();
// create the array that will be passed to the load method
$array = [];
$array["files"]["workflow"] = [];
$array['tables'] = [
'bpmn' =>
[
'activity' =>
[],
'artifact' =>
[],
'bound' =>
[],
'data' =>
[],
'diagram' =>
[
0 =>
[
'dia_uid' => '9367735405d247f616ed440021337333',
'prj_uid' => $process['PRO_UID'],
'dia_name' => 'Custom',
'dia_is_closable' => '0',
],
],
'documentation' =>
[],
'event' =>
[],
'extension' =>
[],
'flow' =>
[],
'gateway' =>
[],
'lane' =>
[],
'laneset' =>
[],
'participant' =>
[],
'process' =>
[
0 =>
[
'pro_uid' => '3209565785d247f618b6235074913840',
'prj_uid' => $process['PRO_UID'],
'dia_uid' => '9367735405d247f616ed440021337333',
'pro_name' => 'Custom',
'pro_type' => 'NONE',
'pro_is_executable' => '0',
'pro_is_closed' => '0',
'pro_is_subprocess' => '0',
],
],
'project' =>
[
0 =>
[
'prj_uid' => $process['PRO_UID'],
'prj_name' => 'Custom',
'prj_description' => '',
'prj_target_namespace' => '',
'prj_expresion_language' => '',
'prj_type_language' => '',
'prj_exporter' => '',
'prj_exporter_version' => '',
'prj_create_date' => '2019-07-09 11:49:53',
'prj_update_date' => '',
'prj_author' => '00000000000000000000000000000001',
'prj_author_version' => '',
'prj_original_source' => '',
],
],
],
'workflow' =>
[
'stepSupervisor' =>
[],
'processUser' =>
[],
'groupwfs' =>
[],
'objectPermissions' =>
[],
'dbconnections' =>
[],
'filesManager' =>
[],
'reportTablesDefinition' =>
[],
'reportTablesFields' =>
[],
'steptriggers' =>
[],
'triggers' =>
[],
'steps' =>
[],
'outputs' =>
[],
'inputs' =>
[],
'dynaforms' =>
[],
'processVariables' =>
[],
'tasks' =>
[],
'taskusers' =>
[],
'routes' =>
[],
'lanes' =>
[],
'gateways' =>
[],
'subProcess' =>
[],
'caseTracker' =>
[],
'caseTrackerObject' =>
[],
'stage' =>
[],
'fieldCondition' =>
[],
'event' =>
[],
'caseScheduler' =>
[],
'processCategory' =>
[],
'taskExtraProperties' =>
[],
'webEntry' =>
[],
'webEntryEvent' =>
[],
'messageType' =>
[],
'messageTypeVariable' =>
[],
'messageEventDefinition' =>
[],
'scriptTask' =>
[],
'timerEvent' =>
[],
'emailEvent' =>
[],
'abeConfiguration' =>
[],
'process' =>
[
0 =>
[
'PRO_UID' => $process['PRO_UID'],
'PRO_TITLE' => 'Custom',
'PRO_DESCRIPTION' => '',
'PRO_PARENT' => $process['PRO_UID'],
'PRO_TIME' => '1',
'PRO_TIMEUNIT' => 'DAYS',
'PRO_STATUS' => 'ACTIVE',
'PRO_TYPE_DAY' => '',
'PRO_TYPE' => 'NORMAL',
'PRO_ASSIGNMENT' => 'FALSE',
'PRO_SHOW_MAP' => '0',
'PRO_SHOW_MESSAGE' => '0',
'PRO_SUBPROCESS' => '0',
'PRO_TRI_CREATE' => '',
'PRO_TRI_OPEN' => '',
'PRO_TRI_DELETED' => '',
'PRO_TRI_CANCELED' => '',
'PRO_TRI_PAUSED' => '',
'PRO_TRI_REASSIGNED' => '',
'PRO_TRI_UNPAUSED' => '',
'PRO_TYPE_PROCESS' => 'PUBLIC',
'PRO_SHOW_DELEGATE' => '0',
'PRO_SHOW_DYNAFORM' => '0',
'PRO_CATEGORY' => '',
'PRO_SUB_CATEGORY' => '',
'PRO_INDUSTRY' => '0',
'PRO_UPDATE_DATE' => '',
'PRO_CREATE_DATE' => '2019-07-09 11:49:53',
'PRO_CREATE_USER' => '00000000000000000000000000000001',
'PRO_HEIGHT' => '5000',
'PRO_WIDTH' => '10000',
'PRO_TITLE_X' => '0',
'PRO_TITLE_Y' => '0',
'PRO_DEBUG' => '0',
'PRO_DYNAFORMS' => '',
'PRO_DERIVATION_SCREEN_TPL' => '',
'PRO_COST' => '0',
'PRO_UNIT_COST' => '',
'PRO_ITEE' => '1',
'PRO_ACTION_DONE' => '',
'PRO_CATEGORY_LABEL' => 'No Category',
'PRO_BPMN' => '1',
],
],
'reportTables' =>
[],
'reportTablesVars' =>
[],
],
'plugins' =>
[],
];
// Mock the load method
$importer->method("load")
->willReturn($array);
// Call the import method
$res = $importer->import(Importer::IMPORT_OPTION_KEEP_WITHOUT_CHANGING_AND_CREATE_NEW,
Importer::GROUP_IMPORT_OPTION_CREATE_NEW, true);
// Query the new process created
$query = Process::query();
$query->select()->where('PRO_UID', $res);
$result = $query->get()->values()->toArray();
// Assert the created date is the same as the updated date
$this->assertEquals($result[0]['PRO_CREATE_DATE'], $result[0]['PRO_UPDATE_DATE']);
}
/**
* Tests the import method when importing a process with a new uid
*
* @test
*/
public function it_should_test_the_import_method_when_importing_a_process_without_change_the_uid()
{
// Create the existing process
$process = factory(Process::class)->create(
['PRO_CREATE_DATE' => '2019-07-10 10:00:00']
);
factory(BpmnProject::class)->create(
['PRJ_UID' => $process['PRO_UID']]
);
// Mock the abstract class
$importer = $this
->getMockBuilder('ProcessMaker\Importer\Importer')
->getMockForAbstractClass();
// create the array that will be passed to the load method
$array = [];
$array["files"]["workflow"] = [];
$array['tables'] = [
'bpmn' =>
[
'activity' =>
[],
'artifact' =>
[],
'bound' =>
[],
'data' =>
[],
'diagram' =>
[
0 =>
[
'dia_uid' => '9367735405d247f616ed440021337333',
'prj_uid' => $process['PRO_UID'],
'dia_name' => 'Custom',
'dia_is_closable' => '0',
],
],
'documentation' =>
[],
'event' =>
[],
'extension' =>
[],
'flow' =>
[],
'gateway' =>
[],
'lane' =>
[],
'laneset' =>
[],
'participant' =>
[],
'process' =>
[
0 =>
[
'pro_uid' => '3209565785d247f618b6235074913840',
'prj_uid' => $process['PRO_UID'],
'dia_uid' => '9367735405d247f616ed440021337333',
'pro_name' => 'Custom',
'pro_type' => 'NONE',
'pro_is_executable' => '0',
'pro_is_closed' => '0',
'pro_is_subprocess' => '0',
],
],
'project' =>
[
0 =>
[
'prj_uid' => $process['PRO_UID'],
'prj_name' => 'Custom',
'prj_description' => '',
'prj_target_namespace' => '',
'prj_expresion_language' => '',
'prj_type_language' => '',
'prj_exporter' => '',
'prj_exporter_version' => '',
'prj_create_date' => '2019-07-09 11:49:53',
'prj_update_date' => '',
'prj_author' => '00000000000000000000000000000001',
'prj_author_version' => '',
'prj_original_source' => '',
],
],
],
'workflow' =>
[
'stepSupervisor' =>
[],
'processUser' =>
[],
'groupwfs' =>
[],
'objectPermissions' =>
[],
'dbconnections' =>
[],
'filesManager' =>
[],
'reportTablesDefinition' =>
[],
'reportTablesFields' =>
[],
'steptriggers' =>
[],
'triggers' =>
[],
'steps' =>
[],
'outputs' =>
[],
'inputs' =>
[],
'dynaforms' =>
[],
'processVariables' =>
[],
'tasks' =>
[],
'taskusers' =>
[],
'routes' =>
[],
'lanes' =>
[],
'gateways' =>
[],
'subProcess' =>
[],
'caseTracker' =>
[],
'caseTrackerObject' =>
[],
'stage' =>
[],
'fieldCondition' =>
[],
'event' =>
[],
'caseScheduler' =>
[],
'processCategory' =>
[],
'taskExtraProperties' =>
[],
'webEntry' =>
[],
'webEntryEvent' =>
[],
'messageType' =>
[],
'messageTypeVariable' =>
[],
'messageEventDefinition' =>
[],
'scriptTask' =>
[],
'timerEvent' =>
[],
'emailEvent' =>
[],
'abeConfiguration' =>
[],
'process' =>
[
0 =>
[
'PRO_UID' => $process['PRO_UID'],
'PRO_TITLE' => 'Custom',
'PRO_DESCRIPTION' => '',
'PRO_PARENT' => $process['PRO_UID'],
'PRO_TIME' => '1',
'PRO_TIMEUNIT' => 'DAYS',
'PRO_STATUS' => 'ACTIVE',
'PRO_TYPE_DAY' => '',
'PRO_TYPE' => 'NORMAL',
'PRO_ASSIGNMENT' => 'FALSE',
'PRO_SHOW_MAP' => '0',
'PRO_SHOW_MESSAGE' => '0',
'PRO_SUBPROCESS' => '0',
'PRO_TRI_CREATE' => '',
'PRO_TRI_OPEN' => '',
'PRO_TRI_DELETED' => '',
'PRO_TRI_CANCELED' => '',
'PRO_TRI_PAUSED' => '',
'PRO_TRI_REASSIGNED' => '',
'PRO_TRI_UNPAUSED' => '',
'PRO_TYPE_PROCESS' => 'PUBLIC',
'PRO_SHOW_DELEGATE' => '0',
'PRO_SHOW_DYNAFORM' => '0',
'PRO_CATEGORY' => '',
'PRO_SUB_CATEGORY' => '',
'PRO_INDUSTRY' => '0',
'PRO_UPDATE_DATE' => '',
'PRO_CREATE_DATE' => '2019-07-09 11:49:53',
'PRO_CREATE_USER' => '00000000000000000000000000000001',
'PRO_HEIGHT' => '5000',
'PRO_WIDTH' => '10000',
'PRO_TITLE_X' => '0',
'PRO_TITLE_Y' => '0',
'PRO_DEBUG' => '0',
'PRO_DYNAFORMS' => '',
'PRO_DERIVATION_SCREEN_TPL' => '',
'PRO_COST' => '0',
'PRO_UNIT_COST' => '',
'PRO_ITEE' => '1',
'PRO_ACTION_DONE' => '',
'PRO_CATEGORY_LABEL' => 'No Category',
'PRO_BPMN' => '1',
],
],
'reportTables' =>
[],
'reportTablesVars' =>
[],
],
'plugins' =>
[],
];
// Mock the load method
$importer->method("load")
->willReturn($array);
// Call the setProtectedProperty method
$this->setProtectedProperty($importer, 'metadata', ['uid' => $process['PRO_UID']]);
// Call the import method
$res = $importer->import(Importer::IMPORT_OPTION_OVERWRITE,
Importer::GROUP_IMPORT_OPTION_CREATE_NEW, false);
// Query the new process created
$query = Process::query();
$query->select()->where('PRO_UID', $res);
$result = $query->get()->values()->toArray();
// Assert the created date is the same as the updated date
$this->assertNotEquals($result[0]['PRO_CREATE_DATE'], $result[0]['PRO_UPDATE_DATE']);
}
}

View File

@@ -91,6 +91,7 @@ abstract class Importer
public function import($option = self::IMPORT_OPTION_CREATE_NEW, $optionGroup = self::GROUP_IMPORT_OPTION_CREATE_NEW, $generateUidFromJs = null, $objectsToImport = '') public function import($option = self::IMPORT_OPTION_CREATE_NEW, $optionGroup = self::GROUP_IMPORT_OPTION_CREATE_NEW, $generateUidFromJs = null, $objectsToImport = '')
{ {
$this->prepare(); $this->prepare();
$keepCreateDate = false;
//Verify data //Verify data
switch ($option) { switch ($option) {
case self::IMPORT_OPTION_CREATE_NEW: case self::IMPORT_OPTION_CREATE_NEW:
@@ -126,6 +127,7 @@ abstract class Importer
case self::IMPORT_OPTION_DISABLE_AND_CREATE_NEW: case self::IMPORT_OPTION_DISABLE_AND_CREATE_NEW:
break; break;
case self::IMPORT_OPTION_KEEP_WITHOUT_CHANGING_AND_CREATE_NEW: case self::IMPORT_OPTION_KEEP_WITHOUT_CHANGING_AND_CREATE_NEW:
$keepCreateDate = true;
break; break;
} }
@@ -264,6 +266,9 @@ abstract class Importer
/*----------------------------------********---------------------------------*/ /*----------------------------------********---------------------------------*/
//Granular Import //Granular Import
try { try {
if ($generateUidFromJs || $keepCreateDate) {
unset($this->importData["tables"]["workflow"]["process"]["PRO_CREATE_DATE"]);
}
if ($objectsToImport !== '') { if ($objectsToImport !== '') {
$granularObj = new \ProcessMaker\BusinessModel\Migrator\GranularImporter(); $granularObj = new \ProcessMaker\BusinessModel\Migrator\GranularImporter();
$newObjectArray = $objectsToImport; $newObjectArray = $objectsToImport;
@@ -651,7 +656,9 @@ abstract class Importer
} }
unset($arrayWorkflowTables["process"]["PRO_CREATE_USER"]); unset($arrayWorkflowTables["process"]["PRO_CREATE_USER"]);
if ($generateUid) {
unset($arrayWorkflowTables["process"]["PRO_CREATE_DATE"]); unset($arrayWorkflowTables["process"]["PRO_CREATE_DATE"]);
}
unset($arrayWorkflowTables["process"]["PRO_UPDATE_DATE"]); unset($arrayWorkflowTables["process"]["PRO_UPDATE_DATE"]);
if ($flagDeleteCategory) { if ($flagDeleteCategory) {

View File

@@ -0,0 +1,14 @@
<?php
namespace ProcessMaker\Model;
use Illuminate\Database\Eloquent\Model;
class BpmnProject extends Model
{
// Set our table name
protected $table = 'BPMN_PROJECT';
protected $primaryKey = 'PRJ_UID';
// We do not have create/update timestamps for this table
public $timestamps = false;
}