Files
edx-platform/common/test/acceptance/fixtures/library.py
2021-03-09 18:03:34 +05:00

93 lines
2.9 KiB
Python

"""
Fixture to create a Content Library
"""
from opaque_keys.edx.keys import CourseKey
from common.test.acceptance.fixtures import STUDIO_BASE_URL
from common.test.acceptance.fixtures.base import FixtureError, XBlockContainerFixture
class LibraryFixture(XBlockContainerFixture):
"""
Fixture for ensuring that a library exists.
WARNING: This fixture is NOT idempotent. To avoid conflicts
between tests, you should use unique library identifiers for each fixture.
"""
def __init__(self, org, number, display_name):
"""
Configure the library fixture to create a library with
"""
super().__init__()
self.library_info = {
'org': org,
'number': number,
'display_name': display_name
}
self.display_name = display_name
self._library_key = None
super().__init__()
def __str__(self):
"""
String representation of the library fixture, useful for debugging.
"""
return "<LibraryFixture: org='{org}', number='{number}'>".format(**self.library_info)
def install(self):
"""
Create the library and XBlocks within the library.
This is NOT an idempotent method; if the library already exists, this will
raise a `FixtureError`. You should use unique library identifiers to avoid
conflicts between tests.
"""
self._create_library()
self._create_xblock_children(self.library_location, self.children)
return self
@property
def library_key(self):
"""
Get the LibraryLocator for this library, as a string.
"""
return self._library_key
@property
def library_location(self):
"""
Return the locator string for the LibraryRoot XBlock that is the root of the library hierarchy.
"""
lib_key = CourseKey.from_string(self._library_key)
return str(lib_key.make_usage_key('library', 'library'))
def _create_library(self):
"""
Create the library described in the fixture.
Will fail if the library already exists.
"""
response = self.session.post(
STUDIO_BASE_URL + '/library/',
data=self._encode_post_dict(self.library_info),
headers=self.headers
)
if response.ok:
self._library_key = response.json()['library_key']
else:
try:
err_msg = response.json().get('ErrMsg')
except ValueError:
err_msg = "Unknown Error"
raise FixtureError("Could not create library {}. Status was {}, error was: {}".format(
self.library_info, response.status_code, err_msg
))
def create_xblock(self, parent_loc, xblock_desc):
# Disable publishing for library XBlocks:
xblock_desc.publish = "not-applicable"
return super().create_xblock(parent_loc, xblock_desc)