Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
190 changes: 90 additions & 100 deletions cms/envs/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@
from .common import *

# import settings from LMS for consistent behavior with CMS
from lms.envs.test import ( # pylint: disable=wrong-import-order
from lms.envs.test import ( # pylint: disable=wrong-import-order, disable=unused-import
ACCOUNT_MICROFRONTEND_URL,
COMPREHENSIVE_THEME_DIRS, # unimport:skip
DEFAULT_FILE_STORAGE,
ECOMMERCE_API_URL,
Expand All @@ -35,8 +36,10 @@
LOGIN_ISSUE_SUPPORT_LINK,
MEDIA_ROOT,
MEDIA_URL,
ORDER_HISTORY_MICROFRONTEND_URL,
PLATFORM_DESCRIPTION,
PLATFORM_NAME,
PROFILE_MICROFRONTEND_URL,
REGISTRATION_EXTRA_FIELDS,
GRADES_DOWNLOAD,
SITE_NAME,
Expand All @@ -51,28 +54,26 @@
STUDIO_SHORT_NAME = gettext_lazy("𝓢𝓽𝓾𝓭𝓲𝓸")

# Allow all hosts during tests, we use a lot of different ones all over the codebase.
ALLOWED_HOSTS = [
'*'
]
ALLOWED_HOSTS = ["*"]
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aargh, I didn't mean to let my IDE reformat this file to our current standards. I mean, it's not wrong, but it makes life harder for the reviewers. Sorry. 😬 I think it's just this file, though.


# mongo connection settings
MONGO_PORT_NUM = int(os.environ.get('EDXAPP_TEST_MONGO_PORT', '27017'))
MONGO_HOST = os.environ.get('EDXAPP_TEST_MONGO_HOST', 'localhost')
MONGO_PORT_NUM = int(os.environ.get("EDXAPP_TEST_MONGO_PORT", "27017"))
MONGO_HOST = os.environ.get("EDXAPP_TEST_MONGO_HOST", "localhost")

THIS_UUID = uuid4().hex[:5]

TEST_ROOT = path('test_root')
TEST_ROOT = path("test_root")

# Want static files in the same dir for running on jenkins.
STATIC_ROOT = TEST_ROOT / "staticfiles"
WEBPACK_LOADER['DEFAULT']['STATS_FILE'] = STATIC_ROOT / "webpack-stats.json"
WEBPACK_LOADER["DEFAULT"]["STATS_FILE"] = STATIC_ROOT / "webpack-stats.json"

GITHUB_REPO_ROOT = TEST_ROOT / "data"
DATA_DIR = TEST_ROOT / "data"
COMMON_TEST_DATA_ROOT = COMMON_ROOT / "test" / "data"

# For testing "push to lms"
FEATURES['ENABLE_EXPORT_GIT'] = True
FEATURES["ENABLE_EXPORT_GIT"] = True
GIT_REPO_EXPORT_DIR = TEST_ROOT / "export_course_repos"

# TODO (cpennington): We need to figure out how envs/test.py can inject things into common.py so that we don't have to repeat this sort of thing # lint-amnesty, pylint: disable=line-too-long
Expand All @@ -90,51 +91,47 @@
# If we don't add these settings, then Django templates that can't
# find pipelined assets will raise a ValueError.
# http://stackoverflow.com/questions/12816941/unit-testing-with-django-pipeline
STATICFILES_STORAGE = 'pipeline.storage.NonPackagingPipelineStorage'
STATICFILES_STORAGE = "pipeline.storage.NonPackagingPipelineStorage"
STATIC_URL = "/static/"

# Update module store settings per defaults for tests
update_module_store_settings(
MODULESTORE,
module_store_options={
'default_class': 'xmodule.hidden_block.HiddenBlock',
'fs_root': TEST_ROOT / "data",
"default_class": "xmodule.hidden_block.HiddenBlock",
"fs_root": TEST_ROOT / "data",
},
doc_store_settings={
'db': f'test_xmodule_{THIS_UUID}',
'host': MONGO_HOST,
'port': MONGO_PORT_NUM,
'collection': 'test_modulestore',
"db": f"test_xmodule_{THIS_UUID}",
"host": MONGO_HOST,
"port": MONGO_PORT_NUM,
"collection": "test_modulestore",
},
)

CONTENTSTORE = {
'ENGINE': 'xmodule.contentstore.mongo.MongoContentStore',
'DOC_STORE_CONFIG': {
'host': MONGO_HOST,
'db': f'test_xcontent_{THIS_UUID}',
'port': MONGO_PORT_NUM,
'collection': 'dont_trip',
"ENGINE": "xmodule.contentstore.mongo.MongoContentStore",
"DOC_STORE_CONFIG": {
"host": MONGO_HOST,
"db": f"test_xcontent_{THIS_UUID}",
"port": MONGO_PORT_NUM,
"collection": "dont_trip",
},
# allow for additional options that can be keyed on a name, e.g. 'trashcan'
'ADDITIONAL_OPTIONS': {
'trashcan': {
'bucket': 'trash_fs'
}
}
"ADDITIONAL_OPTIONS": {"trashcan": {"bucket": "trash_fs"}},
}

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': TEST_ROOT / "db" / "cms.db",
'ATOMIC_REQUESTS': True,
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": TEST_ROOT / "db" / "cms.db",
"ATOMIC_REQUESTS": True,
},
}

LMS_BASE = "localhost:8000"
LMS_ROOT_URL = f"http://{LMS_BASE}"
FEATURES['PREVIEW_LMS_BASE'] = "preview.localhost"
FEATURES["PREVIEW_LMS_BASE"] = "preview.localhost"

CMS_BASE = "localhost:8001"
CMS_ROOT_URL = f"http://{CMS_BASE}"
Expand All @@ -145,49 +142,47 @@
CACHES = {
# This is the cache used for most things.
# In staging/prod envs, the sessions also live here.
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'edx_loc_mem_cache',
'KEY_FUNCTION': 'common.djangoapps.util.memcache.safe_key',
"default": {
"BACKEND": "django.core.cache.backends.locmem.LocMemCache",
"LOCATION": "edx_loc_mem_cache",
"KEY_FUNCTION": "common.djangoapps.util.memcache.safe_key",
},

# The general cache is what you get if you use our util.cache. It's used for
# things like caching the course.xml file for different A/B test groups.
# We set it to be a DummyCache to force reloading of course.xml in dev.
# In staging environments, we would grab VERSION from data uploaded by the
# push process.
'general': {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
'KEY_PREFIX': 'general',
'VERSION': 4,
'KEY_FUNCTION': 'common.djangoapps.util.memcache.safe_key',
"general": {
"BACKEND": "django.core.cache.backends.dummy.DummyCache",
"KEY_PREFIX": "general",
"VERSION": 4,
"KEY_FUNCTION": "common.djangoapps.util.memcache.safe_key",
},

'mongo_metadata_inheritance': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': os.path.join(tempfile.gettempdir(), 'mongo_metadata_inheritance'),
'TIMEOUT': 300,
'KEY_FUNCTION': 'common.djangoapps.util.memcache.safe_key',
"mongo_metadata_inheritance": {
"BACKEND": "django.core.cache.backends.locmem.LocMemCache",
"LOCATION": os.path.join(tempfile.gettempdir(), "mongo_metadata_inheritance"),
"TIMEOUT": 300,
"KEY_FUNCTION": "common.djangoapps.util.memcache.safe_key",
},
'loc_cache': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'edx_location_mem_cache',
"loc_cache": {
"BACKEND": "django.core.cache.backends.locmem.LocMemCache",
"LOCATION": "edx_location_mem_cache",
},
'course_structure_cache': {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
"course_structure_cache": {
"BACKEND": "django.core.cache.backends.dummy.DummyCache",
},
}

################################# CELERY ######################################

CELERY_ALWAYS_EAGER = True
CELERY_RESULT_BACKEND = 'django-cache'
CELERY_RESULT_BACKEND = "django-cache"

CLEAR_REQUEST_CACHE_ON_TASK_COMPLETION = False

# test_status_cancel in cms/cms_user_tasks/test.py is failing without this
# @override_setting for BROKER_URL is not working in testcase, so updating here
BROKER_URL = 'memory://localhost/'
BROKER_URL = "memory://localhost/"

########################### Server Ports ###################################

Expand All @@ -202,99 +197,99 @@
################### Make tests faster
# http://slacy.com/blog/2012/04/make-your-tests-faster-in-django-1-4/
PASSWORD_HASHERS = [
'django.contrib.auth.hashers.SHA1PasswordHasher',
'django.contrib.auth.hashers.MD5PasswordHasher',
"django.contrib.auth.hashers.SHA1PasswordHasher",
"django.contrib.auth.hashers.MD5PasswordHasher",
]

# No segment key
CMS_SEGMENT_KEY = None

FEATURES['DISABLE_SET_JWT_COOKIES_FOR_TESTS'] = True
FEATURES["DISABLE_SET_JWT_COOKIES_FOR_TESTS"] = True

FEATURES['ENABLE_SERVICE_STATUS'] = True
FEATURES["ENABLE_SERVICE_STATUS"] = True

# Toggles embargo on for testing
FEATURES['EMBARGO'] = True
FEATURES["EMBARGO"] = True

TEST_THEME = COMMON_ROOT / "test" / "test-theme"

# For consistency in user-experience, keep the value of this setting in sync with
# the one in lms/envs/test.py
FEATURES['ENABLE_DISCUSSION_SERVICE'] = False
FEATURES["ENABLE_DISCUSSION_SERVICE"] = False

# Enable a parental consent age limit for testing
PARENTAL_CONSENT_AGE_LIMIT = 13

# Enable certificates for the tests
FEATURES['CERTIFICATES_HTML_VIEW'] = True
FEATURES["CERTIFICATES_HTML_VIEW"] = True

# Enable content libraries code for the tests
FEATURES['ENABLE_CONTENT_LIBRARIES'] = True
FEATURES["ENABLE_CONTENT_LIBRARIES"] = True

FEATURES['ENABLE_EDXNOTES'] = True
FEATURES["ENABLE_EDXNOTES"] = True

# MILESTONES
FEATURES['MILESTONES_APP'] = True
FEATURES["MILESTONES_APP"] = True

# ENTRANCE EXAMS
FEATURES['ENTRANCE_EXAMS'] = True
FEATURES["ENTRANCE_EXAMS"] = True
ENTRANCE_EXAM_MIN_SCORE_PCT = 50

VIDEO_CDN_URL = {
'CN': 'http://api.xuetangx.com/edx/video?s3_url='
}
VIDEO_CDN_URL = {"CN": "http://api.xuetangx.com/edx/video?s3_url="}

# Courseware Search Index
FEATURES['ENABLE_COURSEWARE_INDEX'] = True
FEATURES['ENABLE_LIBRARY_INDEX'] = True
FEATURES["ENABLE_COURSEWARE_INDEX"] = True
FEATURES["ENABLE_LIBRARY_INDEX"] = True
SEARCH_ENGINE = "search.tests.mock_search_engine.MockSearchEngine"

FEATURES['ENABLE_ENROLLMENT_TRACK_USER_PARTITION'] = True
FEATURES["ENABLE_ENROLLMENT_TRACK_USER_PARTITION"] = True

########################## AUTHOR PERMISSION #######################
FEATURES['ENABLE_CREATOR_GROUP'] = False
FEATURES["ENABLE_CREATOR_GROUP"] = False

# teams feature
FEATURES['ENABLE_TEAMS'] = True
FEATURES["ENABLE_TEAMS"] = True

# Dummy secret key for dev/test
SECRET_KEY = '85920908f28904ed733fe576320db18cabd7b6cd'
SECRET_KEY = "85920908f28904ed733fe576320db18cabd7b6cd"

######### custom courses #########
INSTALLED_APPS += [
'openedx.core.djangoapps.ccxcon.apps.CCXConnectorConfig',
'common.djangoapps.third_party_auth.apps.ThirdPartyAuthConfig',
"openedx.core.djangoapps.ccxcon.apps.CCXConnectorConfig",
"common.djangoapps.third_party_auth.apps.ThirdPartyAuthConfig",
]
FEATURES['CUSTOM_COURSES_EDX'] = True
FEATURES["CUSTOM_COURSES_EDX"] = True

########################## VIDEO IMAGE STORAGE ############################
VIDEO_IMAGE_SETTINGS = dict(
VIDEO_IMAGE_MAX_BYTES=2 * 1024 * 1024, # 2 MB
VIDEO_IMAGE_MIN_BYTES=2 * 1024, # 2 KB
VIDEO_IMAGE_MAX_BYTES=2 * 1024 * 1024, # 2 MB
VIDEO_IMAGE_MIN_BYTES=2 * 1024, # 2 KB
STORAGE_KWARGS=dict(
location=MEDIA_ROOT,
),
DIRECTORY_PREFIX='video-images/',
DIRECTORY_PREFIX="video-images/",
BASE_URL=MEDIA_URL,
)
VIDEO_IMAGE_DEFAULT_FILENAME = 'default_video_image.png'
VIDEO_IMAGE_DEFAULT_FILENAME = "default_video_image.png"

########################## VIDEO TRANSCRIPTS STORAGE ############################
VIDEO_TRANSCRIPTS_SETTINGS = dict(
VIDEO_TRANSCRIPTS_MAX_BYTES=3 * 1024 * 1024, # 3 MB
VIDEO_TRANSCRIPTS_MAX_BYTES=3 * 1024 * 1024, # 3 MB
STORAGE_KWARGS=dict(
location=MEDIA_ROOT,
base_url=MEDIA_URL,
),
DIRECTORY_PREFIX='video-transcripts/',
DIRECTORY_PREFIX="video-transcripts/",
)

####################### Plugin Settings ##########################

# pylint: disable=wrong-import-position, wrong-import-order
from edx_django_utils.plugins import add_plugins

# pylint: disable=wrong-import-position, wrong-import-order
from openedx.core.djangoapps.plugins.constants import ProjectType, SettingsType

add_plugins(__name__, ProjectType.CMS, SettingsType.TEST)

########################## Derive Any Derived Settings #######################
Expand All @@ -310,22 +305,22 @@

# Used in edx-proctoring for ID generation in lieu of SECRET_KEY - dummy value
# (ref MST-637)
PROCTORING_USER_OBFUSCATION_KEY = '85920908f28904ed733fe576320db18cabd7b6cd'
PROCTORING_USER_OBFUSCATION_KEY = "85920908f28904ed733fe576320db18cabd7b6cd"

##### LOGISTRATION RATE LIMIT SETTINGS #####
LOGISTRATION_RATELIMIT_RATE = '5/5m'
LOGISTRATION_PER_EMAIL_RATELIMIT_RATE = '6/5m'
LOGISTRATION_API_RATELIMIT = '5/m'
LOGISTRATION_RATELIMIT_RATE = "5/5m"
LOGISTRATION_PER_EMAIL_RATELIMIT_RATE = "6/5m"
LOGISTRATION_API_RATELIMIT = "5/m"

REGISTRATION_VALIDATION_RATELIMIT = '5/minute'
REGISTRATION_RATELIMIT = '5/minute'
OPTIONAL_FIELD_API_RATELIMIT = '5/m'
REGISTRATION_VALIDATION_RATELIMIT = "5/minute"
REGISTRATION_RATELIMIT = "5/minute"
OPTIONAL_FIELD_API_RATELIMIT = "5/m"

RESET_PASSWORD_TOKEN_VALIDATE_API_RATELIMIT = '2/m'
RESET_PASSWORD_API_RATELIMIT = '2/m'
RESET_PASSWORD_TOKEN_VALIDATE_API_RATELIMIT = "2/m"
RESET_PASSWORD_API_RATELIMIT = "2/m"

############### Settings for proctoring ###############
PROCTORING_USER_OBFUSCATION_KEY = 'test_key'
PROCTORING_USER_OBFUSCATION_KEY = "test_key"

#################### Network configuration ####################
# Tests are not behind any proxies
Expand All @@ -339,10 +334,5 @@

############## openedx-learning (Learning Core) config ##############
OPENEDX_LEARNING = {
'MEDIA': {
'BACKEND': 'django.core.files.storage.InMemoryStorage',
'OPTIONS': {
'location': MEDIA_ROOT + "_private"
}
}
"MEDIA": {"BACKEND": "django.core.files.storage.InMemoryStorage", "OPTIONS": {"location": MEDIA_ROOT + "_private"}}
}
3 changes: 2 additions & 1 deletion common/djangoapps/student/tests/test_filters.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""
Test that various filters are fired for models/views in the student app.
"""
from django.conf import settings
from django.http import HttpResponse
from django.test import override_settings
from django.urls import reverse
Expand Down Expand Up @@ -421,7 +422,7 @@ def test_dashboard_redirect_account_settings(self):
response = self.client.get(self.dashboard_url)

self.assertEqual(status.HTTP_302_FOUND, response.status_code)
self.assertEqual(reverse("account_settings"), response.url)
self.assertEqual(settings.ACCOUNT_MICROFRONTEND_URL, response.url)

@override_settings(
OPEN_EDX_FILTERS_CONFIG={
Expand Down
2 changes: 1 addition & 1 deletion common/djangoapps/student/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ def test_redirect_account_settings(self):
"""
UserProfile.objects.get(user=self.user).delete()
response = self.client.get(self.path)
self.assertRedirects(response, reverse('account_settings'))
self.assertRedirects(response, settings.ACCOUNT_MICROFRONTEND_URL, target_status_code=302)

@patch('common.djangoapps.student.views.dashboard.learner_home_mfe_enabled')
def test_redirect_to_learner_home(self, mock_learner_home_mfe_enabled):
Expand Down
Loading
Loading