Merge branch 'develop' of https://bitbucket.org/colosa/processmaker into feature/PMCORE-1444

This commit is contained in:
Henry Jordan
2020-06-15 17:41:52 +00:00
99 changed files with 5762 additions and 1462 deletions

View File

@@ -0,0 +1,14 @@
<?php
namespace App\Jobs;
class ActionByEmail extends QueuedClosure
{
/**
* The number of times the job may be attempted.
*
* @var int
*/
public $tries = 1;
}

View File

@@ -0,0 +1,14 @@
<?php
namespace App\Jobs;
class GenerateReportTable extends QueuedClosure
{
/**
* The number of times the job may be attempted.
*
* @var int
*/
public $tries = 1;
}

View File

@@ -18,4 +18,14 @@ abstract class QueuedClosure extends CallQueuedClosure
{
parent::__construct(new SerializableClosure($closure));
}
/**
* Get the display name for the queued job.
*
* @return string
*/
public function displayName(): string
{
return get_class($this) . ' ' . parent::displayName();
}
}

14
app/Jobs/RouteCase.php Normal file
View File

@@ -0,0 +1,14 @@
<?php
namespace App\Jobs;
class RouteCase extends QueuedClosure
{
/**
* The number of times the job may be attempted.
*
* @var int
*/
public $tries = 1;
}

View File

@@ -3,10 +3,14 @@
use Faker\Generator as Faker;
$factory->define(\ProcessMaker\Model\AbeConfiguration::class, function (Faker $faker) {
$process = \ProcessMaker\Model\Process::all()->random();
$task = \ProcessMaker\Model\Task::all()->random();
$dynaForm = \ProcessMaker\Model\Dynaform::all()->random();
$emailServer = \ProcessMaker\Model\EmailServerModel::all()->random();
$process = factory(\ProcessMaker\Model\Process::class)->create();
$dynaform = factory(\ProcessMaker\Model\Dynaform::class)->create([
'PRO_UID' => $process->PRO_UID
]);
$task = factory(\ProcessMaker\Model\Task::class)->create([
'PRO_UID' => $process->PRO_UID
]);
$emailServer = factory(\ProcessMaker\Model\EmailServerModel::class)->create();
return [
'ABE_UID' => G::generateUniqueID(),
'PRO_UID' => $process->PRO_UID,
@@ -14,7 +18,7 @@ $factory->define(\ProcessMaker\Model\AbeConfiguration::class, function (Faker $f
'ABE_TYPE' => $faker->randomElement(['', 'LINK']),
'ABE_TEMPLATE' => 'actionByEmail.html',
'ABE_DYN_TYPE' => 'NORMAL',
'DYN_UID' => $dynaForm->DYN_UID,
'DYN_UID' => $dynaform->DYN_UID,
'ABE_EMAIL_FIELD' => 'admin@processmaker.com',
'ABE_ACTION_FIELD' => '',
'ABE_CASE_NOTE_IN_RESPONSE' => $faker->randomElement(['0', '1']),

View File

@@ -3,12 +3,17 @@
use Faker\Generator as Faker;
$factory->define(\ProcessMaker\Model\AbeRequest::class, function (Faker $faker) {
$process = \ProcessMaker\Model\Application::all()->random();
$abeConfiguration = \ProcessMaker\Model\AbeConfiguration::all()->random();
$process = factory(\ProcessMaker\Model\Process::class)->create();
$abeConfiguration = factory(\ProcessMaker\Model\AbeConfiguration::class)->create([
'PRO_UID' => $process->PRO_UID
]);
$application = factory(\ProcessMaker\Model\Application::class)->create([
'PRO_UID' => $process->PRO_UID
]);
return [
'ABE_REQ_UID' => G::generateUniqueID(),
'ABE_UID' => $abeConfiguration->ABE_UID,
'APP_UID' => $process->APP_UID,
'APP_UID' => $application->APP_UID,
'DEL_INDEX' => 0,
'ABE_REQ_SENT_TO' => $faker->email,
'ABE_REQ_SUBJECT' => '',

View File

@@ -3,20 +3,26 @@
use Faker\Generator as Faker;
$factory->define(\ProcessMaker\Model\Application::class, function(Faker $faker) {
$statuses = ['DRAFT', 'TO_DO'];
$status = $faker->randomElement($statuses);
$statusId = array_search($status, $statuses) + 1;
$user = factory(\ProcessMaker\Model\User::class)->create();
$appNumber = $faker->unique()->numberBetween(1000);
//APP_TITLE field is used in 'MYSQL: MATCH() AGAINST()' function, string size should not be less than 3.
$appTitle = $faker->lexify(str_repeat('?', rand(3, 5)) . ' ' . str_repeat('?', rand(3, 5)));
//APP_STATUS must start in TO_DO because all tests require this state.
return [
'APP_UID' => G::generateUniqueID(),
'APP_TITLE' => $faker->sentence(3),
'APP_TITLE' => $appTitle,
'APP_NUMBER' => $appNumber,
'APP_STATUS' => $status,
'APP_STATUS_ID' => $statusId,
'PRO_UID' => G::generateUniqueID(),
'APP_STATUS' => 'TO_DO',
'APP_STATUS_ID' => 2,
'PRO_UID' => function() {
return factory(\ProcessMaker\Model\Process::class)->create()->PRO_UID;
},
'APP_PARALLEL' => 'N',
'APP_INIT_USER' => G::generateUniqueID(),
'APP_CUR_USER' => G::generateUniqueID(),
'APP_INIT_USER' => $user->USR_UID,
'APP_CUR_USER' => $user->USR_UID,
'APP_PIN' => G::generateUniqueID(),
'APP_CREATE_DATE' => $faker->dateTime(),
'APP_UPDATE_DATE' => $faker->dateTime(),
@@ -30,17 +36,19 @@ $factory->state(\ProcessMaker\Model\Application::class, 'foreign_keys', function
// Create values in the foreign key relations
$process = factory(\ProcessMaker\Model\Process::class)->create();
$user = factory(\ProcessMaker\Model\User::class)->create();
// Get other random values
$statuses = ['DRAFT', 'TO_DO'];
$status = $faker->randomElement($statuses);
$statusId = array_search($status, $statuses) + 1;
$appNumber = $faker->unique()->numberBetween(1000);
//APP_TITLE field is used in 'MYSQL: MATCH() AGAINST()' function, string size should not be less than 3.
$appTitle = $faker->lexify(str_repeat('?', rand(3, 5)) . ' ' . str_repeat('?', rand(3, 5)));
//APP_STATUS must start in TO_DO because all tests require this state.
return [
'APP_UID' => G::generateUniqueID(),
'APP_TITLE' => $faker->sentence(3),
'APP_TITLE' => $appTitle,
'APP_NUMBER' => $appNumber,
'APP_STATUS' => $status,
'APP_STATUS_ID' => $statusId,
'APP_STATUS' => 'TO_DO',
'APP_STATUS_ID' => 2,
'PRO_UID' => $process->PRO_UID,
'APP_PARALLEL' => 'N',
'APP_INIT_USER' => $user->USR_UID,
@@ -51,4 +59,4 @@ $factory->state(\ProcessMaker\Model\Application::class, 'foreign_keys', function
'APP_INIT_DATE' => $faker->dateTime(),
'APP_DATA' => serialize(['APP_NUMBER' => $appNumber])
];
});
});

View File

@@ -3,15 +3,26 @@
use Faker\Generator as Faker;
$factory->define(\ProcessMaker\Model\Delegation::class, function(Faker $faker) {
$user = factory(\ProcessMaker\Model\User::class)->create();
$process = factory(\ProcessMaker\Model\Process::class)->create();
$task = factory(\ProcessMaker\Model\Task::class)->create([
'PRO_UID' => $process->PRO_UID,
'PRO_ID' => $process->PRO_ID
]);
$application = factory(\ProcessMaker\Model\Application::class)->create([
'PRO_UID' => $process->PRO_UID,
'APP_INIT_USER' => $user->USR_UID,
'APP_CUR_USER' => $user->USR_UID
]);
// Return with default values
return [
'APP_UID' => G::generateUniqueID(),
'APP_UID' => $application->APP_UID,
'DEL_INDEX' => 1,
'APP_NUMBER' => $faker->unique()->numberBetween(1, 100000),
'APP_NUMBER' => $application->APP_NUMBER,
'DEL_PREVIOUS' => 0,
'PRO_UID' => G::generateUniqueID(),
'TAS_UID' => G::generateUniqueID(),
'USR_UID' => G::generateUniqueID(),
'PRO_UID' => $process->PRO_UID,
'TAS_UID' => $task->TAS_UID,
'USR_UID' => $user->USR_UID,
'DEL_TYPE' => 'NORMAL',
'DEL_THREAD' => 1,
'DEL_THREAD_STATUS' => 'OPEN',
@@ -20,9 +31,9 @@ $factory->define(\ProcessMaker\Model\Delegation::class, function(Faker $faker) {
'DEL_INIT_DATE' => $faker->dateTime(),
'DEL_TASK_DUE_DATE' => $faker->dateTime(),
'DEL_RISK_DATE' => $faker->dateTime(),
'USR_ID' => 0,
'PRO_ID' => 0,
'TAS_ID' => 0,
'USR_ID' => $user->USR_ID,
'PRO_ID' => $process->PRO_ID,
'TAS_ID' => $task->TAS_ID,
'DEL_DATA' => ''
];
});
@@ -30,10 +41,17 @@ $factory->define(\ProcessMaker\Model\Delegation::class, function(Faker $faker) {
// Create a delegation with the foreign keys
$factory->state(\ProcessMaker\Model\Delegation::class, 'foreign_keys', function (Faker $faker) {
// Create values in the foreign key relations
$application = factory(\ProcessMaker\Model\Application::class)->create();
$process = factory(\ProcessMaker\Model\Process::class)->create();
$task = factory(\ProcessMaker\Model\Task::class)->create();
$user = factory(\ProcessMaker\Model\User::class)->create();
$process = factory(\ProcessMaker\Model\Process::class)->create();
$task = factory(\ProcessMaker\Model\Task::class)->create([
'PRO_UID' => $process->PRO_UID,
'PRO_ID' => $process->PRO_ID
]);
$application = factory(\ProcessMaker\Model\Application::class)->create([
'PRO_UID' => $process->PRO_UID,
'APP_INIT_USER' => $user->USR_UID,
'APP_CUR_USER' => $user->USR_UID
]);
// Return with default values
return [

View File

@@ -0,0 +1,54 @@
<?php
use Faker\Generator as Faker;
$factory->define(\ProcessMaker\Model\Documents::class, function (Faker $faker) {
$types = ['INPUT', 'OUTPUT', 'ATTACHED'];
$type = $faker->randomElement($types);
return [
'APP_DOC_UID' => G::generateUniqueID(),
'APP_DOC_FILENAME' => 'image.png',
'APP_DOC_TITLE' => '',
'APP_DOC_COMMENT' => '',
'DOC_VERSION' => 1,
'APP_UID' => G::generateUniqueID(),
'DEL_INDEX' => 1,
'DOC_UID' => G::generateUniqueID(),
'USR_UID' => G::generateUniqueID(),
'APP_DOC_TYPE' => $type,
'APP_DOC_CREATE_DATE' => $faker->date(),
'APP_DOC_INDEX' => 1,
'FOLDER_UID' => G::generateUniqueID(),
'APP_DOC_PLUGIN' => '',
'APP_DOC_TAGS' => '',
'APP_DOC_STATUS' => 'ACTIVE',
'APP_DOC_STATUS_DATE' => $faker->date(),
'APP_DOC_FIELDNAME' => '',
'APP_DOC_DRIVE_DOWNLOAD' => '',
];
});
// Create a document related to the case notes
$factory->state(\ProcessMaker\Model\Documents::class, 'case_notes', function (Faker $faker) {
return [
'APP_DOC_UID' => G::generateUniqueID(),
'APP_DOC_FILENAME' => 'image.png',
'APP_DOC_TITLE' => '',
'APP_DOC_COMMENT' => '',
'DOC_VERSION' => 1,
'APP_UID' => G::generateUniqueID(),
'DEL_INDEX' => 1,
'DOC_UID' => G::generateUniqueID(),
'USR_UID' => G::generateUniqueID(),
'APP_DOC_TYPE' => 'CASE_NOTE',
'APP_DOC_CREATE_DATE' => $faker->date(),
'APP_DOC_INDEX' => 1,
'FOLDER_UID' => G::generateUniqueID(),
'APP_DOC_PLUGIN' => '',
'APP_DOC_TAGS' => '',
'APP_DOC_STATUS' => 'ACTIVE',
'APP_DOC_STATUS_DATE' => $faker->date(),
'APP_DOC_FIELDNAME' => '',
'APP_DOC_DRIVE_DOWNLOAD' => '',
];
});

View File

@@ -10,10 +10,12 @@ $factory->define(\ProcessMaker\Model\Dynaform::class, function(Faker $faker) {
$date = $faker->dateTime();
return [
'DYN_UID' => G::generateUniqueID(),
'DYN_ID' => $faker->unique()->numberBetween(1, 10000),
'DYN_TITLE' => $faker->sentence(2),
'DYN_DESCRIPTION' => $faker->sentence(5),
'PRO_UID' => G::generateUniqueID(),
'PRO_UID' => function() {
$process = factory(Process::class)->create();
return $process->PRO_UID;
},
'DYN_TYPE' => 'xmlform',
'DYN_FILENAME' => '',
'DYN_CONTENT' => '',
@@ -27,7 +29,6 @@ $factory->state(\ProcessMaker\Model\Dynaform::class, 'foreign_keys', function (F
$date = $faker->dateTime();
return [
'DYN_UID' => G::generateUniqueID(),
'DYN_ID' => $faker->unique()->numberBetween(1, 10000),
'DYN_TITLE' => $faker->sentence(2),
'DYN_DESCRIPTION' => $faker->sentence(5),
'PRO_UID' => function() {
@@ -49,10 +50,12 @@ $factory->state(\ProcessMaker\Model\Dynaform::class, 'translations', function (F
$date = $faker->dateTime();
return [
'DYN_UID' => G::generateUniqueID(),
'DYN_ID' => $faker->unique()->numberBetween(1, 10000),
'DYN_TITLE' => $faker->sentence(2),
'DYN_DESCRIPTION' => $faker->sentence(5),
'PRO_UID' => G::generateUniqueID(),
'PRO_UID' => function() {
$process = factory(Process::class)->create();
return $process->PRO_UID;
},
'DYN_TYPE' => 'xmlform',
'DYN_FILENAME' => '',
'DYN_CONTENT' => '',

View File

@@ -7,7 +7,6 @@ use Faker\Generator as Faker;
$factory->define(\ProcessMaker\Model\Groupwf::class, function(Faker $faker) {
return [
'GRP_UID' => G::generateUniqueID(),
'GRP_ID' => $faker->unique()->numberBetween(1, 2000),
'GRP_TITLE' => $faker->sentence(2),
'GRP_STATUS' => 'ACTIVE',
'GRP_LDAP_DN' => '',

View File

@@ -10,7 +10,6 @@ use ProcessMaker\Model\Process;
$factory->define(InputDocument::class, function(Faker $faker) {
return [
'INP_DOC_UID' => G::generateUniqueID(),
'INP_DOC_ID' => $faker->unique()->numberBetween(1, 10000),
'PRO_UID' => function() {
$process = factory(Process::class)->create();
return $process->PRO_UID;

View File

@@ -6,9 +6,9 @@ use Faker\Generator as Faker;
$factory->define(\ProcessMaker\Model\Process::class, function(Faker $faker) {
// Return with default values
//The incremental fields of the tables must not be specified in the creation list.
return [
'PRO_UID' => G::generateUniqueID(),
'PRO_ID' => $faker->unique()->numberBetween(1, 1000000),
'PRO_TITLE' => $faker->sentence(3),
'PRO_DESCRIPTION' => $faker->paragraph(3),
'PRO_CREATE_USER' => '00000000000000000000000000000001',
@@ -19,7 +19,9 @@ $factory->define(\ProcessMaker\Model\Process::class, function(Faker $faker) {
'PRO_TYPE_PROCESS' => 'PUBLIC',
'PRO_UPDATE_DATE' => $faker->dateTime(),
'PRO_CREATE_DATE' => $faker->dateTime(),
'PRO_CATEGORY' => '',
'PRO_CATEGORY' => function() {
return factory(\ProcessMaker\Model\ProcessCategory::class)->create()->CATEGORY_UID;
},
];
});
@@ -28,7 +30,6 @@ $factory->state(\ProcessMaker\Model\Process::class, 'foreign_keys', function (Fa
$user = factory(\ProcessMaker\Model\User::class)->create();
return [
'PRO_UID' => G::generateUniqueID(),
'PRO_ID' => $faker->unique()->numberBetween(1, 1000000),
'PRO_TITLE' => $faker->sentence(3),
'PRO_DESCRIPTION' => $faker->paragraph(3),
'PRO_CREATE_USER' => $user->USR_UID,
@@ -49,7 +50,6 @@ $factory->state(\ProcessMaker\Model\Process::class, 'flow', function (Faker $fak
$user = factory(\ProcessMaker\Model\User::class)->create();
$process = [
'PRO_UID' => G::generateUniqueID(),
'PRO_ID' => $faker->unique()->numberBetween(1, 1000000),
'PRO_TITLE' => $faker->sentence(3),
'PRO_DESCRIPTION' => $faker->paragraph(3),
'PRO_CREATE_USER' => $user->USR_UID,

View File

@@ -6,9 +6,37 @@ use ProcessMaker\Model\ProcessVariables;
$factory->define(ProcessVariables::class, function (Faker $faker) {
return [
'VAR_UID' => G::generateUniqueID(),
'PRO_ID' => G::generateUniqueID(),
'PRJ_UID' => G::generateUniqueID(),
'VAR_NAME' => $faker->word,
'VAR_FIELD_TYPE' => G::generateUniqueID(),
'VAR_FIELD_TYPE_ID' => G::generateUniqueID(),
'VAR_FIELD_SIZE' => 10,
'VAR_LABEL' => 'string',
'VAR_DBCONNECTION' => 'workflow',
'VAR_SQL' => '',
'VAR_NULL' => 0,
'VAR_DEFAULT' => '',
'VAR_ACCEPTED_VALUES' => '[]',
'INP_DOC_UID' => ''
];
});
// Create a processVariables with the foreign keys
$factory->state(ProcessVariables::class, 'foreign_keys', function (Faker $faker) {
$types = ['string', 'integer', 'float', 'boolean', 'datetime', 'grid', 'array', 'file', 'multiplefile', 'object'];
$varType = $faker->randomElement($types);
$varTypeId = array_search($varType, $types) + 1;
// Create values in the foreign key relations
$process = factory(\ProcessMaker\Model\Process::class)->create();
return [
'VAR_UID' => G::generateUniqueID(),
'PRO_ID' => $process->PRO_ID,
'PRJ_UID' => $process->PRO_UID,
'VAR_NAME' => $faker->word,
'VAR_FIELD_TYPE' => $varType,
'VAR_FIELD_TYPE_ID' => $varTypeId,
'VAR_FIELD_SIZE' => 10,
'VAR_LABEL' => 'string',
'VAR_DBCONNECTION' => 'workflow',

View File

@@ -0,0 +1,18 @@
<?php
use Faker\Generator as Faker;
$factory->define(\ProcessMaker\Model\StepTrigger::class, function (Faker $faker) {
return [
'STEP_UID' => $faker->regexify("/[a-zA-Z]{32}/"),
'TAS_UID' => function() {
return factory(\ProcessMaker\Model\Task::class)->create()->TAS_UID;
},
'TRI_UID' => function() {
return factory(\ProcessMaker\Model\Triggers::class)->create()->TRI_UID;
},
'ST_TYPE' => 'BEFORE',
'ST_CONDITION' => '',
'ST_POSITION' => 1,
];
});

View File

@@ -0,0 +1,17 @@
<?php
use Faker\Generator as Faker;
$factory->define(\ProcessMaker\Model\SubApplication::class, function (Faker $faker) {
return [
'APP_UID' => G::generateUniqueID(),
'APP_PARENT' => G::generateUniqueID(),
'DEL_INDEX_PARENT' => 2,
'DEL_THREAD_PARENT' => 1,
'SA_STATUS' => 'ACTIVE',
'SA_VALUES_OUT' => 'a:0:{}',
'SA_VALUES_IN' => 'a:0:{}',
'SA_INIT_DATE' => $faker->dateTime(),
'SA_FINISH_DATE' => $faker->dateTime(),
];
});

View File

@@ -6,11 +6,11 @@
use Faker\Generator as Faker;
$factory->define(\ProcessMaker\Model\Task::class, function(Faker $faker) {
$process = factory(\ProcessMaker\Model\Process::class)->create();
return [
'PRO_UID' => G::generateUniqueID(),
'PRO_ID' => $faker->unique()->numberBetween(),
'PRO_UID' => $process->PRO_UID,
'PRO_ID' => $process->PRO_ID,
'TAS_UID' => G::generateUniqueID(),
'TAS_ID' => $faker->unique()->numberBetween(),
'TAS_TITLE' => $faker->sentence(2),
'TAS_TYPE' => 'NORMAL',
'TAS_TYPE_DAY' => 1,
@@ -39,7 +39,6 @@ $factory->state(\ProcessMaker\Model\Task::class, 'foreign_keys', function (Faker
'PRO_UID' => $process->PRO_UID,
'PRO_ID' => $process->PRO_ID,
'TAS_UID' => G::generateUniqueID(),
'TAS_ID' => $faker->unique()->numberBetween(1, 200000),
'TAS_TITLE' => $faker->sentence(2),
'TAS_TYPE' => 'NORMAL',
'TAS_TYPE_DAY' => 1,

View File

@@ -5,12 +5,14 @@ use ProcessMaker\Model\Triggers;
$factory->define(Triggers::class, function (Faker $faker) {
return [
'TRI_UID' => G::generateUniqueID(),
'TRI_UID' => $faker->regexify("/[a-zA-Z]{32}/"),
'TRI_TITLE' => $faker->sentence(5),
'TRI_DESCRIPTION' => $faker->text,
'PRO_UID' => G::generateUniqueID(),
'PRO_UID' => function() {
return factory(\ProcessMaker\Model\Process::class)->create()->PRO_UID;
},
'TRI_TYPE' => 'SCRIPT',
'TRI_WEBBOT' => $faker->text,
'TRI_PARAM' => '',
];
});
});

View File

@@ -90,6 +90,10 @@
var evaluateFunctionFunction = [evaluateFunction+"($gridName,$Expression)"];
arrayFunctions[evaluateFunction] = evaluateFunctionFunction;
var PMFTotalCalculation = "PMFTotalCalculation";
var PMFTotalCalculationFunction = [PMFTotalCalculation + "($gridName, $field, 'function')"];
arrayFunctions[PMFTotalCalculation] = PMFTotalCalculationFunction;
var PMFTaskCase = "PMFTaskCase";
var PMFTaskCaseFunction = [PMFTaskCase+"($caseId)"];
arrayFunctions[PMFTaskCase] = PMFTaskCaseFunction;
@@ -219,7 +223,7 @@
arrayFunctions[PMFGetCaseNotes] = PMFGetCaseNotesFunction;
var phpPMFunctions = [formatDate,getCurrentDate,getCurrentTime,literalDate,capitalize,lowerCase,upperCase,userInfo,executeQuery,orderGrid,
evaluateFunction,PMFTaskCase,PMFTaskList,PMFUserList,PMFGroupList,PMFRoleList,PMFCaseList,PMFProcessList,PMFSendVariables,PMFDerivateCase,
evaluateFunction, PMFTotalCalculation, PMFTaskCase,PMFTaskList,PMFUserList,PMFGroupList,PMFRoleList,PMFCaseList,PMFProcessList,PMFSendVariables,PMFDerivateCase,
PMFNewCaseImpersonate,PMFNewCase,PMFPauseCase,PMFUnpauseCase,PMFAssignUserToGroup,PMFCreateUser,PMFUpdateUser,PMFInformationUser,
generateCode,setCaseTrackerCode,jumping,PMFRedirectToStep,pauseCase,PMFSendMessage,PMFgetLabelOption,PMFGenerateOutputDocument,
PMFGetUserEmailAddress,PMFGetNextAssignedUser,PMFDeleteCase,PMFCancelCase,PMFAddInputDocument,PMFAddCaseNote,PMFGetCaseNotes];

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 750 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@@ -0,0 +1,33 @@
{
"data": {
"var_Text1": "5298067855ed6e6893e1424067710552",
"var_Textarea1": "4835809915ed6e6893e14a6079656976",
"var_Dropdown1": "5287566085ed6e6893e14e0083475368",
"var_Suggest1": "4813021735ed6e6893e1520081779769",
"var_DateTime1": "1975-04-04 16:34:22",
"var_String1": "7984290665ed6e6893e15b2092042769",
"var_Integer1": "44"
},
"mapping": [{
"sFieldName": "var_Text1",
"sType": "char"
}, {
"sFieldName": "var_Textarea1",
"sType": "text"
}, {
"sFieldName": "var_Dropdown1",
"sType": "char"
}, {
"sFieldName": "var_Suggest1",
"sType": "char"
}, {
"sFieldName": "var_DateTime1",
"sType": "date"
}, {
"sFieldName": "var_String1",
"sType": "char"
}, {
"sFieldName": "var_Integer1",
"sType": "number"
}]
}

Binary file not shown.

View File

@@ -10,6 +10,7 @@ use ProcessMaker\Model\Application;
use ProcessMaker\Model\Delegation;
use ProcessMaker\Model\Process;
use ProcessMaker\Model\Route;
use ProcessMaker\Model\SubApplication;
use ProcessMaker\Model\Task;
use ProcessMaker\Model\TaskUser;
use ProcessMaker\Model\User;
@@ -111,6 +112,8 @@ class DerivationTest extends TestCase
* It tests the doDerivation method sending variables synchronously
*
* @covers Derivation::doDerivation()
* @covers Derivation::<protected>
*
* @test
*/
public function it_should_test_the_do_derivation_method_sending_variables_synchronously()
@@ -151,7 +154,7 @@ class DerivationTest extends TestCase
$sp = [
'SP_VARIABLES_OUT' => 'a:1:{s:6:"@&var1";s:6:"@&var2";}',
'SP_VARIABLES_IN' => 'a:1:{s:6:"@&var2";s:6:"@&var3";}',
'SP_SYNCHRONOUS' => '1',
'SP_SYNCHRONOUS' => 1,
'SP_TYPE' => '',
'TAS_UID' => $task->TAS_UID,
'USR_UID' => $user->USR_UID,
@@ -166,12 +169,22 @@ class DerivationTest extends TestCase
// Assert the new delegation index is 1
$this->assertEquals(1, $res);
// Review the subprocess synchronously
$query = SubApplication::query()->select();
$query->where('APP_PARENT', $application->APP_UID);
$query->where('DEL_INDEX_PARENT', $appDelegation->DEL_INDEX);
$results = $query->get()->toArray();
$this->assertNotEmpty($results);
$this->assertEquals($results[0]['SA_STATUS'], 'ACTIVE');
}
/**
* It tests the doDerivation method sending variables asynchronously
*
* @covers Derivation::doDerivation()
* @covers Derivation::<protected>
*
* @test
*/
public function it_should_test_the_do_derivation_method_sending_variables_asynchronously()
@@ -225,7 +238,7 @@ class DerivationTest extends TestCase
$sp = [
'SP_VARIABLES_OUT' => 'a:1:{s:6:"@&var1";s:6:"@&var2";}',
'SP_VARIABLES_IN' => 'a:1:{s:6:"@&var2";s:6:"@&var3";}',
'SP_SYNCHRONOUS' => '0',
'SP_SYNCHRONOUS' => 0,
'SP_TYPE' => '',
'TAS_UID' => $task->TAS_UID,
'USR_UID' => $user->USR_UID,
@@ -240,5 +253,13 @@ class DerivationTest extends TestCase
// Assert the new delegation index is 1
$this->assertEquals(1, $res);
// Review the subprocess asynchronously
$query = SubApplication::query()->select();
$query->where('APP_PARENT', $application->APP_UID);
$query->where('DEL_INDEX_PARENT', $appDelegation->DEL_INDEX);
$results = $query->get()->toArray();
$this->assertNotEmpty($results);
$this->assertEquals($results[0]['SA_STATUS'], 'FINISHED');
}
}

View File

@@ -984,6 +984,64 @@ class PmDynaformTest extends TestCase
// Compare the values
$this->assertEquals($dynaformTitle, $dynaform->DYN_TITLE);
}
/**
* This test should verify the setDependentOptionsForDatetime() method, to
* add the dependentOptions property to the datetime control.
* @test
* @covers PmDynaform::jsonr()
* @covers PmDynaform::setDependentOptionsForDatetime()
*/
public function it_should_test_dependent_options_for_datetime_control()
{
$pathData = PATH_TRUNK . "/tests/resources/dynaform1.json";
$data = file_get_contents($pathData);
$json = json_decode($data);
//assert for not contain property: dependentOptions
$result = json_decode(json_encode($json), JSON_OBJECT_AS_ARRAY);
$fn = function($item) use(&$fn) {
if (is_array($item)) {
if (isset($item['type']) && $item['type'] === 'datetime') {
$this->assertArrayNotHasKey('dependentOptions', $item);
}
array_map($fn, $item);
}
};
array_map($fn, $result);
//assert new property: dependentOptions
$dynaform = new PmDynaform();
$dynaform->jsonr($json);
$result = json_decode(json_encode($json), JSON_OBJECT_AS_ARRAY);
$fn = function($item) use(&$fn) {
if (is_array($item)) {
if (isset($item['type']) && $item['type'] === 'datetime') {
$this->assertArrayHasKey('dependentOptions', $item);
$this->assertArrayHasKey('minDate', $item['dependentOptions']);
$this->assertArrayHasKey('maxDate', $item['dependentOptions']);
$this->assertArrayHasKey('defaultDate', $item['dependentOptions']);
}
array_map($fn, $item);
}
};
array_map($fn, $result);
$dynaform = new PmDynaform();
$reflection = new ReflectionClass($dynaform);
$reflectionMethod = $reflection->getMethod('setDependentOptionsForDatetime');
$reflectionMethod->setAccessible(true);
$a = new stdClass();
$reflectionMethod->invokeArgs($dynaform, [&$a]);
$this->assertInstanceOf('ReflectionMethod', $reflectionMethod);
$a = new stdClass();
$a->type = 'suggest';
$reflectionMethod->invokeArgs($dynaform, [&$a]);
$this->assertInstanceOf('ReflectionMethod', $reflectionMethod);
}
}
// Dummy function used for the coverture

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,260 @@
<?php
namespace Tests\unit\workflow\engine\classes\PmFunctions;
use Faker\Factory;
use Tests\TestCase;
/**
* Test the PMFTotalCalculation() function
*
* @link https://wiki.processmaker.com/3.1/ProcessMaker_Functions#executeQuery.28.29
*/
class PMFTotalCalculationTest extends TestCase
{
/**
* This tests if the "PMFTotalCalculation" execute correctly the sum
* @test
*/
public function it_must_return_the_sum_of_the_method()
{
$grid = [
'1' => [
"field1" => "Value 1",
"field2" => 2
],
'2' => [
"field1" => "Value 2",
"field2" => 5
],
'3' => [
"field1" => "Value 3",
"field2" => 3
]
];
$field = "field2";
$this->assertEquals(10, PMFTotalCalculation($grid, $field, 'sum'));
}
/**
* This tests if the "PMFTotalCalculation" execute correctly the average
* @test
*/
public function it_must_return_the_average_of_the_method()
{
$grid = [
'1' => [
"field1" => "Value 1",
"field2" => 2
],
'2' => [
"field1" => "Value 2",
"field2" => 5
],
'3' => [
"field1" => "Value 3",
"field2" => 3
]
];
$this->assertEquals(3.3333333333, PMFTotalCalculation($grid, 'field2', 'average'));
}
/**
* This tests if the "PMFTotalCalculation" execute correctly the median
* @test
*/
public function it_must_return_the_median_of_the_method()
{
$grid1 = [
'1' => [
"field1" => "Value 1",
"field2" => 2
],
'2' => [
"field1" => "Value 2",
"field2" => 5
],
'3' => [
"field1" => "Value 3",
"field2" => 3
]
];
$grid2 = [
'1' => [
"field1" => "Value 1",
"field2" => 2
],
'2' => [
"field1" => "Value 2",
"field2" => 5
],
'3' => [
"field1" => "Value 3",
"field2" => 3
],
'4' => [
"field1" => "Value 3",
"field2" => 8
]
];
$this->assertEquals(3, PMFTotalCalculation($grid1, 'field2', 'median'));
$this->assertEquals(4, PMFTotalCalculation($grid2, 'field2', 'median'));
}
/**
* This tests if the "PMFTotalCalculation" execute correctly the minimum
* @test
*/
public function it_must_return_the_minimum_of_the_method()
{
$grid = [
'1' => [
"field1" => "Value 1",
"field2" => 5
],
'2' => [
"field1" => "Value 2",
"field2" => 2
],
'3' => [
"field1" => "Value 3",
"field2" => 3
]
];
$this->assertEquals(2, PMFTotalCalculation($grid, 'field2', 'minimum'));
}
/**
* This tests if the "PMFTotalCalculation" execute correctly the maximum
* @test
*/
public function it_must_return_the_maximum_of_the_method()
{
$grid = [
'1' => [
"field1" => "Value 1",
"field2" => 2
],
'2' => [
"field1" => "Value 2",
"field2" => 5
],
'3' => [
"field1" => "Value 3",
"field2" => 3
]
];
$this->assertEquals(5, PMFTotalCalculation($grid, 'field2', 'maximum'));
}
/**
* This tests if the "PMFTotalCalculation" execute correctly the standardDeviation
* @test
*/
public function it_must_return_the_standardDeviation_of_the_method()
{
$grid = [
'1' => [
"field1" => "Value 1",
"field2" => 25
],
'2' => [
"field1" => "Value 2",
"field2" => 40
],
'3' => [
"field1" => "Value 3",
"field2" => 10
]
];
$this->assertEquals(12.2474487139, PMFTotalCalculation($grid, 'field2', 'standardDeviation'));
}
/**
* This tests if the "PMFTotalCalculation" execute correctly the variance
* @test
*/
public function it_must_return_the_variance_of_the_method()
{
$grid = [
'1' => [
"field1" => "Value 1",
"field2" => 25
],
'2' => [
"field1" => "Value 2",
"field2" => 40
],
'3' => [
"field1" => "Value 3",
"field2" => 10
]
];
$this->assertEquals(150, PMFTotalCalculation($grid, 'field2', 'variance'));
}
/**
* This tests if the "PMFTotalCalculation" execute correctly the percentile
* @test
*/
public function it_must_return_the_percentile_of_the_method()
{
$grid = [
'1' => [
"field1" => "Value 1",
"field2" => 10
],
'2' => [
"field1" => "Value 2",
"field2" => 35
],
'3' => [
"field1" => "Value 3",
"field2" => 5
]
];
$expectedArray = [
"1" => 20,
"2" => 70,
"3" => 10,
];
$this->assertEquals($expectedArray, PMFTotalCalculation($grid, 'field2', 'percentile'));
}
/**
* This tests if the "PMFTotalCalculation" execute correctly the count
* @test
*/
public function it_must_return_the_count_of_the_method()
{
$grid = [
'1' => [
"field1" => "Value 1",
"field2" => 25
],
'2' => [
"field1" => "Value 2",
"field2" => 40
],
'3' => [
"field1" => "Value 3",
"field2" => 10
]
];
$this->assertEquals(3, PMFTotalCalculation($grid, 'field2', 'count'));
}
/**
* This tests if the "PMFTotalCalculation" execute correctly the count distinct
* @test
*/
public function it_must_return_the_count_distinct_of_the_method()
{
$grid = [
'1' => [
"field1" => "Value 1",
"field2" => 20
],
'2' => [
"field1" => "Value 2",
"field2" => 20
],
'3' => [
"field1" => "Value 3",
"field2" => 10
]
];
$this->assertEquals(2, PMFTotalCalculation($grid, 'field2', 'countDistinct'));
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -3,17 +3,32 @@
namespace Tests\unit\workflow\engine\classes\model;
use AdditionalTables;
use App\Jobs\GenerateReportTable;
use Exception;
use G;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Queue;
use Illuminate\Support\Facades\Schema;
use ProcessMaker\BusinessModel\ReportTable;
use ProcessMaker\Model\AdditionalTables as AdditionalTablesModel;
use ProcessMaker\Model\Application;
use ProcessMaker\Model\DbSource;
use ProcessMaker\Model\Delegation;
use ProcessMaker\Model\Process;
use ProcessMaker\Model\Task;
use Tests\TestCase;
class AdditionalTablesTest extends TestCase
{
/**
* Set up method.
*/
public function setUp()
{
parent::setUp();
}
/**
* This tests the creation of a PMTable.
* @test
@@ -198,6 +213,74 @@ class AdditionalTablesTest extends TestCase
$this->assertContains($actual[0], $expected, false);
}
/**
* Check if populate report table is added to job queue.
* @test
* @covers \AdditionalTables::populateReportTable
*/
public function it_should_test_populate_report_table()
{
$proUid = factory(Process::class)->create()->PRO_UID;
$task = factory(Task::class)->create([
'PRO_UID' => $proUid
]);
//local connections
$dbSource = factory(DbSource::class)->create([
'PRO_UID' => $proUid,
'DBS_SERVER' => env('DB_HOST'),
'DBS_DATABASE_NAME' => env('DB_DATABASE'),
'DBS_USERNAME' => env('DB_USERNAME'),
'DBS_PASSWORD' => G::encrypt(env('DB_PASSWORD'), env('DB_DATABASE')) . "_2NnV3ujj3w",
'DBS_PORT' => '3306',
'DBS_CONNECTION_TYPE' => 'NORMAL'
]);
$additionalTable = factory(AdditionalTablesModel::class)->create([
'PRO_UID' => $proUid,
'DBS_UID' => $dbSource->DBS_UID,
]);
$tableName = $additionalTable->ADD_TAB_NAME;
$name = $additionalTable->ADD_TAB_CLASS_NAME;
$this->createSchema($dbSource->DBS_DATABASE_NAME, $tableName, $name, $dbSource->DBS_UID);
//external connection
$dbSource = factory(DbSource::class)->create([
'PRO_UID' => $proUid,
'DBS_SERVER' => config('database.connections.testexternal.host'),
'DBS_DATABASE_NAME' => config('database.connections.testexternal.database'),
'DBS_USERNAME' => config('database.connections.testexternal.username'),
'DBS_PASSWORD' => G::encrypt(config('database.connections.testexternal.password'), config('database.connections.testexternal.database')) . "_2NnV3ujj3w",
'DBS_PORT' => '3306',
'DBS_CONNECTION_TYPE' => 'NORMAL'
]);
$additionalTable = factory(AdditionalTablesModel::class)->create([
'PRO_UID' => $proUid,
'DBS_UID' => $dbSource->DBS_UID,
]);
$tableNameExternal = $additionalTable->ADD_TAB_NAME;
$nameExternal = $additionalTable->ADD_TAB_CLASS_NAME;
$this->createSchema($dbSource->DBS_DATABASE_NAME, $tableNameExternal, $nameExternal, $dbSource->DBS_UID);
$application = factory(Application::class)->create([
'PRO_UID' => $proUid
]);
factory(Delegation::class)->create([
'DEL_THREAD_STATUS' => 'CLOSED',
'APP_NUMBER' => $application->APP_NUMBER,
'TAS_UID' => $task->TAS_UID,
]);
//assertions
Queue::fake();
Queue::assertNothingPushed();
$additionalTables = new AdditionalTables();
$additionalTables->populateReportTable($tableName, 'workflow', 'NORMAL', $proUid, '', $additionalTable->ADD_TAB_UID);
Queue::assertPushed(GenerateReportTable::class);
}
/**
* This gets the content from template file.
* @param string $pathData

Some files were not shown because too many files have changed in this diff Show More