244 lines
8.2 KiB
PHP
244 lines
8.2 KiB
PHP
<?php
|
|
|
|
namespace Tests\unit\workflow\engine\classes;
|
|
|
|
use Cases;
|
|
use Derivation;
|
|
use G;
|
|
use Illuminate\Support\Facades\DB;
|
|
use ProcessMaker\Model\Application;
|
|
use ProcessMaker\Model\Delegation;
|
|
use ProcessMaker\Model\Process;
|
|
use ProcessMaker\Model\Route;
|
|
use ProcessMaker\Model\Task;
|
|
use ProcessMaker\Model\TaskUser;
|
|
use ProcessMaker\Model\User;
|
|
use Tests\CreateTestSite;
|
|
use Tests\TestCase;
|
|
|
|
class DerivationTest extends TestCase
|
|
{
|
|
use CreateTestSite;
|
|
|
|
/**
|
|
* Call the setUp parent method
|
|
*/
|
|
public function setUp()
|
|
{
|
|
parent::setUp(); // TODO: Change the autogenerated stub
|
|
|
|
// Truncate the APP_SEQUENCE table
|
|
DB::table('APP_SEQUENCE')->truncate();
|
|
|
|
config(["system.workspace" => "new_site"]);
|
|
$workspace = config("system.workspace");
|
|
$this->createDBFile($workspace);
|
|
}
|
|
|
|
/**
|
|
* Call the tearDown method
|
|
*/
|
|
public function tearDown()
|
|
{
|
|
parent::tearDown(); // TODO: Change the autogenerated stub
|
|
}
|
|
|
|
/**
|
|
* It tests the getSubProcessVariables method with object variables
|
|
*
|
|
* @covers Derivation::getSubProcessVariables()
|
|
* @test
|
|
*/
|
|
public function it_should_test_the_get_sub_process_variables_method_with_object_variables()
|
|
{
|
|
$fields = ['@&var2' => '@&var3'];
|
|
$childCaseData = ['var2' => (object)['Street' => 'test', 'name' => 'Something']];
|
|
$parentCaseData = ['var1' => (object)['Street' => 'test']];
|
|
|
|
$der = new Derivation();
|
|
$res = $der->getSubProcessVariables($fields, $childCaseData, $parentCaseData);
|
|
|
|
$this->assertArrayHasKey('var3', $res);
|
|
$this->assertObjectHasAttribute('Street', $res['var3']);
|
|
$this->assertObjectHasAttribute('name', $res['var3']);
|
|
$this->assertEquals($res['var3'], (object)['Street' => 'test', 'name' => 'Something']);
|
|
}
|
|
|
|
/**
|
|
* It tests the getSubProcessVariables method with origin labels
|
|
*
|
|
* @covers Derivation::getSubProcessVariables()
|
|
* @test
|
|
*/
|
|
public function it_should_test_the_get_sub_process_variables_method_with_origin_labels()
|
|
{
|
|
$fields = ['@&var2' => '@&var3', '@&var2_label' => '@&var3'];
|
|
$childCaseData = [
|
|
'var2' => (object)['Street' => 'test', 'name' => 'Something'],
|
|
'var2_label' => ['Street' => 'test', 'name' => 'Something']
|
|
];
|
|
$parentCaseData = ['var1' => (object)['Street' => 'test']];
|
|
|
|
$der = new Derivation();
|
|
$res = $der->getSubProcessVariables($fields, $childCaseData, $parentCaseData);
|
|
|
|
$this->assertArrayHasKey('var3_label', $res);
|
|
$this->assertEquals($res['var3_label'], ['Street' => 'test', 'name' => 'Something']);
|
|
}
|
|
|
|
/**
|
|
* It tests the getSubProcessVariables method with target labels
|
|
*
|
|
* @covers Derivation::getSubProcessVariables()
|
|
* @test
|
|
*/
|
|
public function it_should_test_the_get_sub_process_variables_method_with_target_labels()
|
|
{
|
|
$fields = ['@&var2' => '@&var3', '@&var2' => '@&var3_label'];
|
|
$childCaseData = ['var2' => (object)['Street' => 'test', 'name' => 'Something']];
|
|
$parentCaseData = ['var1' => (object)['Street' => 'test']];
|
|
|
|
$der = new Derivation();
|
|
$res = $der->getSubProcessVariables($fields, $childCaseData, $parentCaseData);
|
|
|
|
$this->assertArrayHasKey('var3_label', $res);
|
|
$this->assertObjectHasAttribute('Street', $res['var3_label']);
|
|
$this->assertObjectHasAttribute('name', $res['var3_label']);
|
|
$this->assertEquals($res['var3_label'], (object)['Street' => 'test', 'name' => 'Something']);
|
|
}
|
|
|
|
/**
|
|
* It tests the doDerivation method sending variables synchronously
|
|
*
|
|
* @covers Derivation::doDerivation()
|
|
* @test
|
|
*/
|
|
public function it_should_test_the_do_derivation_method_sending_variables_synchronously()
|
|
{
|
|
// Create the models
|
|
$user = factory(User::class)->create();
|
|
$process = factory(Process::class)->create([
|
|
'PRO_CREATE_USER' => $user->USR_UID
|
|
]);
|
|
$task = factory(Task::class)->create([
|
|
'PRO_UID' => $process->PRO_UID,
|
|
]);
|
|
$application = factory(Application::class)->create();
|
|
$appDelegation = factory(Delegation::class)->create();
|
|
|
|
// Create the parameters
|
|
$currentDelegation = [
|
|
'APP_UID' => $application->APP_UID,
|
|
'DEL_INDEX' => $appDelegation->DEL_INDEX,
|
|
'ROU_TYPE' => ''
|
|
];
|
|
$nextDel = [
|
|
'TAS_UID' => $task->TAS_UID,
|
|
'USR_UID' => $user->USR_UID,
|
|
'DEL_PRIORITY' => $appDelegation->DEL_PRIORITY,
|
|
'TAS_ASSIGN_TYPE' => $task->TAS_ASSIGN_TYPE,
|
|
'TAS_ID' => $task->TAS_ID
|
|
];
|
|
$appFields = [
|
|
'APP_NUMBER' => $application->APP_NUMBER,
|
|
'DEL_THREAD' => $appDelegation->DEL_THREAD,
|
|
'PRO_UID' => $process->PRO_UID,
|
|
'PRO_ID' => $process->PRO_ID,
|
|
'APP_DATA' => [],
|
|
'APP_TITLE' => $application->APP_TITLE,
|
|
'APP_UID' => $application->APP_UID
|
|
];
|
|
$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_TYPE' => '',
|
|
'TAS_UID' => $task->TAS_UID,
|
|
'USR_UID' => $user->USR_UID,
|
|
];
|
|
|
|
// Create the Derivation object
|
|
$der = new Derivation();
|
|
$der->case = new Cases;
|
|
|
|
// Call the doDerivation method
|
|
$res = $der->doDerivation($currentDelegation, $nextDel, $appFields, $sp);
|
|
|
|
// Assert the new delegation index is 1
|
|
$this->assertEquals(1, $res);
|
|
}
|
|
|
|
/**
|
|
* It tests the doDerivation method sending variables asynchronously
|
|
*
|
|
* @covers Derivation::doDerivation()
|
|
* @test
|
|
*/
|
|
public function it_should_test_the_do_derivation_method_sending_variables_asynchronously()
|
|
{
|
|
// Create the models
|
|
$user = factory(User::class)->create();
|
|
$process = factory(Process::class)->create([
|
|
'PRO_CREATE_USER' => $user->USR_UID
|
|
]);
|
|
$task = factory(Task::class)->create([
|
|
'PRO_UID' => $process->PRO_UID,
|
|
'TAS_USER' => $user->USR_UID
|
|
]);
|
|
factory(TaskUser::class)->create([
|
|
'TAS_UID' => $task->TAS_UID,
|
|
'USR_UID' => $user->USR_UID,
|
|
]);
|
|
$application = factory(Application::class)->create();
|
|
$appDelegation = factory(Delegation::class)->create([
|
|
'TAS_UID' => $task->TAS_UID
|
|
]);
|
|
factory(Route::class)->create([
|
|
'TAS_UID' => $task->TAS_UID,
|
|
'ROU_NEXT_TASK' => $task->TAS_UID,
|
|
'PRO_UID' => $process->PRO_UID
|
|
]);
|
|
|
|
// Create the parameters
|
|
$currentDelegation = [
|
|
'APP_UID' => $application->APP_UID,
|
|
'DEL_INDEX' => $appDelegation->DEL_INDEX,
|
|
'ROU_TYPE' => '',
|
|
'TAS_UID' => $task->TAS_UID
|
|
];
|
|
$nextDel = [
|
|
'TAS_UID' => $task->TAS_UID,
|
|
'USR_UID' => $user->USR_UID,
|
|
'DEL_PRIORITY' => $appDelegation->DEL_PRIORITY,
|
|
'TAS_ASSIGN_TYPE' => $task->TAS_ASSIGN_TYPE,
|
|
'TAS_ID' => $task->TAS_ID
|
|
];
|
|
$appFields = [
|
|
'APP_NUMBER' => $application->APP_NUMBER,
|
|
'DEL_THREAD' => $appDelegation->DEL_THREAD,
|
|
'PRO_UID' => $process->PRO_UID,
|
|
'PRO_ID' => $process->PRO_ID,
|
|
'APP_DATA' => [],
|
|
'APP_TITLE' => $application->APP_TITLE,
|
|
'APP_UID' => $application->APP_UID
|
|
];
|
|
$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_TYPE' => '',
|
|
'TAS_UID' => $task->TAS_UID,
|
|
'USR_UID' => $user->USR_UID,
|
|
];
|
|
|
|
// Create the Derivation object
|
|
$der = new Derivation();
|
|
$der->case = new Cases;
|
|
|
|
// Call the doDerivation method
|
|
$res = $der->doDerivation($currentDelegation, $nextDel, $appFields, $sp);
|
|
|
|
// Assert the new delegation index is 1
|
|
$this->assertEquals(1, $res);
|
|
}
|
|
} |