From 6de0b830a9f696ba3a775c88d1f54a250ea00542 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Fri, 28 Jun 2019 14:24:59 -0400 Subject: [PATCH] PMC-913 All existing Unit Tests are running correctly? --- phpunit.xml | 2 +- tests/Feature/DBQueryTest.php | 55 +++++++++++------ tests/WorkflowTestCase.php | 29 ++++++--- tests/bootstrap.php | 23 ++++++-- .../engine/classes/ReportTablesTest.php | 4 +- .../ProcessMaker/BusinessModel/GroupTest.php | 7 --- .../BusinessModel/LanguageTest.php | 43 ++++++++++---- .../ProcessMaker/BusinessModel/SkinsTest.php | 20 +++---- .../BusinessModel/WebEntryEventTest.php | 59 ++++++++++++++----- workflow/engine/classes/model/Process.php | 8 ++- 10 files changed, 166 insertions(+), 84 deletions(-) diff --git a/phpunit.xml b/phpunit.xml index 5ec9092ee..a5a5f121f 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -15,7 +15,7 @@ ./tests/workflow/engine/src/ - ./tests/Unit + ./tests/unit ./tests/Performance/ diff --git a/tests/Feature/DBQueryTest.php b/tests/Feature/DBQueryTest.php index f851feafb..1af3c613d 100644 --- a/tests/Feature/DBQueryTest.php +++ b/tests/Feature/DBQueryTest.php @@ -1,43 +1,56 @@ assertCount(1, $results); // Note, we check index 1 because results from executeQuery are 1 indexed, not 0 indexed. - $this->assertArraySubset([ + $expected = [ 'USR_UID' => '00000000000000000000000000000001', 'USR_USERNAME' => 'admin' - ], $results[1]); + ]; + $this->assertArraySubset($expected, $results[1]); } + /** + * Verify the existence of the admin user. + * @test + */ public function testDBFacadeQuery() { - $record = DB::table('USERS')->where([ - 'USR_UID' => '00000000000000000000000000000001' - ])->first(); + $record = DB::table('USERS')->where('USR_UID', '=', '00000000000000000000000000000001')->first(); $this->assertEquals('admin', $record->USR_USERNAME); } + /** + * Verify the execution of a SQL statement common to an MySQL external database. + * @test + */ public function testStandardExecuteQueryWithExternalMySQLDatabase() { // Our test external database is created in our tests/bootstrap.php file @@ -45,12 +58,12 @@ class DBQueryTest extends TestCase $process = factory(Process::class)->create(); // Let's create an external DB to ourselves $externalDB = factory(DbSource::class)->create([ - 'DBS_SERVER' => 'localhost', + 'DBS_SERVER' => config('database.connections.testexternal.host'), 'DBS_PORT' => '3306', - 'DBS_USERNAME' => env('DB_USERNAME'), + 'DBS_USERNAME' => config('database.connections.testexternal.username'), // Remember, we have to do some encryption here @see DbSourceFactory.php - 'DBS_PASSWORD' => \G::encrypt( env('DB_PASSWORD'), 'testexternal') . "_2NnV3ujj3w", - 'DBS_DATABASE_NAME' => 'testexternal', + 'DBS_PASSWORD' => \G::encrypt(env('DB_PASSWORD'), config('database.connections.testexternal.database')) . "_2NnV3ujj3w", + 'DBS_DATABASE_NAME' => config('database.connections.testexternal.database'), 'PRO_UID' => $process->PRO_UID ]); @@ -65,9 +78,13 @@ class DBQueryTest extends TestCase $this->assertEquals('testvalue', $results[1]['value']); } + /** + * Verify the execution of a SQL statement common to an MSSQL external database. + * @test + */ public function testStandardExecuteQueryWithExternalMSSqlDatabase() { - if(!env('RUN_MSSQL_TESTS')) { + if (!env('RUN_MSSQL_TESTS')) { $this->markTestSkipped('MSSQL Related Test Skipped'); } // Our test external database is created in our tests/bootstrap.php file @@ -80,8 +97,8 @@ class DBQueryTest extends TestCase 'DBS_TYPE' => 'mssql', 'DBS_USERNAME' => env('MSSQL_USERNAME'), // Remember, we have to do some encryption here @see DbSourceFactory.php - 'DBS_PASSWORD' => \G::encrypt( env('MSSQL_PASSWORD'), 'testexternal') . "_2NnV3ujj3w", - 'DBS_DATABASE_NAME' => 'testexternal', + 'DBS_PASSWORD' => \G::encrypt(env('MSSQL_PASSWORD'), env('MSSQL_DATABASE')) . "_2NnV3ujj3w", + 'DBS_DATABASE_NAME' => env('MSSQL_DATABASE'), 'PRO_UID' => $process->PRO_UID ]); // Now set our process ID @@ -94,4 +111,4 @@ class DBQueryTest extends TestCase $this->assertCount(1, $results); $this->assertEquals('testvalue', $results[1]['value']); } -} \ No newline at end of file +} diff --git a/tests/WorkflowTestCase.php b/tests/WorkflowTestCase.php index 6e7969149..a2b90118d 100644 --- a/tests/WorkflowTestCase.php +++ b/tests/WorkflowTestCase.php @@ -1,26 +1,37 @@ host = env("DB_HOST"); + $this->user = env("DB_USERNAME"); + $this->password = env("DB_PASSWORD"); + $this->database = env("DB_DATABASE"); //Install Database - $pdo0 = new PDO("mysql:host=".DB_HOST, DB_USER, DB_PASS); - $pdo0->query('DROP DATABASE IF EXISTS '.DB_NAME); - $pdo0->query('CREATE DATABASE '.DB_NAME); - $pdo = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, - DB_PASS); + $pdo0 = new PDO("mysql:host=".$this->host, $this->user, $this->password); + $pdo0->query('DROP DATABASE IF EXISTS '.$this->database); + $pdo0->query('CREATE DATABASE '.$this->database); + $pdo = new PDO("mysql:host=".$this->host.";dbname=".$this->database, $this->user, + $this->password); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); $pdo->exec(file_get_contents(PATH_CORE.'data/mysql/schema.sql')); $pdo->exec(file_get_contents(PATH_RBAC_CORE.'data/mysql/schema.sql')); @@ -39,8 +50,8 @@ class WorkflowTestCase extends TestCase protected function dropDB() { //Install Database - $pdo0 = new PDO("mysql:host=".DB_HOST, DB_USER, DB_PASS); - $pdo0->query('DROP DATABASE IF EXISTS '.DB_NAME); + $pdo0 = new PDO("mysql:host=".$this->host, $this->user, $this->password); + $pdo0->query('DROP DATABASE IF EXISTS '.$this->database); } /** diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 895c470da..fa0608493 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -35,6 +35,11 @@ define('PMTABLE_KEY', 'pmtable'); define('PATH_WORKFLOW_MYSQL_DATA', PATH_TRUNK . '/workflow/engine/data/mysql/'); define('PATH_RBAC_MYSQL_DATA', PATH_TRUNK . '/rbac/engine/data/mysql/'); define('PATH_LANGUAGECONT', PATH_DATA . '/META-INF/'); +define('DB_ADAPTER', 'mysql'); +define('PATH_RBAC_HOME', PATH_TRUNK . '/rbac/'); +define('PATH_RBAC', PATH_RBAC_HOME . 'engine/classes/'); +define("PATH_CUSTOM_SKINS", PATH_DATA . "skins/"); +define("PATH_TPL", PATH_CORE . "templates/"); //timezone $_SESSION['__SYSTEM_UTC_TIME_ZONE__'] = (int) (env('MAIN_SYSTEM_UTC_TIME_ZONE', 'workflow')) == 1; @@ -53,11 +58,22 @@ ini_set('date.timezone', TIME_ZONE); //Set Time Zone date_default_timezone_set(TIME_ZONE); config(['app.timezone' => TIME_ZONE]); +//configuration values +config([ + "system.workspace" => SYS_SYS +]); +define("PATH_DATA_SITE", PATH_DATA . "sites/" . config("system.workspace") . "/"); +define("PATH_DYNAFORM", PATH_DATA_SITE . "xmlForms/"); +define("PATH_DATA_MAILTEMPLATES", PATH_DATA_SITE . "mailTemplates/"); +define("PATH_DATA_PUBLIC", PATH_DATA_SITE . "public/"); + +G::defineConstants(); + // Setup our testexternal database config(['database.connections.testexternal' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), - 'database' => env('DB_DATABASE', 'testexternal'), + 'database' => 'testexternal', 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', 'password'), 'unix_socket' => env('DB_SOCKET', ''), @@ -68,11 +84,6 @@ config(['database.connections.testexternal' => [ 'engine' => null ]]); -//configuration values -config([ - "system.workspace" => SYS_SYS -]); - // Now, drop all test tables and repopulate with schema Schema::connection('testexternal')->dropIfExists('test'); diff --git a/tests/unit/workflow/engine/classes/ReportTablesTest.php b/tests/unit/workflow/engine/classes/ReportTablesTest.php index c48ed8191..2dc0b4f3d 100644 --- a/tests/unit/workflow/engine/classes/ReportTablesTest.php +++ b/tests/unit/workflow/engine/classes/ReportTablesTest.php @@ -9,13 +9,13 @@ use ProcessMaker\Model\Task; use ProcessMaker\Model\User; use Tests\TestCase; -class PmDynaformTest extends TestCase +class ReportTablesTest extends TestCase { use DatabaseTransactions; /** - * Constructor of the class. + * Sets up the unit tests. */ protected function setUp() { diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/GroupTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/GroupTest.php index d502ce5a1..38311b826 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/GroupTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/GroupTest.php @@ -37,13 +37,6 @@ class GroupTest extends TestCase */ protected function setUp() { - parent::setUp(); - - //Move section - global $RBAC; - $RBAC->initRBAC(); - $RBAC->loadUserRolePermission($RBAC->sSystem, '00000000000000000000000000000001'); - $this->setInstanceGroup(new Group()); } diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php index 625a06a72..4e6bb14f9 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php @@ -1,11 +1,15 @@ setupDB(); + $this->getBaseUri(); $this->object = new Language; - $this->translationEnv = PATH_DATA."META-INF".PATH_SEP."translations.env"; + $this->translationEnv = PATH_DATA . "META-INF" . PATH_SEP . "translations.env"; file_exists($this->translationEnv) ? unlink($this->translationEnv) : false; } /** - * Tears down the unit tests. + * Get base uri for rest applications. + * @return string */ - protected function tearDown() + private function getBaseUri() { - $this->dropDB(); + $_SERVER = $this->getServerInformation(); + $baseUri = System::getServerProtocolHost(); + + return $baseUri; + } + + /** + * Get server information. + * @return object + */ + private function getServerInformation() + { + $pathData = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP . ".server_info"; + $content = file_get_contents($pathData); + $serverInfo = unserialize($content); + + return $serverInfo; } /** @@ -54,14 +75,14 @@ class LanguageTest extends \WorkflowTestCase */ public function testGetLanguageListInstalled() { - $this->installLanguage('es', __DIR__.'/processmaker.es.po'); + $this->installLanguage('es', __DIR__ . '/processmaker.es.po'); $list = $this->object->getLanguageList(); $this->assertCount(2, $list); $this->assertEquals('en', $list[0]['LANG_ID']); $this->assertEquals('English', $list[0]['LANG_NAME']); $this->assertEquals('es-ES', $list[1]['LANG_ID']); $this->assertEquals('Spanish (Spain)', $list[1]['LANG_NAME']); - $this->uninstallLanguage('es', __DIR__.'/processmaker.es.po'); + $this->uninstallLanguage('es', __DIR__ . '/processmaker.es.po'); $list2 = $this->object->getLanguageList(); $this->assertCount(1, $list2); } @@ -74,7 +95,7 @@ class LanguageTest extends \WorkflowTestCase */ private function installLanguage($lanId, $filename) { - copy($filename, PATH_CORE.'content/translations/'.basename($filename)); + copy($filename, PATH_CORE . 'content/translations/' . basename($filename)); $language = \LanguagePeer::retrieveByPK($lanId); $language->setLanEnabled(1); $language->save(); @@ -89,7 +110,7 @@ class LanguageTest extends \WorkflowTestCase */ private function uninstallLanguage($lanId, $filename) { - unlink(PATH_CORE.'content/translations/'.basename($filename)); + unlink(PATH_CORE . 'content/translations/' . basename($filename)); $language = \LanguagePeer::retrieveByPK($lanId); $language->setLanEnabled(0); $language->save(); diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/SkinsTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/SkinsTest.php index 2e95aa342..d4fb18758 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/SkinsTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/SkinsTest.php @@ -2,10 +2,13 @@ namespace ProcessMaker\BusinessModel; +use G; +use Tests\TestCase; + /** * Skins Tests */ -class SkinsTest extends \WorkflowTestCase +class SkinsTest extends TestCase { /** * @var Skins @@ -17,9 +20,7 @@ class SkinsTest extends \WorkflowTestCase */ protected function setUp() { - $this->cleanShared(); - $this->setupDB(); - $this->object = new Skins; + $this->object = new Skins(); } /** @@ -27,8 +28,8 @@ class SkinsTest extends \WorkflowTestCase */ protected function tearDown() { - $this->cleanShared(); - $this->dropDB(); + G::rm_dir(PATH_DATA . 'skins'); + mkdir(PATH_DATA . 'skins'); } /** @@ -61,12 +62,7 @@ class SkinsTest extends \WorkflowTestCase { $this->object->createSkin('test', 'test'); $this->object->createSkin( - 'test2', - 'test2', - 'Second skin', - 'ProcessMaker Team', - 'current', - 'neoclassic' + 'test2', 'test2', 'Second skin', 'ProcessMaker Team', 'current', 'neoclassic' ); $skins = $this->object->getSkins(); $this->assertCount(4, $skins); diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEventTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEventTest.php index a4f025cad..6d1e55623 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEventTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEventTest.php @@ -1,13 +1,17 @@ markTestIncomplete(); + + $this->getBaseUri(); $this->setupDB(); - $this->processUid = $this->import(__DIR__.'/WebEntryEventTest.pmx'); - $this->processUid2 = $this->import(__DIR__.'/WebEntryEventTest2.pmx'); - $this->object = new WebEntryEvent; - $this->setTranslation('ID_INVALID_VALUE_CAN_NOT_BE_EMPTY', - 'ID_INVALID_VALUE_CAN_NOT_BE_EMPTY({0})'); - $this->setTranslation('ID_UNDEFINED_VALUE_IS_REQUIRED', - 'ID_UNDEFINED_VALUE_IS_REQUIRED({0})'); - $this->setTranslation('ID_WEB_ENTRY_EVENT_DOES_NOT_EXIST', - 'ID_WEB_ENTRY_EVENT_DOES_NOT_EXIST({0})'); - $this->setTranslation('ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES', - 'ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES({0},{1})'); - $this->setTranslation('ID_DYNAFORM_IS_NOT_ASSIGNED_TO_ACTIVITY', - 'ID_DYNAFORM_IS_NOT_ASSIGNED_TO_ACTIVITY({0},{1})'); + $this->processUid = $this->import(__DIR__ . '/WebEntryEventTest.pmx'); + $this->processUid2 = $this->import(__DIR__ . '/WebEntryEventTest2.pmx'); + $this->object = new WebEntryEvent(); + $this->setTranslation('ID_INVALID_VALUE_CAN_NOT_BE_EMPTY', 'ID_INVALID_VALUE_CAN_NOT_BE_EMPTY({0})'); + $this->setTranslation('ID_UNDEFINED_VALUE_IS_REQUIRED', 'ID_UNDEFINED_VALUE_IS_REQUIRED({0})'); + $this->setTranslation('ID_WEB_ENTRY_EVENT_DOES_NOT_EXIST', 'ID_WEB_ENTRY_EVENT_DOES_NOT_EXIST({0})'); + $this->setTranslation('ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES', 'ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES({0},{1})'); + $this->setTranslation('ID_DYNAFORM_IS_NOT_ASSIGNED_TO_ACTIVITY', 'ID_DYNAFORM_IS_NOT_ASSIGNED_TO_ACTIVITY({0},{1})'); } /** @@ -47,10 +50,34 @@ class WebEntryEventTest extends \WorkflowTestCase */ protected function tearDown() { - $this->dropDB(); $this->clearTranslations(); } + /** + * Get base uri for rest applications. + * @return string + */ + private function getBaseUri() + { + $_SERVER = $this->getServerInformation(); + $baseUri = System::getServerProtocolHost(); + + return $baseUri; + } + + /** + * Get server information. + * @return object + */ + private function getServerInformation() + { + $pathData = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP . ".server_info"; + $content = file_get_contents($pathData); + $serverInfo = unserialize($content); + + return $serverInfo; + } + /** * @covers ProcessMaker\BusinessModel\WebEntryEvent::getWebEntryEvents * @category HOR-3207:5 diff --git a/workflow/engine/classes/model/Process.php b/workflow/engine/classes/model/Process.php index 69c59feec..5c97dc6a8 100644 --- a/workflow/engine/classes/model/Process.php +++ b/workflow/engine/classes/model/Process.php @@ -746,7 +746,13 @@ class Process extends BaseProcess return $aProcesses; } - public function getCasesCountForProcess($pro_uid) + /** + * This returns the number of cases for the process. + * @param string $pro_uid + * @return integer + * @see ProcessMaker\Project\Bpmn::canRemove() + */ + public static function getCasesCountForProcess($pro_uid) { $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn('COUNT(*) AS TOTAL_CASES');