diff --git a/tests/unit/workflow/engine/src/ProcessMaker/TaskScheduler/TaskTest.php b/tests/unit/workflow/engine/src/ProcessMaker/TaskScheduler/TaskTest.php index aba457fc9..924a88883 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/TaskScheduler/TaskTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/TaskScheduler/TaskTest.php @@ -194,4 +194,32 @@ class TaskTest extends TestCase Queue::assertPushed(TaskScheduler::class); } } + + /** + * This test verify the calculateAppDuration activity method for synchronous and asynchronous execution. + * @test + * @covers ProcessMaker\TaskScheduler\Task::runTask() + * @covers ProcessMaker\TaskScheduler\Task::calculateAppDuration() + * @dataProvider asynchronousCases + */ + public function it_should_test_calculateAppDuration_method($asynchronous) + { + $task = new Task($asynchronous, ''); + + //assert synchronous for cron file + if ($asynchronous === false) { + ob_start(); + $task->calculateAppDuration(); + $printing = ob_get_clean(); + $this->assertRegExp("/DONE/", $printing); + } + + //assert asynchronous for job process + if ($asynchronous === true) { + Queue::fake(); + Queue::assertNothingPushed(); + $task->calculateAppDuration(); + Queue::assertPushed(TaskScheduler::class); + } + } } diff --git a/workflow/engine/bin/cron_single.php b/workflow/engine/bin/cron_single.php index 5c2e71e4d..d95b12694 100644 --- a/workflow/engine/bin/cron_single.php +++ b/workflow/engine/bin/cron_single.php @@ -301,7 +301,9 @@ try { $task->calculateDuration(); } /*----------------------------------********---------------------------------*/ - calculateAppDuration(); + if (empty($argvx) || strpos($argvx, "calculateapp") !== false) { + $task->calculateAppDuration(); + } /*----------------------------------********---------------------------------*/ executeEvents(); executeScheduledCases(); @@ -440,32 +442,6 @@ function executeCustomCronFunction($pathFile, $className) } } -/*----------------------------------********---------------------------------*/ - -function calculateAppDuration() -{ - global $argvx; - - if ($argvx != "" && strpos($argvx, "calculateapp") === false) { - return false; - } - - setExecutionMessage("Calculating Duration by Application"); - - try { - $oApplication = new Application(); - $oApplication->calculateAppDuration(1); - - setExecutionResultMessage('DONE'); - saveLog('calculateDurationByApp', 'action', 'Calculating Duration by Application'); - } catch (Exception $oError) { - setExecutionResultMessage('WITH ERRORS', 'error'); - eprintln(" '-" . $oError->getMessage(), 'red'); - saveLog('calculateDurationByApp', 'error', 'Error Calculating Duration: ' . $oError->getMessage()); - } -} -/*----------------------------------********---------------------------------*/ - function executeEvents() { global $sLastExecution; diff --git a/workflow/engine/src/ProcessMaker/TaskScheduler/Task.php b/workflow/engine/src/ProcessMaker/TaskScheduler/Task.php index 6ca86611b..ca78813dc 100644 --- a/workflow/engine/src/ProcessMaker/TaskScheduler/Task.php +++ b/workflow/engine/src/ProcessMaker/TaskScheduler/Task.php @@ -2,6 +2,7 @@ namespace ProcessMaker\TaskScheduler; +use Application; use AppDelegation; use App\Jobs\TaskScheduler; use Bootstrap; @@ -228,4 +229,25 @@ class Task }; $this->runTask($job); } + + /** + * This calculate application duration. + */ + public function calculateAppDuration() + { + $job = function() { + $this->setExecutionMessage("Calculating Duration by Application"); + try { + $application = new Application(); + $application->calculateAppDuration(1); + $this->setExecutionResultMessage('DONE'); + $this->saveLog('calculateDurationByApp', 'action', 'Calculating Duration by Application'); + } catch (Exception $e) { + $this->setExecutionResultMessage('WITH ERRORS', 'error'); + eprintln(" '-" . $e->getMessage(), 'red'); + $this->saveLog('calculateDurationByApp', 'error', 'Error Calculating Duration: ' . $e->getMessage()); + } + }; + $this->runTask($job); + } }