Merged in bugfix/PMC-780 (pull request #7074)
PMC-780 Approved-by: Paula Quispe <paula.quispe@processmaker.com> Approved-by: Julio Cesar Laura Avendaño <contact@julio-laura.com>
This commit is contained in:
17
database/factories/RbacRolesFactory.php
Normal file
17
database/factories/RbacRolesFactory.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
/**
|
||||
* Model factory for a role
|
||||
*/
|
||||
use Faker\Generator as Faker;
|
||||
|
||||
$factory->define(\ProcessMaker\Model\RbacRoles::class, function(Faker $faker) {
|
||||
return [
|
||||
'ROL_UID' => G::generateUniqueID(),
|
||||
'ROL_PARENT' => '', // This value is empty because actually don't exists this type of relations between roles
|
||||
'ROL_SYSTEM' => '00000000000000000000000000000002', // Hardcoded value, this value refers to ProcessMaker
|
||||
'ROL_CODE' => strtoupper($faker->word),
|
||||
'ROL_CREATE_DATE' => $faker->date('Y-m-d H:i:s', 'now'),
|
||||
'ROL_UPDATE_DATE' => $faker->date('Y-m-d H:i:s', 'now'),
|
||||
'ROL_STATUS' => $faker->randomElement([0, 1])
|
||||
];
|
||||
});
|
||||
46
database/factories/RbacUsersFactory.php
Normal file
46
database/factories/RbacUsersFactory.php
Normal file
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
use Faker\Generator as Faker;
|
||||
|
||||
$factory->define(\ProcessMaker\Model\RbacUsers::class, function (Faker $faker) {
|
||||
return [
|
||||
'USR_UID' => G::generateUniqueID(),
|
||||
'USR_USERNAME' => $faker->unique()->userName,
|
||||
'USR_PASSWORD' => $faker->password,
|
||||
'USR_FIRSTNAME' => $faker->firstName,
|
||||
'USR_LASTNAME' => $faker->lastName,
|
||||
'USR_EMAIL' => $faker->unique()->email,
|
||||
'USR_DUE_DATE' => $faker->dateTimeInInterval('now', '+1 year')->format('Y-m-d H:i:s'),
|
||||
'USR_CREATE_DATE' => $faker->date('Y-m-d H:i:s', 'now'),
|
||||
'USR_UPDATE_DATE' => $faker->date('Y-m-d H:i:s', 'now'),
|
||||
'USR_STATUS' => $faker->randomElement([0, 1]),
|
||||
'USR_AUTH_TYPE' => 'MYSQL', // Authentication type, by default is MySQL
|
||||
'UID_AUTH_SOURCE' => '00000000000000000000000000000000', // When the type is "MYSQL" the value for this field is this...
|
||||
'USR_AUTH_USER_DN' => '', // Don't required for now
|
||||
'USR_AUTH_SUPERVISOR_DN' => '' // Don't required for now
|
||||
];
|
||||
});
|
||||
|
||||
// Create a deleted user
|
||||
$factory->state(\ProcessMaker\Model\RbacUsers::class, 'deleted', function () {
|
||||
return [
|
||||
'USR_USERNAME' => '',
|
||||
'USR_STATUS' => 0,
|
||||
'USR_AUTH_TYPE' => '',
|
||||
'UID_AUTH_SOURCE' => ''
|
||||
];
|
||||
});
|
||||
|
||||
// Create an active user
|
||||
$factory->state(\ProcessMaker\Model\RbacUsers::class, 'active', function () {
|
||||
return [
|
||||
'USR_STATUS' => 1
|
||||
];
|
||||
});
|
||||
|
||||
// Create an inactive user
|
||||
$factory->state(\ProcessMaker\Model\RbacUsers::class, 'inactive', function () {
|
||||
return [
|
||||
'USR_STATUS' => 0
|
||||
];
|
||||
});
|
||||
17
database/factories/RbacUsersRolesFactory.php
Normal file
17
database/factories/RbacUsersRolesFactory.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
/**
|
||||
* Model factory for a role assigned to an user
|
||||
*/
|
||||
|
||||
$factory->define(\ProcessMaker\Model\RbacUsersRoles::class, function() {
|
||||
return [
|
||||
'USR_UID' => function() {
|
||||
$rbacUser = factory(\ProcessMaker\Model\RbacUsers::class)->create();
|
||||
return $rbacUser->USR_UID;
|
||||
},
|
||||
'ROL_UID' => function() {
|
||||
$rbacRole = factory(\ProcessMaker\Model\RbacRoles::class)->create();
|
||||
return $rbacRole->ROL_UID;
|
||||
}
|
||||
];
|
||||
});
|
||||
@@ -873,6 +873,8 @@ class Roles extends BaseRoles
|
||||
$criteria->addSelectColumn(RbacUsersPeer::USR_UID);
|
||||
$criteria->add(RolesPeer::ROL_UID, '', Criteria::NOT_EQUAL);
|
||||
$criteria->add(RolesPeer::ROL_UID, $rolUid);
|
||||
// If the username is empty, the user was deleted in the application
|
||||
$criteria->add(RbacUsersPeer::USR_USERNAME, '', Criteria::NOT_EQUAL);
|
||||
$criteria->addJoin(RolesPeer::ROL_UID, UsersRolesPeer::ROL_UID);
|
||||
$criteria->addJoin(UsersRolesPeer::USR_UID, RbacUsersPeer::USR_UID);
|
||||
|
||||
|
||||
55
tests/unit/rbac/engine/classes/model/RolesTest.php
Normal file
55
tests/unit/rbac/engine/classes/model/RolesTest.php
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\unit\rbac\engine\classes\model;
|
||||
|
||||
use ProcessMaker\Model\RbacRoles;
|
||||
use ProcessMaker\Model\RbacUsers;
|
||||
use ProcessMaker\Model\RbacUsersRoles;
|
||||
use Roles;
|
||||
use Tests\TestCase;
|
||||
|
||||
class RolesTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Test the method "numUsersWithRole" with users with different statuses
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @covers Roles::numUsersWithRole()
|
||||
*/
|
||||
public function it_should_count_correctly_the_users_with_a_role_assigned()
|
||||
{
|
||||
// Instance the class with the method to test
|
||||
$rolesInstance = new Roles();
|
||||
|
||||
// Create elements
|
||||
$role = factory(RbacRoles::class)->create();
|
||||
$deletedUser = factory(RbacUsers::class)->states('deleted')->create();
|
||||
$activeUser = factory(RbacUsers::class)->states('active')->create();
|
||||
$inactiveUser = factory(RbacUsers::class)->states('inactive')->create();
|
||||
|
||||
// Assign the role to a deleted user
|
||||
factory(RbacUsersRoles::class)->create([
|
||||
'ROL_UID' => $role->ROL_UID,
|
||||
'USR_UID' => $deletedUser->USR_UID
|
||||
]);
|
||||
// Should be 0, because a deleted user should not be considered
|
||||
$this->assertEquals(0, $rolesInstance->numUsersWithRole($role->ROL_UID));
|
||||
|
||||
// Assign the role to an active user
|
||||
factory(RbacUsersRoles::class)->create([
|
||||
'ROL_UID' => $role->ROL_UID,
|
||||
'USR_UID' => $activeUser->USR_UID
|
||||
]);
|
||||
// Should be 1, because only the active user should be considered
|
||||
$this->assertEquals(1, $rolesInstance->numUsersWithRole($role->ROL_UID));
|
||||
|
||||
// Assign the role to an inactive user
|
||||
factory(RbacUsersRoles::class)->create([
|
||||
'ROL_UID' => $role->ROL_UID,
|
||||
'USR_UID' => $inactiveUser->USR_UID
|
||||
]);
|
||||
// Should be 2, because only the active and the inactive users should be considered
|
||||
$this->assertEquals(2, $rolesInstance->numUsersWithRole($role->ROL_UID));
|
||||
}
|
||||
}
|
||||
12
workflow/engine/src/ProcessMaker/Model/RbacRoles.php
Normal file
12
workflow/engine/src/ProcessMaker/Model/RbacRoles.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace ProcessMaker\Model;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class RbacRoles extends Model
|
||||
{
|
||||
protected $table = 'RBAC_ROLES';
|
||||
public $timestamps = false;
|
||||
|
||||
}
|
||||
12
workflow/engine/src/ProcessMaker/Model/RbacUsers.php
Normal file
12
workflow/engine/src/ProcessMaker/Model/RbacUsers.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace ProcessMaker\Model;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class RbacUsers extends Model
|
||||
{
|
||||
protected $table = 'RBAC_USERS';
|
||||
public $timestamps = false;
|
||||
|
||||
}
|
||||
12
workflow/engine/src/ProcessMaker/Model/RbacUsersRoles.php
Normal file
12
workflow/engine/src/ProcessMaker/Model/RbacUsersRoles.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace ProcessMaker\Model;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class RbacUsersRoles extends Model
|
||||
{
|
||||
protected $table = 'RBAC_USERS_ROLES';
|
||||
public $timestamps = false;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user