emailServer = new EmailServer(); $this->faker = Factory::create(); } /** * Get structure for registry the EMAIL_SERVER. * @return array */ private function getDataForEmailServerRegistry(): array { $faker = $this->faker; return [ 'MESS_ENGINE' => 'PHPMAILER', 'MESS_SERVER' => 'smtp.' . $faker->domainName, 'MESS_PORT' => $faker->numberBetween(400, 500), 'MESS_INCOMING_SERVER' => '', 'MESS_INCOMING_PORT' => $faker->numberBetween(400, 500), 'MESS_RAUTH' => 1, 'MESS_ACCOUNT' => $faker->email, 'MESS_PASSWORD' => $faker->password, 'MESS_FROM_MAIL' => $faker->email, 'MESS_FROM_NAME' => $faker->name, 'SMTPSECURE' => 'ssl', 'MESS_TRY_SEND_INMEDIATLY' => 1, 'MAIL_TO' => $faker->email, 'MESS_DEFAULT' => 1, 'OAUTH_CLIENT_ID' => '', 'OAUTH_CLIENT_SECRET' => '', 'OAUTH_REFRESH_TOKEN' => '', ]; } /** * Load default user session. * @global object $RBAC */ private function loadUserSession() { global $RBAC; $user = User::where('USR_ID', '=', 1)->get()->first(); $_SESSION['USER_LOGGED'] = $user['USR_UID']; $RBAC = RBAC::getSingleton(PATH_DATA, session_id()); $RBAC->initRBAC(); $RBAC->loadUserRolePermission('PROCESSMAKER', $_SESSION['USER_LOGGED']); } /** * This creates a record in the EMAIL_SERVER table. * @test * @covers \ProcessMaker\BusinessModel\EmailServer::create() */ public function it_should_create() { $this->loadUserSession(); $faker = $this->faker; $expected = $this->getDataForEmailServerRegistry(); $this->emailServer->setContextLog([ 'workspace' => 'workflow' ]); $actual = $this->emailServer->create($expected); $this->assertTrue(isset($actual['MESS_UID'])); $this->assertTrue(is_string($actual['MESS_UID'])); $this->assertEquals($expected['MESS_ENGINE'], $actual['MESS_ENGINE']); $this->assertEquals($expected['MESS_ACCOUNT'], $actual['MESS_ACCOUNT']); $expected['MESS_PASSWORD'] = G::encrypt('hash:' . $faker->password, 'EMAILENCRYPT'); $actual = $this->emailServer->create($expected); $expected['MESS_PASSWORD'] = G::encrypt('hash:' . $faker->password . 'hash:', 'EMAILENCRYPT'); $actual = $this->emailServer->create($expected); $this->expectException(Exception::class); $this->emailServer->create([]); } /** * This updates a record in the EMAIL_SERVER table. * @test * @covers \ProcessMaker\BusinessModel\EmailServer::update() */ public function it_should_update() { $this->loadUserSession(); $faker = $this->faker; $emailServer = factory(EmailServerModel::class)->create($this->getDataForEmailServerRegistry()); $data = $emailServer->toArray(); $this->emailServer->setContextLog([ 'workspace' => 'workflow' ]); $expected = [ 'MESS_ENGINE' => 'PHPMAILER', 'MESS_SERVER' => 'smtp.' . $faker->domainName, 'MESS_PORT' => $faker->numberBetween(400, 500), 'MESS_INCOMING_SERVER' => '', 'MESS_INCOMING_PORT' => $faker->numberBetween(400, 500), 'MESS_RAUTH' => 1, 'MESS_ACCOUNT' => $faker->email, 'MESS_PASSWORD' => $faker->password, 'MESS_FROM_MAIL' => $faker->email, 'MESS_FROM_NAME' => $faker->name, 'SMTPSECURE' => 'ssl', 'MESS_TRY_SEND_INMEDIATLY' => 1, 'MAIL_TO' => $faker->email, 'MESS_DEFAULT' => 1, ]; $actual = $this->emailServer->update($data['MESS_UID'], $expected); $this->assertEquals($expected['MESS_ENGINE'], $actual['MESS_ENGINE']); $this->assertEquals($expected['MESS_ACCOUNT'], $actual['MESS_ACCOUNT']); $expected['MESS_PASSWORD'] = G::encrypt('hash:' . $faker->password, 'EMAILENCRYPT'); $actual = $this->emailServer->update($data['MESS_UID'], $expected); $expected['MESS_PASSWORD'] = G::encrypt('hash:' . $faker->password . 'hash:', 'EMAILENCRYPT'); $actual = $this->emailServer->update($data['MESS_UID'], $expected); $this->emailServer->setFormatFieldNameInUppercase(false); $this->expectException(Exception::class); $actual = $this->emailServer->update($data['MESS_UID'], $expected); } /** * Get data of a from a record EMAIL_SERVER. * @test * @covers \ProcessMaker\BusinessModel\EmailServer::getEmailServerDataFromRecord() */ public function it_should_get_email_server_data_from_record() { $faker = $this->faker; $this->emailServer->setContextLog([ 'workspace' => 'workflow' ]); $expected = $this->getDataForEmailServerRegistry(); $expected['MESS_UID'] = $faker->regexify("/[a-zA-Z]{32}/"); $actual = $this->emailServer->getEmailServerDataFromRecord($expected); $this->assertEquals($expected['MESS_ENGINE'], $actual['MESS_ENGINE']); $this->assertEquals($expected['MESS_ACCOUNT'], $actual['MESS_ACCOUNT']); unset($expected['MESS_ENGINE']); $this->expectException(Exception::class); $actual = $this->emailServer->getEmailServerDataFromRecord($expected); } /** * This test obtains the configuration record that is marked by default. * @test * @covers \ProcessMaker\BusinessModel\EmailServer::getEmailServerDefault() */ public function it_should_get_email_server_default() { $this->emailServer->setContextLog([ 'workspace' => 'workflow' ]); $actual = $this->emailServer->getEmailServerDefault(); $this->assertNotEmpty($actual); } /** * This test gets the records from the "EMAIL_SERVER" table. * @test * @covers \ProcessMaker\BusinessModel\EmailServer::getEmailServers() */ public function it_should_get_email_servers() { $this->emailServer->setContextLog([ 'workspace' => 'workflow' ]); $actual = $this->emailServer->getEmailServers(); $this->assertNotEmpty($actual); } /** * This test gets the records from the "EMAIL_SERVER" table with parameters. * @test * @covers \ProcessMaker\BusinessModel\EmailServer::getEmailServers() */ public function it_should_get_email_servers_with_parameters() { $this->emailServer->setContextLog([ 'workspace' => 'workflow' ]); $actual = $this->emailServer->getEmailServers(null, null, null, null, 0); $this->assertEmpty($actual); $faker = $this->faker; $actual = $this->emailServer->getEmailServers(['filter' => $faker->text]); $this->assertNotEmpty($actual); $actual = $this->emailServer->getEmailServers(null, $faker->text); $this->assertNotEmpty($actual); $actual = $this->emailServer->getEmailServers(null, "MESS_SERVER"); $this->assertNotEmpty($actual); $actual = $this->emailServer->getEmailServers(null, "MESS_SERVER", "DESC"); $this->assertNotEmpty($actual); $actual = $this->emailServer->getEmailServers(null, "MESS_SERVER", "DESC", 0); $this->assertNotEmpty($actual); $actual = $this->emailServer->getEmailServers(null, "MESS_SERVER", "DESC", 0, 10); $this->assertNotEmpty($actual); $this->expectException(Exception::class); $actual = $this->emailServer->getEmailServers(null, "MESS_SERVER", "DESC", -1, -10); } /** * This test gets a record of the EMAIL_SERVER table. * @test * @covers \ProcessMaker\BusinessModel\EmailServer::getEmailServer() */ public function it_should_get_email_server() { $this->emailServer->setContextLog([ 'workspace' => 'workflow' ]); $emailServer = factory(EmailServerModel::class)->create($this->getDataForEmailServerRegistry()); $emailServerUid = $emailServer->MESS_UID; $actual = $this->emailServer->getEmailServer($emailServerUid); $this->assertNotEmpty($actual); } /** * This test should throw an exception when a record is not found. * @test * @covers \ProcessMaker\BusinessModel\EmailServer::getEmailServer() */ public function it_should_get_email_server_when_not_exist_registry() { $faker = $this->faker; $this->emailServer->setContextLog([ 'workspace' => 'workflow' ]); $emailServer = factory(EmailServerModel::class)->create($this->getDataForEmailServerRegistry()); $emailServerUid = $faker->regexify("/[a-zA-Z]{32}/"); $this->expectException(Exception::class); $actual = $this->emailServer->getEmailServer($emailServerUid); } /** * It tests the sendTestMail method with a successful result * * @covers \ProcessMaker\BusinessModel\EmailServer::sendTestMail() * @test */ public function it_should_test_the_send_test_mail_method() { $string = ini_get("sendmail_path"); //in current versions this value has extra parameters and must be cleaned $result = explode(" ", $string); $path = $result[0]; if (is_executable($path)) { // The data that will be sent to the method $data = [ "FROM_EMAIL" => "admin@processmaker.com", "FROM_NAME" => "Administrator", "MESS_ENGINE" => "MAIL", "MESS_SERVER" => "localhost", "MESS_PORT" => 25, "MESS_ACCOUNT" => "admin@processmaker.com", "MESS_PASSWORD" => "", "TO" => "admin@processmaker.com", "MESS_RAUTH" => true ]; // Create the EmailServer object $emailServer = new EmailServer(); // Call the sendTestMail method $result = $emailServer->sendTestMail($data); // Assert the status is true $this->assertTrue($result['status']); // Assert the success is true $this->assertTrue($result['success']); // Assert the message of the result $this->assertEquals('**ID_MAIL_TEST_SUCCESS**', $result['msg']); } } /** * It tests the sendTestMail method with a failed result * * @covers \ProcessMaker\BusinessModel\EmailServer::sendTestMail() * @test */ public function it_should_test_the_send_test_mail_method_failure() { // The data that will be sent to the method $data = [ "FROM_EMAIL" => "admin@processmaker.com", "FROM_NAME" => "Administrator", "MESS_ENGINE" => "PHPMAILER", "MESS_SERVER" => "smtp.gmail.com", "MESS_PORT" => 587, "MESS_ACCOUNT" => "admin@processmaker.com", "MESS_PASSWORD" => "", "TO" => "admin@processmaker.com", "MESS_RAUTH" => false, ]; // Create the EmailServer object $emailServer = new EmailServer(); // Call the sendTestMail method $result = $emailServer->sendTestMail($data); // Assert the status is false $this->assertFalse($result['status']); // Assert the status is false $this->assertFalse($result['success']); // Assert the message of the result is empty $this->assertNotEmpty($result['msg']); } /** * It tests the sendTestMail method with an exception * * @covers \ProcessMaker\BusinessModel\EmailServer::sendTestMail() * @test */ public function it_should_test_the_send_test_mail_method_exception() { // The data that will be sent to the method $data = []; // Create the EmailServer object $emailServer = new EmailServer(); // This expects an exception message $this->expectExceptionMessage("Undefined index: MESS_ENGINE"); // Call the sendTestMail method $emailServer->sendTestMail($data); } /** * It test the delete method * * @covers \ProcessMaker\BusinessModel\EmailServer::delete() * @test */ public function it_should_test_the_delete_method() { $email = factory(EmailServerModel::class)->create(); $emailServer = new EmailServer(); $res = $emailServer->delete($email['MESS_UID']); $this->assertNull($res); $this->expectExceptionMessage("**ID_EMAIL_SERVER_DOES_NOT_EXIST**"); $emailServer->getEmailServer($email['MESS_UID']); } /** * It test the delete method with an IMAP email server * * @covers \ProcessMaker\BusinessModel\EmailServer::delete() * @test */ public function it_should_test_the_delete_method_with_imap() { $email = factory(EmailServerModel::class)->create([ 'MESS_ENGINE' => 'IMAP' ]); $emailServer = new EmailServer(); $res = $emailServer->delete($email['MESS_UID']); $this->assertNull($res); $this->expectExceptionMessage("**ID_EMAIL_SERVER_DOES_NOT_EXIST**"); $emailServer->getEmailServer($email['MESS_UID']); } /** * Call the tearDown method */ public function tearDown() { parent::tearDown(); // TODO: Change the autogenerated stub } }