This commit is contained in:
Andrea Adamczyk
2019-09-10 15:29:00 -04:00
parent 1e4f663a53
commit 7a656e054d
4 changed files with 212 additions and 43 deletions

View File

@@ -0,0 +1,16 @@
<?php
/**
* Model factory for a APP_THREAD
*/
use Faker\Generator as Faker;
$factory->define(\ProcessMaker\Model\AppThread::class, function (Faker $faker) {
return [
'APP_UID' => G::generateUniqueID(),
'APP_THREAD_INDEX' => $faker->unique()->numberBetween(1, 2000),
'APP_THREAD_PARENT' => $faker->unique()->numberBetween(1, 2000),
'APP_THREAD_STATUS' => $faker->randomElement(['OPEN', 'CLOSED']),
'DEL_INDEX' => $faker->unique()->numberBetween(1, 2000)
];
});

View File

@@ -4,6 +4,8 @@ use App\Jobs\EmailEvent;
use Faker\Factory; use Faker\Factory;
use Illuminate\Support\Facades\Queue; use Illuminate\Support\Facades\Queue;
use ProcessMaker\Model\Application; use ProcessMaker\Model\Application;
use ProcessMaker\Model\AppThread;
use ProcessMaker\Model\Delegation;
use ProcessMaker\Model\EmailServer; use ProcessMaker\Model\EmailServer;
use ProcessMaker\Model\Process; use ProcessMaker\Model\Process;
use ProcessMaker\Model\Task; use ProcessMaker\Model\Task;
@@ -12,7 +14,6 @@ use Tests\TestCase;
class WsBaseTest extends TestCase class WsBaseTest extends TestCase
{ {
/** /**
* Constructor of the class. * Constructor of the class.
* *
@@ -32,6 +33,9 @@ class WsBaseTest extends TestCase
protected function setUp() protected function setUp()
{ {
parent::setUp(); parent::setUp();
Application::query()->truncate();
AppThread::query()->truncate();
Delegation::query()->truncate();
} }
/** /**
@@ -466,4 +470,146 @@ class WsBaseTest extends TestCase
$wsBase->sendMessage($appUid, $from, $to, $cc, $bcc, $subject, $templateName, $appFields, $attachment, $showMessage, $delIndex, $config, $gmail, $appMsgType); $wsBase->sendMessage($appUid, $from, $to, $cc, $bcc, $subject, $templateName, $appFields, $attachment, $showMessage, $delIndex, $config, $gmail, $appMsgType);
Queue::assertNotPushed(EmailEvent::class); Queue::assertNotPushed(EmailEvent::class);
} }
/**
* Test that the casesList method returns the case title value
*
* @test
* @covers \WsBase::caseList
*/
public function it_should_test_that_the_cases_list_method_returns_the_case_title()
{
//Create the user factory
$user = factory(User::class)->create();
//Create the application factory
$application1 = factory(Application::class)->create(
[
'APP_STATUS' => 'TO_DO',
'APP_TITLE' => 'Title1'
]
);
$application2 = factory(Application::class)->create(
[
'APP_STATUS' => 'DRAFT',
'APP_TITLE' => 'Title2'
]
);
//Create the delegation factory
$delegation1 = factory(Delegation::class)->create(
[
'USR_UID' => $user->USR_UID,
'DEL_THREAD_STATUS' => 'OPEN',
'DEL_FINISH_DATE' => null,
'APP_NUMBER' => $application1->APP_NUMBER
]
);
$delegation2 = factory(Delegation::class)->create(
[
'USR_UID' => $user->USR_UID,
'DEL_THREAD_STATUS' => 'OPEN',
'DEL_FINISH_DATE' => null,
'APP_NUMBER' => $application2->APP_NUMBER
]
);
//Create app thread factory
factory(AppThread::class)->create(
[
'APP_THREAD_STATUS' => 'OPEN',
'APP_UID' => $delegation1->APP_UID
]
);
factory(AppThread::class)->create(
[
'APP_THREAD_STATUS' => 'OPEN',
'APP_UID' => $delegation2->APP_UID
]
);
//Instance the object
$wsBase = new WsBase();
//Call the caseList method
$res = $wsBase->caseList($user->USR_UID);
//Assert the result has 2 rows
$this->assertCount(2, $res);
//Assert the status of the case
$this->assertTrue('TO_DO' || 'DRAFT' == $res[0]['status']);
$this->assertTrue('TO_DO' || 'DRAFT' == $res[1]['status']);
//Assert the case title is returned
$this->assertTrue($application1->APP_TITLE || $application2->APP_TITLE == $res[0]['name']);
$this->assertTrue($application1->APP_TITLE || $application2->APP_TITLE == $res[1]['name']);
}
/**
* Test the casesList method when the result is empty
*
* @test
* @covers \WsBase::caseList
*/
public function it_should_test_the_cases_list_method_when_there_are_no_results()
{
//Create the user factory
$user1 = factory(User::class)->create();
$user2 = factory(User::class)->create();
//Create the application factory
$application1 = factory(Application::class)->create(
[
'APP_STATUS' => 'TO_DO',
'APP_TITLE' => 'Title1'
]
);
$application2 = factory(Application::class)->create(
[
'APP_STATUS' => 'DRAFT',
'APP_TITLE' => 'Title2'
]
);
//Create the delegation factory
$delegation1 = factory(Delegation::class)->create(
[
'USR_UID' => $user1->USR_UID,
'DEL_THREAD_STATUS' => 'OPEN',
'DEL_FINISH_DATE' => null,
'APP_NUMBER' => $application1->APP_NUMBER
]
);
$delegation2 = factory(Delegation::class)->create(
[
'USR_UID' => $user1->USR_UID,
'DEL_THREAD_STATUS' => 'OPEN',
'DEL_FINISH_DATE' => null,
'APP_NUMBER' => $application2->APP_NUMBER
]
);
//Create app thread factory
factory(AppThread::class)->create(
[
'APP_THREAD_STATUS' => 'OPEN',
'APP_UID' => $delegation1->APP_UID
]
);
factory(AppThread::class)->create(
[
'APP_THREAD_STATUS' => 'OPEN',
'APP_UID' => $delegation2->APP_UID
]
);
//Instance the object
$wsBase = new WsBase();
//Call the caseList method
$res = $wsBase->caseList($user2->USR_UID);
//Assert the result his empty
$this->assertEmpty($res);
}
} }

View File

@@ -6,6 +6,7 @@ use ProcessMaker\ChangeLog\ChangeLog;
/*----------------------------------********---------------------------------*/ /*----------------------------------********---------------------------------*/
use ProcessMaker\Core\JobsManager; use ProcessMaker\Core\JobsManager;
use ProcessMaker\Core\System; use ProcessMaker\Core\System;
use ProcessMaker\Model\Delegation;
use ProcessMaker\Util\WsMessageResponse; use ProcessMaker\Util\WsMessageResponse;
class WsBase class WsBase
@@ -477,54 +478,48 @@ class WsBase
return $arrayData; return $arrayData;
} }
} else { } else {
$arrayData = []; $data = [];
$criteria = new Criteria("workflow"); $selectedColumns = [
'APP_DELEGATION.APP_UID',
'APP_DELEGATION.DEL_INDEX',
'APP_DELEGATION.APP_NUMBER',
'APPLICATION.APP_STATUS',
'APPLICATION.APP_TITLE',
'APP_DELEGATION.PRO_UID'
];
$criteria->addSelectColumn(AppCacheViewPeer::APP_UID); $query = Delegation::query()->select($selectedColumns);
$criteria->addSelectColumn(AppCacheViewPeer::DEL_INDEX); $query->join('APPLICATION', function ($join) {
$criteria->addSelectColumn(AppCacheViewPeer::APP_NUMBER); $join->on('APP_DELEGATION.APP_NUMBER', '=', 'APPLICATION.APP_NUMBER');
$criteria->addSelectColumn(AppCacheViewPeer::APP_STATUS); });
$criteria->addSelectColumn(AppCacheViewPeer::PRO_UID); $query->join('APP_THREAD', function ($join) {
$join->on('APP_THREAD.APP_UID', '=', 'APP_DELEGATION.APP_UID');
});
$query->where('APP_DELEGATION.USR_UID', $userUid);
$query->whereNested(function ($query) {
$query->where('APPLICATION.APP_STATUS', 'TO_DO');
$query->orWhere('APPLICATION.APP_STATUS', 'DRAFT');
});
$query->whereNull('APP_DELEGATION.DEL_FINISH_DATE');
$query->where('APP_DELEGATION.DEL_THREAD_STATUS', 'OPEN');
$query->where('APP_THREAD.APP_THREAD_STATUS', 'OPEN');
$query->orderBy('APP_DELEGATION.APP_NUMBER', 'DESC');
$criteria->add(AppCacheViewPeer::USR_UID, $userUid); $result = $query->get();
$data2 = $result->values()->toArray();
$aux = [];
$criteria->add( foreach ($data2 as $value) {
//ToDo - getToDo() $aux['guid'] = $value['APP_UID'];
$criteria->getNewCriterion(AppCacheViewPeer::APP_STATUS, "TO_DO", CRITERIA::EQUAL)->addAnd( $aux['name'] = $value['APP_TITLE'];
$criteria->getNewCriterion(AppCacheViewPeer::DEL_FINISH_DATE, null, Criteria::ISNULL) $aux['status'] = $value['APP_STATUS'];
)->addAnd( $aux['delIndex'] = $value['DEL_INDEX'];
$criteria->getNewCriterion(AppCacheViewPeer::APP_THREAD_STATUS, "OPEN") $aux['processId'] = $value['PRO_UID'];
)->addAnd( array_push($data, $aux);
$criteria->getNewCriterion(AppCacheViewPeer::DEL_THREAD_STATUS, "OPEN")
)
)->addOr(
//Draft - getDraft()
$criteria->getNewCriterion(AppCacheViewPeer::APP_STATUS, "DRAFT", CRITERIA::EQUAL)->addAnd(
$criteria->getNewCriterion(AppCacheViewPeer::APP_THREAD_STATUS, "OPEN")
)->addAnd(
$criteria->getNewCriterion(AppCacheViewPeer::DEL_THREAD_STATUS, "OPEN")
)
);
$criteria->addDescendingOrderByColumn(AppCacheViewPeer::APP_NUMBER);
$rsCriteria = AppCacheViewPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
$arrayData[] = array(
"guid" => $row["APP_UID"],
"name" => $row["APP_NUMBER"],
"status" => $row["APP_STATUS"],
"delIndex" => $row["DEL_INDEX"],
"processId" => $row["PRO_UID"]
);
} }
return $arrayData; return $data;
} }
} catch (Exception $e) { } catch (Exception $e) {
$arrayData = []; $arrayData = [];

View File

@@ -0,0 +1,12 @@
<?php
namespace ProcessMaker\Model;
use Illuminate\Database\Eloquent\Model;
class AppThread extends Model
{
protected $table = 'APP_THREAD';
// We do not have create/update timestamps for this table
public $timestamps = false;
}