PMCORE-1218

This commit is contained in:
Paula Quispe
2020-10-21 16:56:11 -04:00
parent 888c31615a
commit 53d779a7c7
7 changed files with 348 additions and 7 deletions

View File

@@ -77,6 +77,14 @@ $factory->state(\ProcessMaker\Model\Application::class, 'draft', function (Faker
]; ];
}); });
$factory->state(\ProcessMaker\Model\Application::class, 'completed', function (Faker $faker) {
return [
'APP_NUMBER' => $faker->unique()->numberBetween(1000),
'APP_STATUS_ID' => 3,
'APP_STATUS' => 'COMPLETED'
];
});
$factory->state(\ProcessMaker\Model\Application::class, 'draft_minor_case', function (Faker $faker) { $factory->state(\ProcessMaker\Model\Application::class, 'draft_minor_case', function (Faker $faker) {
$caseNumber = $faker->unique()->numberBetween(1, 1000); $caseNumber = $faker->unique()->numberBetween(1, 1000);
return [ return [

View File

@@ -42,7 +42,11 @@ $factory->define(\ProcessMaker\Model\Delegation::class, function(Faker $faker) {
$factory->state(\ProcessMaker\Model\Delegation::class, 'foreign_keys', function (Faker $faker) { $factory->state(\ProcessMaker\Model\Delegation::class, 'foreign_keys', function (Faker $faker) {
// Create values in the foreign key relations // Create values in the foreign key relations
$user = factory(\ProcessMaker\Model\User::class)->create(); $user = factory(\ProcessMaker\Model\User::class)->create();
$process = factory(\ProcessMaker\Model\Process::class)->create(); $category = factory(\ProcessMaker\Model\ProcessCategory::class)->create();
$process = factory(\ProcessMaker\Model\Process::class)->create([
'PRO_CATEGORY' => $category->CATEGORY_UID,
'CATEGORY_ID' => $category->CATEGORY_ID
]);
$task = factory(\ProcessMaker\Model\Task::class)->create([ $task = factory(\ProcessMaker\Model\Task::class)->create([
'PRO_UID' => $process->PRO_UID, 'PRO_UID' => $process->PRO_UID,
'PRO_ID' => $process->PRO_ID 'PRO_ID' => $process->PRO_ID
@@ -113,3 +117,10 @@ $factory->state(\ProcessMaker\Model\Delegation::class, 'closed', function (Faker
'DEL_FINISH_DATE' => $finishDate 'DEL_FINISH_DATE' => $finishDate
]; ];
}); });
// Create a last delegation
$factory->state(\ProcessMaker\Model\Delegation::class, 'last_thread', function (Faker $faker) {
return [
'DEL_LAST_INDEX' => 1,
];
});

View File

@@ -10,7 +10,6 @@ use ProcessMaker\Model\ProcessCategory;
use ProcessMaker\Model\User; use ProcessMaker\Model\User;
use Tests\TestCase; use Tests\TestCase;
/** /**
* @coversDefaultClass \ProcessMaker\BusinessModel\Cases\AbstractCases * @coversDefaultClass \ProcessMaker\BusinessModel\Cases\AbstractCases
*/ */
@@ -105,7 +104,7 @@ class AbstractCasesTest extends TestCase
$absCases->setInboxStatus($arguments[$index]); $absCases->setInboxStatus($arguments[$index]);
$actual = $absCases->getInboxStatus(); $actual = $absCases->getInboxStatus();
if (empty($arguments[$index])) { if (empty($arguments[$index])) {
$this->assertEquals($arguments[$index], 'ALL'); $this->assertEquals('ALL', $actual);
} else { } else {
$this->assertEquals($arguments[$index], $actual); $this->assertEquals($arguments[$index], $actual);
} }
@@ -126,7 +125,7 @@ class AbstractCasesTest extends TestCase
$absCases->setParticipatedStatus($arguments[$index]); $absCases->setParticipatedStatus($arguments[$index]);
$actual = $absCases->getParticipatedStatus(); $actual = $absCases->getParticipatedStatus();
if (empty($arguments[$index])) { if (empty($arguments[$index])) {
$this->assertEquals($arguments[$index], 'ALL'); $this->assertEquals('ALL', $actual);
} else { } else {
$this->assertEquals($arguments[$index], $actual); $this->assertEquals($arguments[$index], $actual);
} }
@@ -147,7 +146,7 @@ class AbstractCasesTest extends TestCase
$absCases->setRiskStatus($arguments[$index]); $absCases->setRiskStatus($arguments[$index]);
$actual = $absCases->getRiskStatus(); $actual = $absCases->getRiskStatus();
if (empty($arguments[$index])) { if (empty($arguments[$index])) {
$this->assertEquals($arguments[$index], 'ALL'); $this->assertEquals('ALL', $actual);
} else { } else {
$this->assertEquals($arguments[$index], $actual); $this->assertEquals($arguments[$index], $actual);
} }
@@ -168,7 +167,7 @@ class AbstractCasesTest extends TestCase
$absCases->setCaseStatus($arguments[$index]); $absCases->setCaseStatus($arguments[$index]);
$actual = $absCases->getCaseStatus(); $actual = $absCases->getCaseStatus();
if (empty($arguments[$index])) { if (empty($arguments[$index])) {
$this->assertEquals($arguments[$index], 'ALL'); $this->assertEquals('ALL', $actual);
} else { } else {
$this->assertEquals($arguments[$index], $actual); $this->assertEquals($arguments[$index], $actual);
} }
@@ -311,6 +310,13 @@ class AbstractCasesTest extends TestCase
'search' => G::generateUniqueID(), 'search' => G::generateUniqueID(),
'caseLink' => G::generateUniqueID(), 'caseLink' => G::generateUniqueID(),
'appUidCheck' => [G::generateUniqueID()], 'appUidCheck' => [G::generateUniqueID()],
'newestthan' => date('Y-m-d'),
'oldestthan' => date('Y-m-d'),
'sort' => 'APP_DELEGATION.APP_NUMBER',
'dir' => 'DESC',
'paged' => true,
'start' => 5,
'limit' => 10,
]; ];
$absCases->setProperties($properties); $absCases->setProperties($properties);
$actual = $absCases->getCategoryUid(); $actual = $absCases->getCategoryUid();
@@ -321,5 +327,23 @@ class AbstractCasesTest extends TestCase
$this->assertEquals($properties['user'], $actual); $this->assertEquals($properties['user'], $actual);
$actual = $absCases->getValueToSearch(); $actual = $absCases->getValueToSearch();
$this->assertEquals($properties['search'], $actual); $this->assertEquals($properties['search'], $actual);
$actual = $absCases->getCaseUid();
$this->assertEquals($properties['caseLink'], $actual);
$actual = $absCases->getCasesUids();
$this->assertEquals($properties['appUidCheck'], $actual);
$actual = $absCases->getNewestThan();
$this->assertEquals($properties['newestthan'], $actual);
$actual = $absCases->getOldestThan();
$this->assertEquals($properties['oldestthan'], $actual);
$actual = $absCases->getOrderByColumn();
$this->assertEquals($properties['sort'], $actual);
$actual = $absCases->getOrderDirection();
$this->assertEquals($properties['dir'], $actual);
$actual = $absCases->getPaged();
$this->assertEquals($properties['paged'], $actual);
$actual = $absCases->getOffset();
$this->assertEquals($properties['start'], $actual);
$actual = $absCases->getLimit();
$this->assertEquals($properties['limit'], $actual);
} }
} }

View File

@@ -566,7 +566,7 @@ class InboxTest extends TestCase
* @covers \ProcessMaker\BusinessModel\Cases\Inbox::getCounter() * @covers \ProcessMaker\BusinessModel\Cases\Inbox::getCounter()
* @test * @test
*/ */
public function it_should_test_the_counter_for_list_inbox() public function it_should_test_the_counter_for_inbox()
{ {
//Create process //Create process
$process = factory(Process::class)->create(); $process = factory(Process::class)->create();

View File

@@ -0,0 +1,224 @@
<?php
namespace Tests\unit\workflow\engine\src\ProcessMaker\BusinessModel\Cases;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use ProcessMaker\BusinessModel\Cases\Participated;
use ProcessMaker\Model\Application;
use ProcessMaker\Model\Delegation;
use ProcessMaker\Model\Process;
use Tests\TestCase;
/**
* Class InboxTest
*
* @coversDefaultClass \ProcessMaker\BusinessModel\Cases\Participated
*/
class ParticipatedTest extends TestCase
{
use DatabaseTransactions;
/**
* Create participated cases factories
*
* @param string
*
* @return array
*/
public function createParticipated()
{
$delegation = factory(Delegation::class)->states('foreign_keys')->create([
'DEL_THREAD_STATUS' => 'CLOSED',
'DEL_INDEX' => 1,
]);
$delegation2 = factory(Delegation::class)->states('last_thread')->create([
'TAS_ID' => $delegation->TAS_ID,
'DEL_THREAD_STATUS' => 'OPEN',
'USR_UID' => $delegation->USR_UID,
'USR_ID' => $delegation->USR_ID,
'PRO_ID' => $delegation->PRO_ID,
'DEL_INDEX' => 2,
]);
return $delegation2;
}
/**
* It tests the getData method without filters
*
* @covers \ProcessMaker\BusinessModel\Cases\Participated::getData()
* @test
*/
public function it_should_test_get_data_method_without_filters()
{
// Create factories related to the participated cases
$cases = $this->createParticipated();
// Create new Participated object
$participated = new Participated();
// Set the user UID
$participated->setUserUid($cases->USR_UID);
// Set the user ID
$participated->setUserId($cases->USR_ID);
// Set OrderBYColumn value
$participated->setOrderByColumn('APP_DELEGATION.APP_NUMBER');
// Call to getData method
$res = $participated->getData();
// This assert that the expected numbers of results are returned
$this->assertEquals(1, count($res));
}
/**
* It tests the getData method with process
*
* @covers \ProcessMaker\BusinessModel\Cases\Participated::getData()
* @test
*/
public function it_should_test_get_data_method_with_specific_process()
{
// Create factories related to the participated cases
$cases = $this->createParticipated();
// Create new Participated object
$participated = new Participated();
// Set the user UID
$participated->setUserUid($cases->USR_UID);
// Set the user ID
$participated->setUserId($cases->USR_ID);
// Set the process ID
$participated->setProcessId($cases->PRO_ID);
// Set OrderBYColumn value
$participated->setOrderByColumn('APP_DELEGATION.APP_NUMBER');
// Call to getData method
$res = $participated->getData();
// This assert that the expected numbers of results are returned
$this->assertEquals(1, count($res));
}
/**
* It tests the getData method with process category
*
* @covers \ProcessMaker\BusinessModel\Cases\Participated::getData()
* @test
*/
public function it_should_test_get_data_method_with_specific_process_category()
{
// Create factories related to the participated cases
$cases = $this->createParticipated();
$process = Process::query()->where('PRO_ID', $cases->PRO_ID)->get()->toArray();
$process = head($process);
// Create new Participated object
$participated = new Participated();
// Set the user UID
$participated->setUserUid($cases->USR_UID);
// Set the user ID
$participated->setUserId($cases->USR_ID);
// Set the process ID
$participated->setProcessId($cases->PRO_ID);
// Set the category
$participated->setCategoryUid($process['PRO_CATEGORY']);
// Set OrderBYColumn value
$participated->setOrderByColumn('APP_DELEGATION.APP_NUMBER');
// Call to getData method
$res = $participated->getData();
// This assert that the expected numbers of results are returned
$this->assertEquals(1, count($res));
}
/**
* It tests the getData method with specific TO_DO status
*
* @covers \ProcessMaker\BusinessModel\Cases\Participated::getData()
* @test
*/
public function it_should_test_get_data_method_with_case_to_do()
{
// Create factories related to the participated cases
$cases = $this->createParticipated();
// Create new Participated object
$participated = new Participated();
// Set the user UID
$participated->setUserUid($cases->USR_UID);
// Set the user ID
$participated->setUserId($cases->USR_ID);
// Set the case status
$participated->setCaseStatus('TO_DO');
// Set OrderBYColumn value
$participated->setOrderByColumn('APP_DELEGATION.APP_NUMBER');
// Call to getData method
$res = $participated->getData();
// This assert that the expected numbers of results are returned
$this->assertEquals(1, count($res));
}
/**
* It tests the getData method with specific filter StartedByMe
*
* @covers \ProcessMaker\BusinessModel\Cases\Participated::getData()
* @test
*/
public function it_should_test_get_data_method_started_by_me_filter()
{
// Create factories related to the participated cases
$cases = $this->createParticipated();
// Create new Participated object
$participated = new Participated();
// Set the user UID
$participated->setUserUid($cases->USR_UID);
// Set the user ID
$participated->setUserId($cases->USR_ID);
// Set the filter STARTED
$participated->setParticipatedStatus('STARTED');
// Set OrderBYColumn value
$participated->setOrderByColumn('APP_DELEGATION.APP_NUMBER');
// Call to getData method
$res = $participated->getData();
// This assert that the expected numbers of results are returned
$this->assertEquals(0, count($res));
}
/**
* It tests the getData method with specific filter CompletedByMe
*
* @covers \ProcessMaker\BusinessModel\Cases\Participated::getData()
* @test
*/
public function it_should_test_get_data_method_completed_by_me_filter()
{
// Create factories related to the participated cases
$cases = $this->createParticipated();
// Create new Participated object
$participated = new Participated();
// Set the user UID
$participated->setUserUid($cases->USR_UID);
// Set the user ID
$participated->setUserId($cases->USR_ID);
// Set the filter COMPLETED
$participated->setParticipatedStatus('COMPLETED');
// Set OrderBYColumn value
$participated->setOrderByColumn('APP_DELEGATION.APP_NUMBER');
// Call to getData method
$res = $participated->getData();
// This assert that the expected numbers of results are returned
$this->assertEquals(0, count($res));
}
/**
* It tests the getCounter method
*
* @covers \ProcessMaker\BusinessModel\Cases\Participated::getCounter()
* @test
*/
public function it_should_test_the_counter_for_participated()
{
// Create factories related to the participated cases
$cases = $this->createParticipated();
// Create new Participated object
$participated = new Participated();
// Set the user UID
$participated->setUserUid($cases->USR_UID);
// Set the user ID
$participated->setUserId($cases->USR_ID);
$res = $participated->getCounter();
// Assert the result of getCounter method
$this->assertEquals(1, $res);
}
}

View File

@@ -2,7 +2,79 @@
namespace ProcessMaker\BusinessModel\Cases; namespace ProcessMaker\BusinessModel\Cases;
use ProcessMaker\Model\Application;
use ProcessMaker\Model\Delegation;
class Participated extends AbstractCases class Participated extends AbstractCases
{ {
/**
* Get the data corresponding to Participated
*
* @return array
*/
public function getData()
{
// Start the query for get the cases related to the user
$query = Delegation::query()->select();
// Scope to Participated
$query->participated($this->getUserId());
// Scope to search for an specific process
if (!empty($this->getProcessId())) {
$query->processId($this->getProcessId());
}
// Scope the specific category
$category = $this->getCategoryUid();
if (!empty($category)) {
$query->categoryProcess($category);
}
// Scope the specific case status
$status = $this->getCaseStatus();
if (array_key_exists($status, Application::$app_status_values)) {
$statusId = Application::$app_status_values[$status];
$query->appStatusId($statusId);
}
// Add filter
$filter = $this->getParticipatedStatus();
if (!empty($filter)) {
switch ($filter) {
case 'STARTED':
// Scope that search for the STARTED cases by specific user
$query->caseStarted();
break;
case 'COMPLETED':
// Scope that search for the COMPLETED cases by specific user
$query->caseCompleted();
break;
}
}
// The order by clause
$query->orderBy($this->getOrderByColumn(), $this->getOrderDirection());
// The limit by clause
$query->offset($this->getOffset())->limit($this->getLimit());
//Execute the query
$result = $query->get();
//Return the values as an array format
return $result->values()->toArray();
}
/**
* Get the number of rows corresponding to the Participate
*
* @return int
*/
public function getCounter()
{
$query = Delegation::query()->select();
// Scope that sets the queries for Participated
$query->participated($this->getUserId());
// Return the number of rows
return $query->count();
}
} }

View File

@@ -17,6 +17,8 @@ class Application extends Model
const STATUS_TODO = 2; const STATUS_TODO = 2;
const STATUS_COMPLETED = 3; const STATUS_COMPLETED = 3;
const STATUS_CANCELED = 4; const STATUS_CANCELED = 4;
// Status name and status id
public static $app_status_values = ['DRAFT' => 1, 'TO_DO' => 2, 'COMPLETED' => 3, 'CANCELLED' => 4];
public function delegations() public function delegations()
{ {