42 lines
2.1 KiB
Python
42 lines
2.1 KiB
Python
"""
|
|
Defines a test function, check_has_course_method, useful in various modulestore tests.
|
|
|
|
This file should potentially be renamed "utilties" since this file contains no tests.
|
|
"""
|
|
|
|
|
|
def check_has_course_method(modulestore, locator, locator_key_fields): # lint-amnesty, pylint: disable=missing-function-docstring
|
|
error_message = "Called has_course with query {0} and ignore_case is {1}."
|
|
|
|
for ignore_case in [True, False]:
|
|
|
|
# should find the course with exact locator
|
|
assert modulestore.has_course(locator, ignore_case)
|
|
|
|
for key_field in locator_key_fields:
|
|
if getattr(locator, key_field):
|
|
locator_changes_that_should_not_be_found = [
|
|
# replace value for one of the keys
|
|
{key_field: 'fake'},
|
|
# add a character at the end
|
|
{key_field: getattr(locator, key_field) + 'X'},
|
|
# add a character in the beginning
|
|
{key_field: 'X' + getattr(locator, key_field)},
|
|
]
|
|
for changes in locator_changes_that_should_not_be_found:
|
|
search_locator = locator.replace(**changes)
|
|
assert not modulestore.has_course(search_locator), error_message.format(search_locator, ignore_case)
|
|
|
|
# test case [in]sensitivity
|
|
locator_case_changes = [
|
|
{key_field: getattr(locator, key_field).upper()},
|
|
{key_field: getattr(locator, key_field).capitalize()},
|
|
{key_field: getattr(locator, key_field).capitalize().swapcase()},
|
|
]
|
|
for changes in locator_case_changes:
|
|
search_locator = locator.replace(**changes)
|
|
# if ignore_case is true, the course would be found with a different-cased course locator.
|
|
# if ignore_case is false, the course should NOT found given an incorrectly-cased locator.
|
|
assert (modulestore.has_course(search_locator, ignore_case) is not None) == ignore_case, \
|
|
error_message.format(search_locator, ignore_case)
|