# -*- coding: utf-8 -*-
"""
:Module: khoros.utils.tests.test_board_creation
:Synopsis: This module is used by pytest to verify that the board creation works properly
:Created By: Jeff Shurtliff
:Last Modified: Jeff Shurtliff
:Modified Date: 09 Jun 2022
"""
import pytest
from . import resources
[docs]
def get_required_fields(board_type='forum', all_types=False):
"""This function defines required fields that can be used in other tests.
:param board_type: The type of board (e.g. ``forum``, ``blog``, etc.) to use
:type board_type: str
:param all_types: Defines if required fields for all board types should be returned
:type all_types: bool
:returns: A tuple or list of tuples with the required fields for one or more board types
"""
board_id, board_title = 'test-board', 'Test Board'
if all_types:
field_data = []
board_types = ['blog', 'contest', 'forum', 'idea', 'qanda', 'tkb']
for board_type in board_types:
field_data.append((board_id, board_title, board_type))
else:
field_data = (board_id, board_title, board_type)
return field_data
[docs]
def get_dict_for_required_fields(required_fields):
"""This function places the required fields in a properly formatted dictionary.
:param required_fields: The board ID, title and type
:type required_fields: tuple, list, set
:returns: Dictionary containing the required fields
"""
field_dict = {
'id': required_fields[0],
'title': required_fields[1],
'conversation_style': required_fields[2]
}
return field_dict
[docs]
def verify_data_fields(payload, data_fields):
"""This function checks a dictionary of data fields and values to ensure they match what is in the payload.
:param payload: The payload for a new board
:type payload: dict
:param data_fields: The data fields and corresponding values to check
:type data_fields: dict
:returns: Boolean value indicating whether or not the verification checks out
"""
verified = True
for field, value in data_fields.items():
if field not in payload['data']:
verified = False
break
else:
if payload['data'].get(field) != value:
verified = False
break
return verified
[docs]
def test_required_fields():
"""This function tests that the payload is structured properly with only the required fields supplied.
.. versionchanged:: 5.0.0
Removed the redundant return statement.
"""
payload = boards.structure_payload(khoros, 'test-forum', 'Test Forum', 'forum')
data_fields_to_check = {
'conversation_style': 'forum',
'id': 'test-forum',
'title': 'Test Forum'
}
assert verify_data_fields(payload, data_fields_to_check) is True # nosec
[docs]
def test_valid_board_types():
"""This function tests to ensure that the payload for all valid board types gets formatted appropriately.
.. versionchanged:: 5.0.0
Removed the redundant return statement.
"""
board_types = ['blog', 'contest', 'forum', 'idea', 'qanda', 'tkb']
board_id, board_title = 'test-board', 'Test Board'
for board_type in board_types:
payload = boards.structure_payload(khoros, board_id, board_title, board_type)
data_fields_to_check = {
'conversation_style': board_type,
'id': board_id,
'title': board_title
}
assert verify_data_fields(payload, data_fields_to_check) is True # nosec
[docs]
def test_no_arguments():
"""This function tests to ensure that a TypeError is raised if no arguments are passed to the function.
.. versionchanged:: 5.0.0
Removed the redundant return statement.
"""
with pytest.raises(TypeError):
boards.structure_payload()
[docs]
def test_invalid_board_type():
"""This function tests to ensure an ``InvalidNodeTypeError`` exception is raised for an invalid board type.
.. versionchanged:: 5.0.0
Removed the redundant return statement.
"""
with pytest.raises(exceptions.InvalidNodeTypeError):
boards.structure_payload(khoros, 'test-board', 'Test Board', 'group-hub')
[docs]
def test_description():
"""This function tests the description argument to ensure it gets formatted properly for all board types.
.. versionchanged:: 5.0.0
Removed the redundant return statement.
"""
description = "This is a description of the new board."
required_fields = get_required_fields(all_types=True)
for fields in required_fields:
board_id, board_title, board_type = fields
payload = boards.structure_payload(khoros, board_id, board_title, board_type, description)
expected_fields = get_dict_for_required_fields(fields)
expected_fields['description'] = description
assert verify_data_fields(payload, expected_fields) is True # nosec
# Import modules and initialize the core object
boards, exceptions = resources.import_modules('khoros.structures.boards', 'khoros.errors.exceptions')
khoros = resources.initialize_khoros_object()