Files
edx-platform/xmodule/modulestore/tests/test_api.py
Tim McCormack 9ff24774e1 test: Allow locale path test to pass when repo dir name different (#36648)
This test assumes edx-platform is checked out in a directory of that name.
2025-05-01 14:04:41 -04:00

76 lines
2.4 KiB
Python

"""
Tests for the modulestore and XBlock python APIs.
"""
from unittest.mock import Mock
from django.conf import settings
from lti_consumer.lti_xblock import LtiConsumerXBlock
from done import DoneXBlock
from xblock.field_data import DictFieldData
from xblock.test.tools import TestRuntime
from xblock.test.test_runtime import TestSimpleMixin
from xmodule.video_block import VideoBlock
from xmodule.modulestore.api import (
get_javascript_i18n_file_name,
get_javascript_i18n_file_path,
get_python_locale_root,
get_root_module_name,
get_xblock_root_module_name,
)
def test_get_root_module_name():
"""
Ensure the module name function works with different xblocks.
"""
assert get_root_module_name(LtiConsumerXBlock) == 'lti_consumer'
assert get_root_module_name(VideoBlock) == 'xmodule'
assert get_root_module_name(DoneXBlock) == 'done'
def test_get_xblock_root_module_name():
"""
Ensure the get_root_module_name works with mixed XBlocks.
The XBlock uses a little-known Mixologist class which changes the final
XBlock object class. See the XBlock.construct_xblock_from_class method
for more information about this behavior.
"""
field_data = DictFieldData({
'field_a': 5,
'field_x': [1, 2, 3],
})
runtime = TestRuntime(Mock(), mixins=[TestSimpleMixin], services={'field-data': field_data})
mixed_done_xblock = runtime.construct_xblock_from_class(DoneXBlock, Mock())
assert mixed_done_xblock.__module__ == 'xblock.core'
assert mixed_done_xblock.unmixed_class == DoneXBlock, 'The unmixed_class property retains the original property.'
assert get_xblock_root_module_name(mixed_done_xblock) == 'done'
def test_file_paths_api():
"""
Test the `get_python_locale_root` returned path.
"""
root = get_python_locale_root()
assert root.endswith('/conf/plugins-locale/xblock.v1'), 'Needs to match Makefile and other code'
def test_get_javascript_i18n_file_name():
"""
Test get_javascript_i18n_file_name relative path to `/static` URL.
"""
assert get_javascript_i18n_file_name('lti_consumer', 'ar') == 'js/xblock.v1-i18n/lti_consumer/ar.js'
def test_get_javascript_i18n_file_path():
"""
Test get_javascript_i18n_file_path absolute file path.
"""
path = str(get_javascript_i18n_file_path('done', 'eo'))
assert path.endswith(f'{settings.PROJECT_ROOT}/static/js/xblock.v1-i18n/done/eo.js')