public void TestSupervisorEstoqueAsHigherRole()
        {
            var rolesToTest = ErpRolesManager.GetAllRoles(Departamento.Estoque);
            var higherRole  = ErpRolesManager.GetHigherRole(rolesToTest.Select(e => e.RoleName).ToList());

            Assert.AreEqual(ErpRolesManager.SupervisorDeEstoque, higherRole);
        }
        public void TestSuperAdminHigherRole()
        {
            var rolesToTest = ErpRolesManager.GetAllRoles();
            var higherRole  = ErpRolesManager.GetHigherRole(rolesToTest.Select(e => e.RoleName).ToList());

            Assert.AreEqual(ErpRolesManager.SuperAdmin, higherRole);
        }
        public void TestAvailableRoles()
        {
            var superAdminRole = ErpRolesManager.SuperAdmin;
            var availableRoles = superAdminRole.AuthorizedRolesToCreate();

            var allRoles = ErpRolesManager.GetAllRoles();

            allRoles.ForEach(e => Assert.Contains(e, availableRoles));
        }
        public static List <ErpRole> AuthorizedRolesToCreate(this ErpRole role)
        {
            var allRoles = ErpRolesManager.GetAllRoles();

            if (role.RoleName == ErpRoleNames.SuperAdmin)
            {
                return(allRoles);
            }

            var authorizedRoles = allRoles
                                  .Where(e => e.Departamento == role.Departamento && e.Nivel >= role.Nivel)
                                  .ToList();

            return(authorizedRoles);
        }
        public static List <ErpRole> AuthorizedRolesToCreate(this IList <ErpRole> roles)
        {
            var allRoles = ErpRolesManager.GetAllRoles();

            if (roles.Contains(ErpRolesManager.SuperAdmin))
            {
                return(allRoles);
            }

            var authorizedRoles = new List <ErpRole>();

            foreach (var role in roles.GroupBy(e => e.Departamento))
            {
                var higherRoleInDep = ErpRolesManager.GetHigherRole(role.Select(e => e.RoleName).ToList());
                authorizedRoles.AddRange(higherRoleInDep.AuthorizedRolesToCreate());
            }

            return(authorizedRoles);
        }