Source code for khoros.utils.tests.test_roles
# -*- coding: utf-8 -*-
"""
:Module: khoros.utils.tests.test_roles
:Synopsis: This module is used by pytest to verify the :py:mod:`khoros.objects.roles` functionality.
:Created By: Jeff Shurtliff
:Last Modified: Jeff Shurtliff
:Modified Date: 03 Oct 2022
"""
import os
import sys
import pytest
from . import resources
from ...errors import exceptions
# Define a global variable to define when the package path has been set
package_path_defined = False
# Import the roles module
roles = resources.import_modules('khoros.objects.roles')
[docs]
def set_package_path():
"""This function adds the high-level khoros directory to the sys.path list.
.. versionadded:: 5.0.0
"""
global package_path_defined
if not package_path_defined:
sys.path.insert(0, os.path.abspath('../..'))
package_path_defined = True
[docs]
def test_get_role_id():
"""This function tests the :py:func:`khoros.objects.roles.get_role_id` function and corresponding method.
.. versionchanged:: 5.1.2
The function has been updated to support GitHub Workflows and to include a couple extra tests.
.. versionadded:: 5.0.0
"""
# Instantiate the core object
khoros_object = resources.get_core_object()
# Test the method and function
role_id = khoros_object.roles.get_role_id('Administrator')
assert role_id == 't:Administrator' # nosec
role_id = khoros_object.roles.get_role_id('some_role', 'board', 'some-blog-node')
assert role_id == 'b:some-blog-node:some_role' # nosec
# Test that the correct exception is raised for an invalid scope
with pytest.raises(exceptions.InvalidRoleError):
khoros_object.roles.get_role_id('Administrator', 'something_wrong')
# Test that the correct exception is raised for a missing node ID
with pytest.raises(exceptions.MissingRequiredDataError):
khoros_object.roles.get_role_id('some_role', 'board')
[docs]
def test_invalid_role_type():
"""This function tests passing an invalid role type to :py:func:`khoros.objects.roles.count_role_types`.
.. versionadded:: 5.0.0
"""
# Test that the appropriate exception is raised when an invalid role type is passed
with pytest.raises(exceptions.InvalidRoleTypeError):
roles.count_role_types('fake_role_type', {})
[docs]
def test_total_role_type_counts():
"""This function tests the :py:meth:`khoros.core.Khoros.Role.get_total_role_count` method and related function.
.. versionchanged:: 5.1.2
The function has been updated to support GitHub Workflows.
.. versionadded:: 5.0.0
"""
# Instantiate the core object
khoros_object = resources.get_core_object()
# Ensure that the default result is an integer of the total count
total_count = khoros_object.roles.get_total_role_count()
assert isinstance(total_count, int) # nosec
# Ensure that adding another metric returns a tuple by default
total_and_top_count = khoros_object.roles.get_total_role_count(top_level=True)
assert isinstance(total_and_top_count, tuple) # nosec
# Ensure that disabling the total count and including another metric returns an integer
only_top_count = khoros_object.roles.get_total_role_count(total=False, top_level=True)
assert isinstance(only_top_count, int) # nosec
# Ensure that attempting to retrieve no metrics does not result in an exception
no_metrics = khoros_object.roles.get_total_role_count(total=False)
assert isinstance(no_metrics, tuple) and len(no_metrics) == 0 # nosec
# Test the functionality to return a dictionary rather than a tuple
counts_dict = khoros_object.roles.get_total_role_count(return_dict=True, top_level=True)
assert isinstance(counts_dict, dict) and 'total' in counts_dict and 'top_level' in counts_dict # nosec
[docs]
def test_get_roles_for_user():
"""This function tests the :py:meth:`khoros.core.Khoros.Role.get_roles_for_user` method and related function.
.. versionchanged:: 5.1.2
The function has been updated to support GitHub Workflows.
.. versionadded:: 5.0.0
"""
# Instantiate the core object
khoros_object = resources.get_core_object()
# Test the method and function using an integer and a string as the User ID
for user_id in [1, '1']:
roles_for_user = khoros_object.roles.get_roles_for_user(user_id, 'id')
assert isinstance(roles_for_user, list) # nosec
if len(roles_for_user) > 0:
assert isinstance(roles_for_user[0], dict) and 'id' in roles_for_user[0] # nosec
assert 'href' not in roles_for_user[0] # nosec
[docs]
def test_get_users_with_role():
"""This function tests the :py:meth:`khoros.core.Khoros.Role.get_users_with_role` method and related function.
.. versionchanged:: 5.1.2
The function has been updated to support GitHub Workflows.
.. versionadded:: 5.0.0
"""
# Instantiate the core object
khoros_object = resources.get_core_object()
# Test the standard return mode
users_with_role = khoros_object.roles.get_users_with_role(role_name='Administrator')
assert isinstance(users_with_role, list) # nosec
if len(users_with_role) > 0:
assert isinstance(users_with_role[0], dict) and 'login' in users_with_role[0] # nosec
# Test the simple return mode
users_with_role = khoros_object.roles.get_users_with_role(role_name='Administrator', simple=True)
assert isinstance(users_with_role, list) # nosec
if len(users_with_role) > 0:
assert isinstance(users_with_role[0], str) # nosec