diff --git a/phpunit.xml b/phpunit.xml index 2a6ef8061..433c8e8ae 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -32,6 +32,7 @@ ./workflow/engine/classes ./workflow/engine/src ./workflow/engine/methods/emailServer/ + ./workflow/engine/controllers ./workflow/engine/classes/model/map diff --git a/tests/bootstrap.php b/tests/bootstrap.php index c31a18f13..d8c65674c 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -62,6 +62,9 @@ $_SESSION['__SYSTEM_UTC_TIME_ZONE__'] = (int) (env('MAIN_SYSTEM_UTC_TIME_ZONE', ini_set('date.timezone', $_SESSION['__SYSTEM_UTC_TIME_ZONE__'] ? 'UTC' : env('MAIN_TIME_ZONE', 'America/New_York')); define('TIME_ZONE', ini_get('date.timezone')); +//This path includes PM tables model classes +set_include_path(get_include_path() . PATH_SEPARATOR . PATH_DB . SYS_SYS . "/"); + // Overwrite with the ProcessMaker env.ini configuration used in production environments //@todo: move env.ini configuration to .env ini_set('date.timezone', TIME_ZONE); //Set Time Zone diff --git a/tests/unit/workflow/engine/controllers/PmTablesProxyTest.php b/tests/unit/workflow/engine/controllers/PmTablesProxyTest.php new file mode 100644 index 000000000..f57aad81f --- /dev/null +++ b/tests/unit/workflow/engine/controllers/PmTablesProxyTest.php @@ -0,0 +1,1100 @@ + SYS_SYS]); + + $workspace = config("system.workspace"); + + if (!file_exists(PATH_DB . $workspace)) { + G::mk_dir(PATH_DB . $workspace); + } + + if (!file_exists(PATH_DB . $workspace . PATH_SEP . "db.php")) { + $myfile = fopen(PATH_DB . $workspace . PATH_SEP . "db.php", "w"); + fwrite($myfile, " '', + 'PRO_UID' => '', + 'REP_TAB_NAME' => 'PMT_TEST_BIGINT', + 'REP_TAB_NAME_OLD_NAME' => 'PMT_TEST_BIGINT', + 'REP_TAB_DSC' => '', + 'REP_TAB_CONNECTION' => 'workflow', + 'REP_TAB_TYPE' => '', + 'REP_TAB_GRID' => '', + 'columns' => json_encode([ + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "ID", + "field_label" => "id", + "field_type" => "BIGINT", + "field_size" => "", + "field_key" => true, + "field_index" => false, + "field_null" => false, + "field_autoincrement" => false + ], + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "NAME", + "field_label" => "NAME", + "field_type" => "VARCHAR", + "field_size" => "30", + "field_key" => false, + "field_index" => false, + "field_null" => true, + "field_autoincrement" => false + ] + ]) + ]; + + //This create the report tables + $this->repTableBigInt = $reportTable->saveStructureOfTable($httpDatavarBigInt, true); + $pmTablesList = new AdditionalTables(); + $resuPmTableList = $pmTablesList->getAll(); + $this->repTableBigIntUid = $resuPmTableList['rows'][0]['ADD_TAB_UID']; + + $obj = new pmTablesProxy(); + + //The variables that will be used to create rows in the PM tables + $httpDataBigInt = [ + 'id' => $this->repTableBigIntUid, + 'rows' => json_encode(["ID" => 986, "NAME" => "BigInt"]) + ]; + + //This will add rows to the PM tables + $obj->dataCreate($httpDataBigInt); + + //The variables that will be used to update the rows in the PM tables + $httpDataUpdateBigInt = (object)[ + 'id' => $this->repTableBigIntUid, + 'rows' => json_encode(["NAME" => "BigIntUpdated", "__index__" => G::encrypt(986, PMTABLE_KEY)]), + ]; + + //This method update the PM tables rows + $resultDataUpdateBigInt = $obj->dataUpdate($httpDataUpdateBigInt); + + //Assert the values were updated + $resUpdateBigInt = $obj->dataView((object)["id" => $this->repTableBigIntUid]); + $this->assertEquals("BigIntUpdated", $resUpdateBigInt['rows'][0]['NAME']); + + + //The variable that is sent to the update method + $httpDataUpdatebigInt = (object)[ + 'id' => $this->repTableBigIntUid, + 'rows' => json_encode(["ID" => 111234, "__index__" => G::encrypt(986, PMTABLE_KEY)]), + ]; + + //Asserts an exception is thrown when the user tries to modify a primary key value + $this->expectExceptionMessage('*'); + $obj->dataUpdate($httpDataUpdatebigInt); + + //Variables that will be sent to the destroy method + $httpDataDestroyBigInt = (object)[ + 'id' => $this->repTableBigIntUid, + 'rows' => G::encrypt(986, PMTABLE_KEY), + ]; + + //This method will delete a specific row + $resDeleteBigInt = $obj->dataDestroy($httpDataDestroyBigInt); + //Assert the result is null, so no errors were thrown + $this->assertNull($resDeleteBigInt); + + //This method will return a specific row + $resViewBigInt = $obj->dataView((object)["id" => $this->repTableBigIntUid]); + //Assert the row was deleted, so the PM table does not have data + $this->assertEquals(0, $resViewBigInt['count']); + } + + /** + * It tests the PM Table with a varChar ID + * + * @covers ::dataCreate() + * @covers ::dataUpdate() + * @covers ::dataView() + * @test + */ + public function it_should_test_var_char_id() + { + $reportTable = new ReportTable(); + + //PM table with a char id + $httpDatavarChar = [ + 'REP_TAB_UID' => '', + 'PRO_UID' => '', + 'REP_TAB_NAME' => 'PMT_TEST_CHAR', + 'REP_TAB_NAME_OLD_NAME' => 'PMT_TEST_CHAR', + 'REP_TAB_DSC' => '', + 'REP_TAB_CONNECTION' => 'workflow', + 'REP_TAB_TYPE' => '', + 'REP_TAB_GRID' => '', + 'columns' => json_encode([ + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "ID", + "field_label" => "id", + "field_type" => "CHAR", + "field_size" => "20", + "field_key" => true, + "field_index" => false, + "field_null" => false, + "field_autoincrement" => false + ], + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "NAME", + "field_label" => "NAME", + "field_type" => "VARCHAR", + "field_size" => "30", + "field_key" => false, + "field_index" => false, + "field_null" => true, + "field_autoincrement" => false + ] + ]) + ]; + + //This create the report tables + $this->repTableChar = $reportTable->saveStructureOfTable($httpDatavarChar, true); + $pmTablesList = new AdditionalTables(); + $resuPmTableList = $pmTablesList->getAll(); + $this->repTableCharUid = $resuPmTableList['rows'][0]['ADD_TAB_UID']; + + $obj = new pmTablesProxy(); + + //The variables that will be used to create rows in the PM tables + $httpDataChar = [ + 'id' => $this->repTableCharUid, + 'rows' => json_encode(["ID" => "009", "NAME" => "Char"]) + ]; + + //This will add rows to the PM tables + $obj->dataCreate($httpDataChar); + + //The variables that will be used to update the rows in the PM tables + $httpDataUpdateChar = (object)[ + 'id' => $this->repTableCharUid, + 'rows' => json_encode(["NAME" => "CharUpdated", "__index__" => G::encrypt("009", PMTABLE_KEY)]), + ]; + + //This method update the PM tables rows + $resultDataUpdateChar = $obj->dataUpdate($httpDataUpdateChar); + + //Assert the values were updated + $resUpdateChar = $obj->dataView((object)["id" => $this->repTableCharUid]); + $this->assertEquals("CharUpdated", $resUpdateChar['rows'][0]['NAME']); + + + //The variable that is sent to the update method + $httpDataUpdateChar = (object)[ + 'id' => $this->repTableCharUid, + 'rows' => json_encode(["ID" => "fwew", "__index__" => G::encrypt("009", PMTABLE_KEY)]), + ]; + + //Asserts an exception is thrown when the user tries to modify a primary key value + $this->expectExceptionMessage('*'); + $obj->dataUpdate($httpDataUpdateChar); + + //Variables that will be sent to the destroy method + $httpDataDestroyChar = (object)[ + 'id' => $this->repTableCharUid, + 'rows' => G::encrypt("009", PMTABLE_KEY), + ]; + + //This method will delete a specific row + $resDeleteChar = $obj->dataDestroy($httpDataDestroyChar); + //Assert the result is null, so no errors were thrown + $this->assertNull($resDeleteChar); + + //This method will return a specific row + $resViewChar = $obj->dataView((object)["id" => $this->repTableCharUid]); + //Assert the row was deleted, so the PM table does not have data + $this->assertEquals(0, $resViewChar['count']); + } + + /** + * It tests the PM Table with an integer ID + * + * @covers ::dataCreate() + * @covers ::dataUpdate() + * @covers ::dataView() + * @test + */ + public function it_should_test_integer_id() + { + $reportTable = new ReportTable(); + + //PM table with an integer id + $httpDatavarInteger = [ + 'REP_TAB_UID' => '', + 'PRO_UID' => '', + 'REP_TAB_NAME' => 'PMT_TEST_INTEGER', + 'REP_TAB_NAME_OLD_NAME' => 'PMT_TEST_INTEGER', + 'REP_TAB_DSC' => '', + 'REP_TAB_CONNECTION' => 'workflow', + 'REP_TAB_TYPE' => '', + 'REP_TAB_GRID' => '', + 'columns' => json_encode([ + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "ID", + "field_label" => "id", + "field_type" => "INTEGER", + "field_size" => "", + "field_key" => true, + "field_index" => false, + "field_null" => false, + "field_autoincrement" => false + ], + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "NAME", + "field_label" => "NAME", + "field_type" => "VARCHAR", + "field_size" => "30", + "field_key" => false, + "field_index" => false, + "field_null" => true, + "field_autoincrement" => false + ] + ]) + ]; + + //This create the report tables + $this->repTableInteger = $reportTable->saveStructureOfTable($httpDatavarInteger, true); + $pmTablesList = new AdditionalTables(); + $resuPmTableList = $pmTablesList->getAll(); + $this->repTableIntegerUid = $resuPmTableList['rows'][0]['ADD_TAB_UID']; + + $obj = new pmTablesProxy(); + + //The variables that will be used to create rows in the PM tables + $httpDataInteger = [ + 'id' => $this->repTableIntegerUid, + 'rows' => json_encode(["ID" => 8, "NAME" => "Integer"]) + ]; + + //This will add rows to the PM tables + $res = $obj->dataCreate($httpDataInteger); + + //The variables that will be used to update the rows in the PM tables + $httpDataUpdateInteger = (object)[ + 'id' => $this->repTableIntegerUid, + 'rows' => json_encode(["NAME" => "IntegerUpdated", "__index__" => G::encrypt(8, PMTABLE_KEY)]), + ]; + + //This method update the PM tables rows + $resultDataUpdateInteger = $obj->dataUpdate($httpDataUpdateInteger); + + //Assert the values were updated + $resUpdateInteger = $obj->dataView((object)["id" => $this->repTableIntegerUid]); + $this->assertEquals("IntegerUpdated", $resUpdateInteger['rows'][0]['NAME']); + + + //The variable that is sent to the update method + $httpDataUpdateInteger = (object)[ + 'id' => $this->repTableIntegerUid, + 'rows' => json_encode(["ID" => 7655, "__index__" => G::encrypt(8, PMTABLE_KEY)]), + ]; + + //Asserts an exception is thrown when the user tries to modify a primary key value + $this->expectExceptionMessage('*'); + $obj->dataUpdate($httpDataUpdateInteger); + + //Variables that will be sent to the destroy method + $httpDataDestroyInteger = (object)[ + 'id' => $this->repTableIntegerUid, + 'rows' => G::encrypt(8, PMTABLE_KEY), + ]; + + //This method will delete a specific row + $resDeleteInteger = $obj->dataDestroy($httpDataDestroyInteger); + //Assert the result is null, so no errors were thrown + $this->assertNull($resDeleteInteger); + + //This method will return a specific row + $resViewInteger = $obj->dataView((object)["id" => $this->repTableIntegerUid]); + //Assert the row was deleted, so the PM table does not have data + $this->assertEquals(0, $resViewInteger['count']); + } + + /** + * It tests the PM Table with a smallInt ID + * + * @covers ::dataCreate() + * @covers ::dataUpdate() + * @covers ::dataView() + * @test + */ + public function it_should_test_smallint_id() + { + $reportTable = new ReportTable(); + + //PM table with a smallint id + $httpDatavarSmallInt = [ + 'REP_TAB_UID' => '', + 'PRO_UID' => '', + 'REP_TAB_NAME' => 'PMT_TEST_SMALLINT', + 'REP_TAB_NAME_OLD_NAME' => 'PMT_TEST_SMALLINT', + 'REP_TAB_DSC' => '', + 'REP_TAB_CONNECTION' => 'workflow', + 'REP_TAB_TYPE' => '', + 'REP_TAB_GRID' => '', + 'columns' => json_encode([ + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "ID", + "field_label" => "id", + "field_type" => "SMALLINT", + "field_size" => "", + "field_key" => true, + "field_index" => false, + "field_null" => false, + "field_autoincrement" => false + ], + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "NAME", + "field_label" => "NAME", + "field_type" => "VARCHAR", + "field_size" => "30", + "field_key" => false, + "field_index" => false, + "field_null" => true, + "field_autoincrement" => false + ] + ]) + ]; + + //This create the report tables + $this->repTableSmallInt = $reportTable->saveStructureOfTable($httpDatavarSmallInt, true); + $pmTablesList = new AdditionalTables(); + $resuPmTableList = $pmTablesList->getAll(); + $this->repTableSmallIntUid = $resuPmTableList['rows'][0]['ADD_TAB_UID']; + + $obj = new pmTablesProxy(); + + //The variables that will be used to create rows in the PM tables + $httpDataSmallInt = [ + 'id' => $this->repTableSmallIntUid, + 'rows' => json_encode(["ID" => 5, "NAME" => "SmallInt"]) + ]; + + //This will add rows to the PM tables + $obj->dataCreate($httpDataSmallInt); + + //The variables that will be used to update the rows in the PM tables + $httpDataUpdateSmallInt = (object)[ + 'id' => $this->repTableSmallIntUid, + 'rows' => json_encode(["NAME" => "SmallIntUpdated", "__index__" => G::encrypt(5, PMTABLE_KEY)]), + ]; + + //This method update the PM tables rows + $resultDataUpdateSmallInt = $obj->dataUpdate($httpDataUpdateSmallInt); + + //Assert the values were updated + $resUpdateSmallInt = $obj->dataView((object)["id" => $this->repTableSmallIntUid]); + $this->assertEquals("SmallIntUpdated", $resUpdateSmallInt['rows'][0]['NAME']); + + //The variable that is sent to the update method + $httpDataUpdateSmallInt = (object)[ + 'id' => $this->repTableSmallIntUid, + 'rows' => json_encode(["ID" => 7, "__index__" => G::encrypt(5, PMTABLE_KEY)]), + ]; + + //Asserts an exception is thrown when the user tries to modify a primary key value + $this->expectExceptionMessage('*'); + $obj->dataUpdate($httpDataUpdateSmallInt); + + //Variables that will be sent to the destroy method + $httpDataDestroySmallInt = (object)[ + 'id' => $this->repTableSmallIntUid, + 'rows' => G::encrypt(5, PMTABLE_KEY), + ]; + + //This method will delete a specific row + $resDeleteSmallInt = $obj->dataDestroy($httpDataDestroySmallInt); + //Assert the result is null, so no errors were thrown + $this->assertNull($resDeleteSmallInt); + + //This method will return a specific row + $resViewSmallInt = $obj->dataView((object)["id" => $this->repTableSmallIntUid]); + //Assert the row was deleted, so the PM table does not have data + $this->assertEquals(0, $resViewSmallInt['count']); + } + + /** + * It tests the PM Table with a tinyInt ID + * + * @covers ::dataCreate() + * @covers ::dataUpdate() + * @covers ::dataView() + * @test + */ + public function it_should_test_tinyint_id() + { + $reportTable = new ReportTable(); + + //PM table with a tinyint id + $httpDatavarTinyInt = [ + 'REP_TAB_UID' => '', + 'PRO_UID' => '', + 'REP_TAB_NAME' => 'PMT_TEST_TINYINT', + 'REP_TAB_NAME_OLD_NAME' => 'PMT_TEST_TINYINT', + 'REP_TAB_DSC' => '', + 'REP_TAB_CONNECTION' => 'workflow', + 'REP_TAB_TYPE' => '', + 'REP_TAB_GRID' => '', + 'columns' => json_encode([ + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "ID", + "field_label" => "id", + "field_type" => "TINYINT", + "field_size" => "", + "field_key" => true, + "field_index" => false, + "field_null" => false, + "field_autoincrement" => false + ], + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "NAME", + "field_label" => "NAME", + "field_type" => "VARCHAR", + "field_size" => "30", + "field_key" => false, + "field_index" => false, + "field_null" => true, + "field_autoincrement" => false + ] + ]) + ]; + + //This create the report tables + $this->repTableTinyInt = $reportTable->saveStructureOfTable($httpDatavarTinyInt, true); + $pmTablesList = new AdditionalTables(); + $resuPmTableList = $pmTablesList->getAll(); + $this->repTableTinyIntUid = $resuPmTableList['rows'][0]['ADD_TAB_UID']; + + $obj = new pmTablesProxy(); + + //The variables that will be used to create rows in the PM tables + $httpDataTinyInt = [ + 'id' => $this->repTableTinyIntUid, + 'rows' => json_encode(["ID" => 1, "NAME" => "TinyInt"]) + ]; + + //This will add rows to the PM tables + $obj->dataCreate($httpDataTinyInt); + + //The variables that will be used to update the rows in the PM tables + $httpDataUpdateTinyInt = (object)[ + 'id' => $this->repTableTinyIntUid, + 'rows' => json_encode(["NAME" => "TinyIntUpdated", "__index__" => G::encrypt(1, PMTABLE_KEY)]), + ]; + + //This method update the PM tables rows + $resultDataUpdateTinyInt = $obj->dataUpdate($httpDataUpdateTinyInt); + + //Assert the values were updated + $resUpdateTinyInt = $obj->dataView((object)["id" => $this->repTableTinyIntUid]); + $this->assertEquals("TinyIntUpdated", $resUpdateTinyInt['rows'][0]['NAME']); + + //The variable that is sent to the update method + $httpDataUpdateTinyInt = (object)[ + 'id' => $this->repTableTinyIntUid, + 'rows' => json_encode(["ID" => 2, "__index__" => G::encrypt(1, PMTABLE_KEY)]), + ]; + + //Asserts an exception is thrown when the user tries to modify a primary key value + $this->expectExceptionMessage('*'); + $obj->dataUpdate($httpDataUpdateTinyInt); + + //Variables that will be sent to the destroy method + $httpDataDestroyTinyInt = (object)[ + 'id' => $this->repTableTinyIntUid, + 'rows' => G::encrypt(1, PMTABLE_KEY), + ]; + + //This method will delete a specific row + $resDeleteTinyInt = $obj->dataDestroy($httpDataDestroyTinyInt); + //Assert the result is null, so no errors were thrown + $this->assertNull($resDeleteTinyInt); + + //This method will return a specific row + $resViewTinyInt = $obj->dataView((object)["id" => $this->repTableTinyIntUid]); + //Assert the row was deleted, so the PM table does not have data + $this->assertEquals(0, $resViewTinyInt['count']); + } + + /** + * It tests the PM Table with a varChar ID + * + * @covers ::dataCreate() + * @covers ::dataUpdate() + * @covers ::dataView() + * @test + */ + public function it_should_test_varchar_id() + { + $reportTable = new ReportTable(); + + //PM table with a varchar id + $httpDatavarVarChar = [ + 'REP_TAB_UID' => '', + 'PRO_UID' => '', + 'REP_TAB_NAME' => 'PMT_TEST_VARCHAR', + 'REP_TAB_NAME_OLD_NAME' => 'PMT_TEST_VARCHAR', + 'REP_TAB_DSC' => '', + 'REP_TAB_CONNECTION' => 'workflow', + 'REP_TAB_TYPE' => '', + 'REP_TAB_GRID' => '', + 'columns' => json_encode([ + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "ID", + "field_label" => "id", + "field_type" => "VARCHAR", + "field_size" => "20", + "field_key" => true, + "field_index" => false, + "field_null" => false, + "field_autoincrement" => false + ], + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "NAME", + "field_label" => "NAME", + "field_type" => "VARCHAR", + "field_size" => "30", + "field_key" => false, + "field_index" => false, + "field_null" => true, + "field_autoincrement" => false + ] + ]) + ]; + + //This create the report tables + $this->repTableVarChar = $reportTable->saveStructureOfTable($httpDatavarVarChar, true); + $pmTablesList = new AdditionalTables(); + $resuPmTableList = $pmTablesList->getAll(); + $this->repTableVarCharUid = $resuPmTableList['rows'][0]['ADD_TAB_UID']; + + $obj = new pmTablesProxy(); + + //The variables that will be used to create rows in the PM tables + $httpDataVarChar = [ + 'id' => $this->repTableVarCharUid, + 'rows' => json_encode(["ID" => "076", "NAME" => "VarChar"]) + ]; + + //This will add rows to the PM tables + $obj->dataCreate($httpDataVarChar); + + //The variables that will be used to update the rows in the PM tables + $httpDataUpdateVarChar = (object)[ + 'id' => $this->repTableVarCharUid, + 'rows' => json_encode(["NAME" => "VarCharUpdated", "__index__" => G::encrypt("076", PMTABLE_KEY)]), + ]; + + //This method update the PM tables rows + $resultDataUpdateVarChar = $obj->dataUpdate($httpDataUpdateVarChar); + + //Assert the values were updated + $resUpdateVarChar = $obj->dataView((object)["id" => $this->repTableVarCharUid]); + $this->assertEquals("VarCharUpdated", $resUpdateVarChar['rows'][0]['NAME']); + + //The variable that is sent to the update method + $httpDataUpdateVarChar = (object)[ + 'id' => $this->repTableVarCharUid, + 'rows' => json_encode(["ID" => "sdsggs", "__index__" => G::encrypt("076", PMTABLE_KEY)]), + ]; + + //Asserts an exception is thrown when the user tries to modify a primary key value + $this->expectExceptionMessage('*'); + $obj->dataUpdate($httpDataUpdateVarChar); + + //Variables that will be sent to the destroy method + $httpDataDestroyVarChar = (object)[ + 'id' => $this->repTableVarCharUid, + 'rows' => G::encrypt("076", PMTABLE_KEY), + ]; + + //This method will delete a specific row + $resDeleteVarChar = $obj->dataDestroy($httpDataDestroyVarChar); + //Assert the result is null, so no errors were thrown + $this->assertNull($resDeleteVarChar); + + //This method will return a specific row + $resViewVarChar = $obj->dataView((object)["id" => $this->repTableVarCharUid]); + //Assert the row was deleted, so the PM table does not have data + $this->assertEquals(0, $resViewVarChar['count']); + } + + /** + * It tests the PM Table with a varChar ID + * + * @covers ::dataCreate() + * @covers ::dataView() + * @test + */ + public function it_should_test_varchar_id_filter() + { + $reportTable = new ReportTable(); + + //PM table with a varchar id + $httpDatavarVarChar = [ + 'REP_TAB_UID' => '', + 'PRO_UID' => '', + 'REP_TAB_NAME' => 'PMT_TEST_VARCHAR', + 'REP_TAB_NAME_OLD_NAME' => 'PMT_TEST_VARCHAR', + 'REP_TAB_DSC' => '', + 'REP_TAB_CONNECTION' => 'workflow', + 'REP_TAB_TYPE' => '', + 'REP_TAB_GRID' => '', + 'columns' => json_encode([ + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "ID", + "field_label" => "id", + "field_type" => "VARCHAR", + "field_size" => "20", + "field_key" => true, + "field_index" => false, + "field_null" => false, + "field_autoincrement" => false + ], + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "NAME", + "field_label" => "NAME", + "field_type" => "VARCHAR", + "field_size" => "30", + "field_key" => false, + "field_index" => false, + "field_null" => true, + "field_autoincrement" => false + ] + ]) + ]; + + //This create the report tables + $this->repTableVarChar = $reportTable->saveStructureOfTable($httpDatavarVarChar, true); + $pmTablesList = new AdditionalTables(); + $resuPmTableList = $pmTablesList->getAll(); + $this->repTableVarCharUid = $resuPmTableList['rows'][0]['ADD_TAB_UID']; + + $obj = new pmTablesProxy(); + + //The variables that will be used to create rows in the PM tables + $httpDataVarChar = [ + 'id' => $this->repTableVarCharUid, + 'rows' => json_encode(["ID" => "076", "NAME" => "VarChar"]) + ]; + + //This will add rows to the PM tables + $obj->dataCreate($httpDataVarChar); + + //Assert the values were updated + $res = $obj->dataView((object)["id" => $this->repTableVarCharUid, 'textFilter' => "a"]); + $this->assertEquals(1, $res['count']); + + } + + /** + * It tests the PM Table with a varChar ID + * + * @covers ::dataCreate() + * @covers ::dataView() + * @test + */ + public function it_should_test_varchar_id_exception() + { + $reportTable = new ReportTable(); + + //PM table with a varchar id + $httpDatavarVarChar = [ + 'REP_TAB_UID' => '', + 'PRO_UID' => '', + 'REP_TAB_NAME' => 'PMT_TEST_VARCHAR', + 'REP_TAB_NAME_OLD_NAME' => 'PMT_TEST_VARCHAR', + 'REP_TAB_DSC' => '', + 'REP_TAB_CONNECTION' => 'workflow', + 'REP_TAB_TYPE' => '', + 'REP_TAB_GRID' => '', + 'columns' => json_encode([ + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "ID", + "field_label" => "id", + "field_type" => "VARCHAR", + "field_size" => "20", + "field_key" => true, + "field_index" => false, + "field_null" => false, + "field_autoincrement" => false + ], + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "NAME", + "field_label" => "NAME", + "field_type" => "VARCHAR", + "field_size" => "30", + "field_key" => false, + "field_index" => false, + "field_null" => true, + "field_autoincrement" => false + ] + ]) + ]; + + //This create the report tables + $this->repTableVarChar = $reportTable->saveStructureOfTable($httpDatavarVarChar, true); + $pmTablesList = new AdditionalTables(); + $resuPmTableList = $pmTablesList->getAll(); + $this->repTableVarCharUid = $resuPmTableList['rows'][0]['ADD_TAB_UID']; + + $obj = new pmTablesProxy(); + + //The variables that will be used to create rows in the PM tables + $httpDataVarChar = [ + 'id' => "fake id", + 'rows' => json_encode(["ID" => "076", "NAME" => "VarChar"]) + ]; + + //This will add rows to the PM tables + $res = $obj->dataCreate($httpDataVarChar); + $this->assertFalse($res->success); + + //The variables that will be used to create rows in the PM tables + $httpDataVarChar = [ + 'id' => $this->repTableVarCharUid, + 'rows' => "" + ]; + $res = $obj->dataCreate($httpDataVarChar); + $this->assertFalse($res->success); + } + + /** + * It tests the PM Table with a varChar ID + * + * @covers ::dataCreate() + * @covers ::dataUpdate() + * @covers ::dataView() + * @test + */ + public function it_should_test_varchar_id_rows() + { + $reportTable = new ReportTable(); + + //PM table with a varchar id + $httpDatavarVarChar = [ + 'REP_TAB_UID' => '', + 'PRO_UID' => '', + 'REP_TAB_NAME' => 'PMT_TEST_VARCHAR', + 'REP_TAB_NAME_OLD_NAME' => 'PMT_TEST_VARCHAR', + 'REP_TAB_DSC' => '', + 'REP_TAB_CONNECTION' => 'workflow', + 'REP_TAB_TYPE' => '', + 'REP_TAB_GRID' => '', + 'columns' => json_encode([ + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "ID", + "field_label" => "id", + "field_type" => "VARCHAR", + "field_size" => "20", + "field_key" => true, + "field_index" => false, + "field_null" => false, + "field_autoincrement" => false + ], + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "NAME", + "field_label" => "NAME", + "field_type" => "VARCHAR", + "field_size" => "30", + "field_key" => false, + "field_index" => false, + "field_null" => true, + "field_autoincrement" => false + ] + ]) + ]; + + //This create the report tables + $this->repTableVarChar = $reportTable->saveStructureOfTable($httpDatavarVarChar, true); + $pmTablesList = new AdditionalTables(); + $resuPmTableList = $pmTablesList->getAll(); + $this->repTableVarCharUid = $resuPmTableList['rows'][0]['ADD_TAB_UID']; + + $obj = new pmTablesProxy(); + + //The variables that will be used to create rows in the PM tables + $httpDataVarChar = [ + 'id' => $this->repTableVarCharUid, + 'rows' => json_encode(["ID" => "076", "NAME" => "VarChar"]) + ]; + + //This will add rows to the PM tables + $r = $obj->dataCreate($httpDataVarChar); + + //The variables that will be used to update the rows in the PM tables + $httpDataUpdateVarChar = (object)[ + 'id' => $this->repTableVarCharUid, + 'rows' => json_encode([ + ["NAME" => "VarCharUpdated", "__index__" => G::encrypt("076", PMTABLE_KEY)], + ["NAME" => "VarCharUpdated2", "__index__" => G::encrypt("077", PMTABLE_KEY)] + ]), + ]; + + //This method update the PM tables rows + $obj->dataUpdate($httpDataUpdateVarChar); + + //Assert the values were updated + $resUpdateVarChar = $obj->dataView((object)["id" => $this->repTableVarCharUid]); + $this->assertEquals("VarCharUpdated", $resUpdateVarChar['rows'][0]['NAME']); + + //The variables that will be used to update the rows in the PM tables + $httpDataUpdateVarChar = (object)[ + 'id' => "fakeID", + 'rows' => json_encode([ + ["NAME" => "VarCharUpdated", "__index__" => G::encrypt("076", PMTABLE_KEY)], + ["NAME" => "VarCharUpdated2", "__index__" => G::encrypt("077", PMTABLE_KEY)] + ]), + ]; + + $this->expectExceptionMessage("**ID_PMTABLE_CLASS_DOESNT_EXIST**"); + //This method update the PM tables rows + $obj->dataUpdate($httpDataUpdateVarChar); + } + + /** + * It should test the exception message when the PM table does not exists + * + * @covers ::dataDestroy() + * @test + */ + public function it_should_test_destroy_method() + { + $obj = new pmTablesProxy(); + + //Variable that is sent to the destroy method + $httpDataDestroyTest = (object)[ + 'id' => "fakeUID", + 'rows' => G::encrypt("076", PMTABLE_KEY), + ]; + + //Assert the exception message when the PM table does not exists + $this->expectExceptionMessage('ID_PMTABLE_CLASS_DOESNT_EXIST'); + //This method deletes a specific row of a PM table + $obj->dataDestroy($httpDataDestroyTest); + } + + /** + * It should test the exception message when the PM table does not exists + * + * @covers ::dataDestroy() + * @test + */ + public function it_should_test_destroy_method_success() + { + $reportTable = new ReportTable(); + + //PM table with a varchar id + $httpDatavarVarChar = [ + 'REP_TAB_UID' => '', + 'PRO_UID' => '', + 'REP_TAB_NAME' => 'PMT_TEST_VARCHAR', + 'REP_TAB_NAME_OLD_NAME' => 'PMT_TEST_VARCHAR', + 'REP_TAB_DSC' => '', + 'REP_TAB_CONNECTION' => 'workflow', + 'REP_TAB_TYPE' => '', + 'REP_TAB_GRID' => '', + 'columns' => json_encode([ + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "ID", + "field_label" => "id", + "field_type" => "VARCHAR", + "field_size" => "20", + "field_key" => true, + "field_index" => false, + "field_null" => false, + "field_autoincrement" => false + ], + [ + "uid" => "", + "field_uid" => "", + "field_dyn" => "", + "field_name" => "NAME", + "field_label" => "NAME", + "field_type" => "VARCHAR", + "field_size" => "30", + "field_key" => false, + "field_index" => false, + "field_null" => true, + "field_autoincrement" => false + ] + ]) + ]; + + //This create the report tables + $this->repTableVarChar = $reportTable->saveStructureOfTable($httpDatavarVarChar, true); + $pmTablesList = new AdditionalTables(); + $resuPmTableList = $pmTablesList->getAll(); + $this->repTableVarCharUid = $resuPmTableList['rows'][0]['ADD_TAB_UID']; + //The variables that will be used to create rows in the PM tables + $httpDataVarChar = [ + 'id' => $this->repTableVarCharUid, + 'rows' => json_encode(["ID" => "077", "NAME" => "VarChar2"]) + ]; + + $obj = new pmTablesProxy(); + //This will add rows to the PM tables + $obj->dataCreate($httpDataVarChar); + + //Variable that is sent to the destroy method + $httpDataDestroyTest = (object)[ + 'id' => $this->repTableVarCharUid, + 'rows' => G::encrypt("077", PMTABLE_KEY), + ]; + + //This method deletes a specific row of a PM table + $obj->dataDestroy($httpDataDestroyTest); + } + + /** + * Delete all the PM Tables created for the test + */ + public function tearDown() + { + parent::tearDown(); + $obj = new pmTablesProxy(); + $httpDataBigInt = (object)['rows' => '[{"id":"' . $this->repTableBigIntUid . '","type":""}]']; + $httpDataChar = (object)['rows' => '[{"id":"' . $this->repTableCharUid . '","type":""}]']; + $httpDataSmallInt = (object)['rows' => '[{"id":"' . $this->repTableSmallIntUid . '","type":""}]']; + $httpDataInteger = (object)['rows' => '[{"id":"' . $this->repTableIntegerUid . '","type":""}]']; + $httpDataVarChar = (object)['rows' => '[{"id":"' . $this->repTableVarCharUid . '","type":""}]']; + $httpDataTinyInt = (object)['rows' => '[{"id":"' . $this->repTableTinyIntUid . '","type":""}]']; + $obj->delete($httpDataBigInt); + $obj->delete($httpDataChar); + $obj->delete($httpDataSmallInt); + $obj->delete($httpDataInteger); + $obj->delete($httpDataVarChar); + $obj->delete($httpDataTinyInt); + } +}