From 5a8d1d57602f6fa7670288b4747a03966e7a8852 Mon Sep 17 00:00:00 2001 From: danialmalik Date: Fri, 10 Jan 2020 16:11:58 +0500 Subject: [PATCH 01/13] change learnx to ucsd online --- .../edx_ace/commercesupportnotification/email/body.html | 2 +- .../edx_ace/commercesupportnotification/email/body.txt | 2 +- .../edx_ace/commercesupportnotification/email/subject.txt | 2 +- .../edx_ace/contactsupportnotification/email/body.html | 2 +- .../edx_ace/contactsupportnotification/email/body.txt | 2 +- .../edx_ace/contactsupportnotification/email/subject.txt | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/body.html b/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/body.html index 9f7b525f7b8a..ff55b620b96a 100644 --- a/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/body.html +++ b/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/body.html @@ -7,7 +7,7 @@

Hello,

-

LearnX was not able to process a user request, and we need to take action.

+

UC San Diego Online was not able to process a user request, and we need to take action.

Here are the details:

Learner: {{name}} ({{email}})

diff --git a/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/body.txt b/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/body.txt index 4f264522028d..331bb35784f7 100644 --- a/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/body.txt +++ b/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/body.txt @@ -2,7 +2,7 @@ {% block content %} Hello, - LearnX was not able to process a user request, and we need to take action. + UC San Diego Online was not able to process a user request, and we need to take action. Here are the details: Learner: {{name}} ({{email}}) diff --git a/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/subject.txt b/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/subject.txt index 1031e9f24aa5..36d7b9e3168b 100644 --- a/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/subject.txt +++ b/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/subject.txt @@ -1,3 +1,3 @@ {% load i18n %} -{% blocktrans %}[LearnX] Administrative Action Needed {{name}} {% endblocktrans %}{% if course %}{% blocktrans %}/ {{course}}{% endblocktrans %}{% endif %} +{% blocktrans %}[UC San Diego Online] Administrative Action Needed {{name}} {% endblocktrans %}{% if course %}{% blocktrans %}/ {{course}}{% endblocktrans %}{% endif %} diff --git a/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/contactsupportnotification/email/body.html b/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/contactsupportnotification/email/body.html index f5dcda67096f..3aa1b67bc38c 100644 --- a/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/contactsupportnotification/email/body.html +++ b/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/contactsupportnotification/email/body.html @@ -7,7 +7,7 @@

Hello,

-

We were contacted by a user on LearnX @ UC San Diego. Please take a moment to review and respond.

+

We were contacted by a user on UC San Diego Online. Please take a moment to review and respond.

Learner: {{name}} ({{email}})

{% if course %} diff --git a/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/contactsupportnotification/email/body.txt b/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/contactsupportnotification/email/body.txt index e511d032a1da..c3dda3b09725 100644 --- a/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/contactsupportnotification/email/body.txt +++ b/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/contactsupportnotification/email/body.txt @@ -2,7 +2,7 @@ {% block content %} Hello, - We were contacted by a user on LearnX @ UC San Diego. Please take a moment to review and respond. + We were contacted by a user on UC San Diego Online. Please take a moment to review and respond. Learner: {{name}} ({{email}}) {% if course %} Course: {{course}} diff --git a/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/contactsupportnotification/email/subject.txt b/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/contactsupportnotification/email/subject.txt index 8406c1f2146e..4bd4b979fc81 100644 --- a/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/contactsupportnotification/email/subject.txt +++ b/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/contactsupportnotification/email/subject.txt @@ -1,3 +1,3 @@ {% load i18n %} -{% blocktrans %}[LearnX] Support / Information Request {{name}}{% endblocktrans %} {% if course %}{% blocktrans %}/ {{course}}{% endblocktrans %}{% endif %} +{% blocktrans %}[UC San Diego Online] Support / Information Request {{name}}{% endblocktrans %} {% if course %}{% blocktrans %}/ {{course}}{% endblocktrans %}{% endif %} From 60ef2c34feb6c9f42bc9679e1e700a495029769d Mon Sep 17 00:00:00 2001 From: danialmalik Date: Fri, 17 Jan 2020 12:14:31 +0500 Subject: [PATCH 02/13] update subject for email --- .../edx_ace/commercesupportnotification/email/subject.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/subject.txt b/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/subject.txt index 36d7b9e3168b..0447ffd7d114 100644 --- a/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/subject.txt +++ b/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/subject.txt @@ -1,3 +1,3 @@ {% load i18n %} -{% blocktrans %}[UC San Diego Online] Administrative Action Needed {{name}} {% endblocktrans %}{% if course %}{% blocktrans %}/ {{course}}{% endblocktrans %}{% endif %} +{% blocktrans %}[UC San Diego Online] OpenEdX Administrative Action Needed for {{name}} {% endblocktrans %}{% if course %}{% blocktrans %}/ {{course}}{% endblocktrans %}{% endif %} From 3247a74cde8425b536a4496363f9a22417753ef3 Mon Sep 17 00:00:00 2001 From: imhassantariq Date: Tue, 21 Jan 2020 14:08:44 +0500 Subject: [PATCH 03/13] Default Course Image --- cms/envs/production.py | 1 + openedx/features/ucsd_features/signals.py | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/cms/envs/production.py b/cms/envs/production.py index ffc356c139c3..47852715fd2c 100644 --- a/cms/envs/production.py +++ b/cms/envs/production.py @@ -635,3 +635,4 @@ ########################## Derive Any Derived Settings ####################### derive_settings(__name__) +INSTALLED_APPS.append('openedx.features.ucsd_features') diff --git a/openedx/features/ucsd_features/signals.py b/openedx/features/ucsd_features/signals.py index 0fc5083db574..2b36f21b82a4 100644 --- a/openedx/features/ucsd_features/signals.py +++ b/openedx/features/ucsd_features/signals.py @@ -5,6 +5,7 @@ from django.db.models.signals import post_save from lms.djangoapps.verify_student.models import ManualVerification +from openedx.core.djangoapps.content.course_overviews.models import CourseOverview from student.models import UserProfile @@ -29,3 +30,14 @@ def generate_manual_verification_for_user(sender, instance, created, **kwargs): ) except Exception: # pylint: disable=broad-except logger.error('Error while generating ManualVerification for user: %s', instance.user.email, exc_info=True) + + +@receiver(post_save, sender=CourseOverview) +def course_image_change(sender, instance, created, **kwargs): + """ + Change the default course image whenever new course is created + """ + if created: + if instance.course_image_url.endswith('images_course_image.jpg'): + instance.course_image_url = "/static/" + settings.DEFAULT_COURSE_ABOUT_IMAGE_URL + instance.save() From a96b1b14eb332ca4fd186f1ccad709d72f24ea56 Mon Sep 17 00:00:00 2001 From: imhassantariq Date: Tue, 21 Jan 2020 14:08:44 +0500 Subject: [PATCH 04/13] Default Course Image --- openedx/features/ucsd_features/signals.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/openedx/features/ucsd_features/signals.py b/openedx/features/ucsd_features/signals.py index 2b36f21b82a4..16739b29c04b 100644 --- a/openedx/features/ucsd_features/signals.py +++ b/openedx/features/ucsd_features/signals.py @@ -2,7 +2,7 @@ from django.conf import settings from django.dispatch import receiver -from django.db.models.signals import post_save +from django.db.models.signals import post_save, pre_save from lms.djangoapps.verify_student.models import ManualVerification from openedx.core.djangoapps.content.course_overviews.models import CourseOverview @@ -32,12 +32,10 @@ def generate_manual_verification_for_user(sender, instance, created, **kwargs): logger.error('Error while generating ManualVerification for user: %s', instance.user.email, exc_info=True) -@receiver(post_save, sender=CourseOverview) -def course_image_change(sender, instance, created, **kwargs): +@receiver(pre_save, sender=CourseOverview) +def course_image_change(sender, instance, **kwargs): """ Change the default course image whenever new course is created """ - if created: - if instance.course_image_url.endswith('images_course_image.jpg'): - instance.course_image_url = "/static/" + settings.DEFAULT_COURSE_ABOUT_IMAGE_URL - instance.save() + if instance.course_image_url.endswith('images_course_image.jpg'): + instance.course_image_url = "/static/" + settings.DEFAULT_COURSE_ABOUT_IMAGE_URL From b74449c2b7970e7e9be6b424a52e27fe97d31465 Mon Sep 17 00:00:00 2001 From: Husnain Raza Ghaffar Date: Wed, 22 Jan 2020 12:52:14 +0500 Subject: [PATCH 05/13] Updated Test Eng scripts according to UCSD env --- scripts/Jenkinsfiles/bokchoy | 10 +++++----- scripts/Jenkinsfiles/lettuce | 10 +++++----- scripts/Jenkinsfiles/python | 12 ++++++------ scripts/Jenkinsfiles/quality | 12 ++++++------ 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/scripts/Jenkinsfiles/bokchoy b/scripts/Jenkinsfiles/bokchoy index 2d92adabd0a2..95c290fa5597 100644 --- a/scripts/Jenkinsfiles/bokchoy +++ b/scripts/Jenkinsfiles/bokchoy @@ -12,7 +12,7 @@ def runBokchoyTests() { checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: git_branch]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CloneOption', honorRefspec: true, noTags: true, shallow: true]], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'jenkins-worker', - refspec: git_refspec, url: "git@github.com:edx/${REPO_NAME}.git"]]] + refspec: git_refspec, url: "git@github.com:ucsd-ets/${REPO_NAME}.git"]]] console_output = sh(returnStdout: true, script: 'bash scripts/all-tests.sh').trim() dir('stdout') { writeFile file: "${TEST_SUITE}-${SHARD}-stdout.log", text: console_output @@ -43,7 +43,7 @@ pipeline { build job: 'github-build-status', parameters: [ string(name: 'GIT_SHA', value: commit_sha), - string(name: 'GITHUB_ORG', value: 'edx'), + string(name: 'GITHUB_ORG', value: 'ucsd-ets'), string(name: 'GITHUB_REPO', value: "${REPO_NAME}"), string(name: 'TARGET_URL', value: "${BUILD_URL}"), string(name: 'DESCRIPTION', value: 'Pending'), @@ -103,7 +103,7 @@ pipeline { build job: 'github-build-status', parameters: [ string(name: 'GIT_SHA', value: commit_sha), - string(name: 'GITHUB_ORG', value: 'edx'), + string(name: 'GITHUB_ORG', value: 'ucsd-ets'), string(name: 'GITHUB_REPO', value: "${REPO_NAME}"), string(name: 'TARGET_URL', value: "${BUILD_URL}"), string(name: 'DESCRIPTION', value: build_description), @@ -127,12 +127,12 @@ pipeline { } } emailext body: email_body, - subject: "Build failed in Jenkins: ${JOB_NAME} #${BUILD_NUMBER}", to: 'testeng@edx.org' + subject: "Build failed in Jenkins: ${JOB_NAME} #${BUILD_NUMBER}", to: 'devops@arbisoft.com' } else if (currentBuild.currentResult == "SUCCESS" && currentBuild.previousBuild.currentResult != "SUCCESS") { slackSend botUser: true, message: "`${JOB_NAME}` #${BUILD_NUMBER}: Back to normal after ${currentBuild.durationString.replace(' and counting', '')}\\n${BUILD_URL}" emailext body: "See <${BUILD_URL}>", - subject: "Jenkins Build is back to normal: ${JOB_NAME} #${BUILD_NUMBER}", to: 'testeng@edx.org' + subject: "Jenkins Build is back to normal: ${JOB_NAME} #${BUILD_NUMBER}", to: 'devops@arbisoft.com' } } } diff --git a/scripts/Jenkinsfiles/lettuce b/scripts/Jenkinsfiles/lettuce index 852fee6ca34d..f3375424ea63 100644 --- a/scripts/Jenkinsfiles/lettuce +++ b/scripts/Jenkinsfiles/lettuce @@ -11,7 +11,7 @@ def runLettuceTests() { checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: git_branch]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CloneOption', honorRefspec: true, noTags: true, shallow: true]], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'jenkins-worker', - refspec: git_refspec, url: "git@github.com:edx/${REPO_NAME}.git"]]] + refspec: git_refspec, url: "git@github.com:ucsd-ets/${REPO_NAME}.git"]]] console_output = sh(returnStdout: true, script: 'bash scripts/all-tests.sh').trim() dir('stdout') { writeFile file: "${TEST_SUITE}-stdout.log", text: console_output @@ -42,7 +42,7 @@ pipeline { build job: 'github-build-status', parameters: [ string(name: 'GIT_SHA', value: commit_sha), - string(name: 'GITHUB_ORG', value: 'edx'), + string(name: 'GITHUB_ORG', value: 'ucsd-ets'), string(name: 'GITHUB_REPO', value: "${REPO_NAME}"), string(name: 'TARGET_URL', value: "${BUILD_URL}"), string(name: 'DESCRIPTION', value: 'Pending'), @@ -118,7 +118,7 @@ pipeline { build job: 'github-build-status', parameters: [ string(name: 'GIT_SHA', value: commit_sha), - string(name: 'GITHUB_ORG', value: 'edx'), + string(name: 'GITHUB_ORG', value: 'ucsd-ets'), string(name: 'GITHUB_REPO', value: "${REPO_NAME}"), string(name: 'TARGET_URL', value: "${BUILD_URL}"), string(name: 'DESCRIPTION', value: build_description), @@ -141,11 +141,11 @@ pipeline { } } emailext body: email_body, - subject: "Build failed in Jenkins: ${JOB_NAME} #${BUILD_NUMBER}", to: 'testeng@edx.org' + subject: "Build failed in Jenkins: ${JOB_NAME} #${BUILD_NUMBER}", to: 'devops@arbisoft.com' } else if (currentBuild.currentResult == "SUCCESS" && currentBuild.previousBuild.currentResult != "SUCCESS") { slackSend "`${JOB_NAME}` #${BUILD_NUMBER}: Back to normal after ${currentBuild.durationString.replace(' and counting', '')}\n${BUILD_URL}" emailext body: "See <${BUILD_URL}>", - subject: "Jenkins Build is back to normal: ${JOB_NAME} #${BUILD_NUMBER}", to: 'testeng@edx.org' + subject: "Jenkins Build is back to normal: ${JOB_NAME} #${BUILD_NUMBER}", to: 'devops@arbisoft.com' } } } diff --git a/scripts/Jenkinsfiles/python b/scripts/Jenkinsfiles/python index e2b11c1a5e32..44b3a991348a 100644 --- a/scripts/Jenkinsfiles/python +++ b/scripts/Jenkinsfiles/python @@ -11,7 +11,7 @@ def runPythonTests() { checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: git_branch]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CloneOption', honorRefspec: true, noTags: true, shallow: true]], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'jenkins-worker', - refspec: git_refspec, url: "git@github.com:edx/${REPO_NAME}.git"]]] + refspec: git_refspec, url: "git@github.com:ucsd-ets/${REPO_NAME}.git"]]] console_output = sh(returnStdout: true, script: 'bash scripts/all-tests.sh').trim() dir('stdout') { writeFile file: "${TEST_SUITE}-stdout.log", text: console_output @@ -59,7 +59,7 @@ pipeline { build job: 'github-build-status', parameters: [ string(name: 'GIT_SHA', value: commit_sha), - string(name: 'GITHUB_ORG', value: 'edx'), + string(name: 'GITHUB_ORG', value: 'ucsd-ets'), string(name: 'GITHUB_REPO', value: "${REPO_NAME}"), string(name: 'TARGET_URL', value: "${BUILD_URL}"), string(name: 'DESCRIPTION', value: 'Pending'), @@ -158,7 +158,7 @@ pipeline { doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CloneOption', honorRefspec: true, noTags: true, shallow: true]], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'jenkins-worker', - refspec: git_refspec, url: "git@github.com:edx/${REPO_NAME}.git"]]] + refspec: git_refspec, url: "git@github.com:ucsd-ets/${REPO_NAME}.git"]]] unstash 'lms-unit-reports' unstash 'cms-unit-reports' unstash 'commonlib-unit-reports' @@ -208,7 +208,7 @@ pipeline { build job: 'github-build-status', parameters: [ string(name: 'GIT_SHA', value: commit_sha), - string(name: 'GITHUB_ORG', value: 'edx'), + string(name: 'GITHUB_ORG', value: 'ucsd-ets'), string(name: 'GITHUB_REPO', value: "${REPO_NAME}"), string(name: 'TARGET_URL', value: "${BUILD_URL}"), string(name: 'DESCRIPTION', value: build_description), @@ -232,12 +232,12 @@ pipeline { } } emailext body: email_body, - subject: "Build failed in Jenkins: ${JOB_NAME} #${BUILD_NUMBER}", to: 'testeng@edx.org' + subject: "Build failed in Jenkins: ${JOB_NAME} #${BUILD_NUMBER}", to: 'devops@arbisoft.com' } else if (currentBuild.currentResult == "SUCCESS" && currentBuild.previousBuild.currentResult != "SUCCESS") { slackSend botUser: true, message: "`${JOB_NAME}` #${BUILD_NUMBER}: Back to normal after ${currentBuild.durationString.replace(' and counting', '')}\n${BUILD_URL}" emailext body: "See <${BUILD_URL}>", - subject: "Jenkins Build is back to normal: ${JOB_NAME} #${BUILD_NUMBER}", to: 'testeng@edx.org' + subject: "Jenkins Build is back to normal: ${JOB_NAME} #${BUILD_NUMBER}", to: 'devops@arbisoft.com' } } } diff --git a/scripts/Jenkinsfiles/quality b/scripts/Jenkinsfiles/quality index 07a94aaae2e3..be92d2eea3af 100644 --- a/scripts/Jenkinsfiles/quality +++ b/scripts/Jenkinsfiles/quality @@ -19,7 +19,7 @@ def runQualityTests() { checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: git_branch]], doGenerateSubmoduleConfigurations: false, extensions: git_extensions, submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'jenkins-worker', - refspec: refspec, url: "git@github.com:edx/${REPO_NAME}.git"]]] + refspec: refspec, url: "git@github.com:ucsd-ets/${REPO_NAME}.git"]]] sh "bash scripts/all-tests.sh" stash includes: '**/reports/**/*', name: "${TEST_SUITE}-${SHARD}-reports" @@ -57,7 +57,7 @@ pipeline { build job: 'github-build-status', parameters: [ string(name: 'GIT_SHA', value: commit_sha), - string(name: 'GITHUB_ORG', value: 'edx'), + string(name: 'GITHUB_ORG', value: 'ucsd-ets'), string(name: 'GITHUB_REPO', value: "${REPO_NAME}"), string(name: 'TARGET_URL', value: "${BUILD_URL}"), string(name: 'DESCRIPTION', value: 'Pending'), @@ -165,7 +165,7 @@ pipeline { honorRefspec: true, noTags: true, shallow: false], [$class: 'WipeWorkspace']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'jenkins-worker', refspec: "+refs/heads/${ghprbTargetBranch}:refs/remotes/origin/${ghprbTargetBranch} +refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/*", - url: "git@github.com:edx/${REPO_NAME}.git"]]] + url: "git@github.com:ucsd-ets/${REPO_NAME}.git"]]] unstash 'quality-1-reports' unstash 'quality-2-reports' unstash 'quality-3-reports' @@ -220,7 +220,7 @@ pipeline { commit_sha = sh(returnStdout: true, script: 'git rev-parse HEAD').trim() build job: 'github-build-status', parameters: [ string(name: 'GIT_SHA', value: commit_sha), - string(name: 'GITHUB_ORG', value: 'edx'), + string(name: 'GITHUB_ORG', value: 'ucsd-ets'), string(name: 'GITHUB_REPO', value: "${REPO_NAME}"), string(name: 'TARGET_URL', value: "${BUILD_URL}"), string(name: 'DESCRIPTION', value: build_description), @@ -244,12 +244,12 @@ pipeline { } } emailext body: email_body, - subject: "Build failed in Jenkins: ${JOB_NAME} #${BUILD_NUMBER}", to: 'testeng@edx.org' + subject: "Build failed in Jenkins: ${JOB_NAME} #${BUILD_NUMBER}", to: 'devops@arbisoft.com' } else if (currentBuild.currentResult == "SUCCESS" && currentBuild.previousBuild.currentResult != "SUCCESS") { slackSend botUser: true, message: "`${JOB_NAME}` #${BUILD_NUMBER}: Back to normal after ${currentBuild.durationString.replace(' and counting', '')}\n${BUILD_URL}" emailext body: "See <${BUILD_URL}>", - subject: "Jenkins Build is back to normal: ${JOB_NAME} #${BUILD_NUMBER}", to: 'testeng@edx.org' + subject: "Jenkins Build is back to normal: ${JOB_NAME} #${BUILD_NUMBER}", to: 'devops@arbisoft.com' } } } From a0206667a5181482d13fb4402c48605295fcaaa0 Mon Sep 17 00:00:00 2001 From: danialmalik Date: Wed, 29 Jan 2020 12:16:57 +0500 Subject: [PATCH 06/13] Update log message to a more meaningful string --- lms/djangoapps/commerce/utils.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lms/djangoapps/commerce/utils.py b/lms/djangoapps/commerce/utils.py index 232d6878a62a..007ac8e85b15 100644 --- a/lms/djangoapps/commerce/utils.py +++ b/lms/djangoapps/commerce/utils.py @@ -39,6 +39,7 @@ def is_account_activation_requirement_disabled(): class EcommerceService(object): """ Helper class for ecommerce service integration. """ + def __init__(self): self.config = CommerceConfiguration.current() @@ -312,7 +313,8 @@ def _process_refund(refund_ids, api_client, mode, user, always_notify=False): # the "Refund Failure" emails from ecommerce and thus no need to send that notification # from here. if settings.FEATURES.get('DISABLE_REFUND_FAILURE_NOTIFICATION'): - log.info('Skipping refund failure support notification') + log.info('Skipping support notification for refund failure from edx-platform.' + 'The email will be sent from the ecommerce service') return True return _send_refund_notification(user, refunds_requiring_approval) except: # pylint: disable=bare-except From 6e2c73867c77b66832bf3c7d4eb3dcee1bac9c14 Mon Sep 17 00:00:00 2001 From: Hassan Tariq Date: Wed, 29 Jan 2020 14:34:27 +0500 Subject: [PATCH 07/13] Changed the Refund Failure email subject --- .../edx_ace/commercesupportnotification/email/subject.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/subject.txt b/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/subject.txt index 0447ffd7d114..0ca7e680d915 100644 --- a/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/subject.txt +++ b/openedx/features/ucsd_features/templates/ucsd_features/edx_ace/commercesupportnotification/email/subject.txt @@ -1,3 +1,3 @@ {% load i18n %} -{% blocktrans %}[UC San Diego Online] OpenEdX Administrative Action Needed for {{name}} {% endblocktrans %}{% if course %}{% blocktrans %}/ {{course}}{% endblocktrans %}{% endif %} +{% blocktrans %}[online.ucsd.edu] Open edX Administrative Action Needed for {{name}} {% endblocktrans %}{% if course %}{% blocktrans %}/ {{course}}{% endblocktrans %}{% endif %} From 817de1339647989d00c03c3b7462374e9a6d3d9a Mon Sep 17 00:00:00 2001 From: Hamza Farooq Date: Wed, 29 Jan 2020 14:50:58 +0500 Subject: [PATCH 08/13] FIX: Pep8 violations --- common/djangoapps/student/views/dashboard.py | 5 ++--- openedx/core/djangoapps/user_api/helpers.py | 2 +- openedx/core/djangoapps/zendesk_proxy/utils.py | 1 + 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/common/djangoapps/student/views/dashboard.py b/common/djangoapps/student/views/dashboard.py index 85d9c534fc84..265035b03ab2 100644 --- a/common/djangoapps/student/views/dashboard.py +++ b/common/djangoapps/student/views/dashboard.py @@ -807,7 +807,7 @@ def student_dashboard(request): valid_verification_statuses = ['approved', 'must_reverify', 'pending', 'expired'] display_sidebar_on_dashboard = (len(order_history_list) or (verification_status['status'] in valid_verification_statuses and - verification_status['should_display'])) + verification_status['should_display'])) # Filter out any course enrollment course cards that are associated with fulfilled entitlements for entitlement in [e for e in course_entitlements if e.enrollment_course_run is not None]: @@ -871,14 +871,13 @@ def student_dashboard(request): # course_id for which AuthorizeNet transaction has been perfromed but notification is yet to be received. transaction_hash = request.COOKIES.get(ECOMMERCE_TRANSACTION_COOKIE_NAME) if transaction_hash: - decoded_course_id = base64.b64decode(transaction_hash) + decoded_course_id = base64.b64decode(transaction_hash) transaction_course_id = CourseKey.from_string(decoded_course_id) pending_transaction_course_name = CourseOverview.get_from_id(transaction_course_id).display_name context.update({ 'pending_upgrade_course_name': pending_transaction_course_name, }) - if ecommerce_service.is_enabled(request.user): context.update({ 'use_ecommerce_payment_flow': True, diff --git a/openedx/core/djangoapps/user_api/helpers.py b/openedx/core/djangoapps/user_api/helpers.py index 2ca438eda9d6..f018f5c2468f 100644 --- a/openedx/core/djangoapps/user_api/helpers.py +++ b/openedx/core/djangoapps/user_api/helpers.py @@ -372,6 +372,7 @@ class LocalizedJSONEncoder(DjangoJSONEncoder): JSON handler that evaluates ugettext_lazy promises. """ # pylint: disable=method-hidden + def default(self, obj): """ Forces evaluation of ugettext_lazy promises. @@ -516,7 +517,6 @@ def _inner(request): # pylint: disable=missing-docstring else: response.content = msg - # Return the response, preserving the original headers. # This is really important, since the student views set cookies # that are used elsewhere in the system (such as the marketing site). diff --git a/openedx/core/djangoapps/zendesk_proxy/utils.py b/openedx/core/djangoapps/zendesk_proxy/utils.py index d7c2aa80fce5..f59dd9394008 100644 --- a/openedx/core/djangoapps/zendesk_proxy/utils.py +++ b/openedx/core/djangoapps/zendesk_proxy/utils.py @@ -12,6 +12,7 @@ log = logging.getLogger(__name__) + def create_zendesk_ticket(requester_name, requester_email, subject, body, custom_fields=None, uploads=None, tags=None): """ Create a Zendesk ticket via API or send an email to support team. From 4640bacf3ac2ea71c8e29986e320c735f2d429e7 Mon Sep 17 00:00:00 2001 From: Hamza Farooq Date: Thu, 30 Jan 2020 17:58:21 +0500 Subject: [PATCH 09/13] initial commit to replace certificate by statement of accomplishment --- lms/djangoapps/courseware/date_summary.py | 12 ++++++------ lms/djangoapps/courseware/tests/test_date_summary.py | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lms/djangoapps/courseware/date_summary.py b/lms/djangoapps/courseware/date_summary.py index 60850439bb2d..7af08377630e 100644 --- a/lms/djangoapps/courseware/date_summary.py +++ b/lms/djangoapps/courseware/date_summary.py @@ -435,7 +435,7 @@ class VerifiedUpgradeDeadlineDate(DateSummary): Verified track. """ css_class = 'verified-upgrade-deadline' - link_text = ugettext_lazy('Upgrade to Verified Certificate') + link_text = ugettext_lazy('Update Enrollment to Earn Statement of Accomplishment') @property def link(self): @@ -470,9 +470,9 @@ def date(self): def title(self): dynamic_deadline = self._dynamic_deadline() if dynamic_deadline is not None: - return _('Upgrade to Verified Certificate') + return _('Update Enrollment to Earn Statement of Accomplishment') - return _('Verification Upgrade Deadline') + return _('Statement of Accomplishment Enrollment Deadline') def _dynamic_deadline(self): if not self.enrollment: @@ -484,10 +484,10 @@ def _dynamic_deadline(self): def description(self): dynamic_deadline = self._dynamic_deadline() if dynamic_deadline is not None: - return _('Don\'t miss the opportunity to highlight your new knowledge and skills by earning a verified' - ' certificate.') + return _('Don\'t miss the opportunity to highlight your new knowledge and skills by' + ' earning a Statement of Accomplishment') - return _('You are still eligible to upgrade to a Verified Certificate! ' + return _('You are still eligible to update your enrollment and earn a Statement of Accomplishment! ' 'Pursue it to highlight the knowledge and skills you gain in this course.') @property diff --git a/lms/djangoapps/courseware/tests/test_date_summary.py b/lms/djangoapps/courseware/tests/test_date_summary.py index 30c13deb3f61..2c69ab2ded62 100644 --- a/lms/djangoapps/courseware/tests/test_date_summary.py +++ b/lms/djangoapps/courseware/tests/test_date_summary.py @@ -593,7 +593,7 @@ def test_date_with_self_paced_with_enrollment_before_course_start(self): self._check_text(block) def _check_text(self, upgrade_date_summary): - self.assertEqual(upgrade_date_summary.title, 'Upgrade to Verified Certificate') + self.assertEqual(upgrade_date_summary.title, 'Update Enrollment to Earn Statement of Accomplishment') self.assertEqual( upgrade_date_summary.description, 'Don\'t miss the opportunity to highlight your new knowledge and skills by earning a verified' From 76709e677157499d7a48082dfe2f40e253dd0246 Mon Sep 17 00:00:00 2001 From: danialmalik Date: Tue, 4 Feb 2020 17:16:23 +0500 Subject: [PATCH 10/13] Apply changes required for jenkins testing --- pavelib/paver_tests/test_paver_pytest_cmds.py | 6 +- pavelib/utils/test/suites/pytest_suite.py | 12 +- scripts/Jenkinsfiles/python | 42 ++-- scripts/Jenkinsfiles/quality | 10 +- scripts/unit-tests.sh | 4 +- scripts/xblock/xblock_counts.py | 2 +- scripts/xdist/prepare_xdist_nodes.sh | 29 ++- scripts/xdist/pytest_container_manager.py | 203 ---------------- scripts/xdist/pytest_worker_manager.py | 218 ++++++++++++++++++ scripts/xdist/terminate_xdist_nodes.sh | 10 +- 10 files changed, 283 insertions(+), 253 deletions(-) delete mode 100644 scripts/xdist/pytest_container_manager.py create mode 100644 scripts/xdist/pytest_worker_manager.py diff --git a/pavelib/paver_tests/test_paver_pytest_cmds.py b/pavelib/paver_tests/test_paver_pytest_cmds.py index 9a25f15c5a1c..ee0584a297e6 100644 --- a/pavelib/paver_tests/test_paver_pytest_cmds.py +++ b/pavelib/paver_tests/test_paver_pytest_cmds.py @@ -54,9 +54,9 @@ def _expected_command(self, root, test_id, pytestSubclass, run_under_coverage=Tr else: django_env_var_cmd = "export DJANGO_SETTINGS_MODULE='openedx.tests.settings'" - xdist_string = '--tx {}*ssh="ubuntu@{} -o StrictHostKeyChecking=no"' \ - '//python="source /edx/app/edxapp/edxapp_env; {}; python"' \ - '//chdir="/edx/app/edxapp/edx-platform"' \ + xdist_string = '--tx {}*ssh="jenkins@{} -o StrictHostKeyChecking=no"' \ + '//python="source edx-venv/bin/activate; {}; python"' \ + '//chdir="edx-platform"' \ .format(processes, ip, django_env_var_cmd) expected_statement.append(xdist_string) for rsync_dir in Env.rsync_dirs(): diff --git a/pavelib/utils/test/suites/pytest_suite.py b/pavelib/utils/test/suites/pytest_suite.py index 5fb755bc90d4..ba0598d32d6f 100644 --- a/pavelib/utils/test/suites/pytest_suite.py +++ b/pavelib/utils/test/suites/pytest_suite.py @@ -163,9 +163,9 @@ def cmd(self): # The django settings runtime command does not propagate to xdist remote workers django_env_var_cmd = 'export DJANGO_SETTINGS_MODULE={}' \ .format('{}.envs.{}'.format(self.root, self.settings)) - xdist_string = '--tx {}*ssh="ubuntu@{} -o StrictHostKeyChecking=no"' \ - '//python="source /edx/app/edxapp/edxapp_env; {}; python"' \ - '//chdir="/edx/app/edxapp/edx-platform"' \ + xdist_string = '--tx {}*ssh="jenkins@{} -o StrictHostKeyChecking=no"' \ + '//python="source edx-venv/bin/activate; {}; python"' \ + '//chdir="edx-platform"' \ .format(xdist_remote_processes, ip, django_env_var_cmd) cmd.append(xdist_string) for rsync_dir in Env.rsync_dirs(): @@ -284,9 +284,9 @@ def cmd(self): django_env_var_cmd = "export DJANGO_SETTINGS_MODULE='lms.envs.test'" else: django_env_var_cmd = "export DJANGO_SETTINGS_MODULE='openedx.tests.settings'" - xdist_string = '--tx {}*ssh="ubuntu@{} -o StrictHostKeyChecking=no"' \ - '//python="source /edx/app/edxapp/edxapp_env; {}; python"' \ - '//chdir="/edx/app/edxapp/edx-platform"' \ + xdist_string = '--tx {}*ssh="jenkins@{} -o StrictHostKeyChecking=no"' \ + '//python="source edx-venv/bin/activate; {}; python"' \ + '//chdir="edx-platform"' \ .format(xdist_remote_processes, ip, django_env_var_cmd) cmd.append(xdist_string) for rsync_dir in Env.rsync_dirs(): diff --git a/scripts/Jenkinsfiles/python b/scripts/Jenkinsfiles/python index 44b3a991348a..d472efa41a63 100644 --- a/scripts/Jenkinsfiles/python +++ b/scripts/Jenkinsfiles/python @@ -1,12 +1,7 @@ def runPythonTests() { // Determine git refspec, branch, and clone type - if (env.ghprbActualCommit) { - git_branch = "${ghprbActualCommit}" - git_refspec = "+refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/*" - } else { - git_branch = "${BRANCH_NAME}" - git_refspec = "+refs/heads/${BRANCH_NAME}:refs/remotes/origin/${BRANCH_NAME}" - } + git_branch = xdist_git_branch() + git_refspec = xdist_git_refspec() sshagent(credentials: ['jenkins-worker', 'jenkins-worker-pem'], ignoreMissing: true) { checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: git_branch]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CloneOption', honorRefspec: true, @@ -35,17 +30,30 @@ def xdist_git_branch() { } } +def xdist_git_refspec() { + if (env.ghprbActualCommit) { + return "+refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/*" + } else { + return "+refs/heads/${BRANCH_NAME}:refs/remotes/origin/${BRANCH_NAME}" + } +} + pipeline { - agent { label "ironwood-jenkins-worker" } + agent { label "jenkins-worker" } options { timestamps() timeout(60) } environment { - XDIST_CONTAINER_SUBNET = credentials('XDIST_CONTAINER_SUBNET') - XDIST_CONTAINER_SECURITY_GROUP = credentials('XDIST_CONTAINER_SECURITY_GROUP') - XDIST_CONTAINER_TASK_NAME = "ironwood-jenkins-worker-task" XDIST_GIT_BRANCH = xdist_git_branch() + XDIST_GIT_REFSPEC = xdist_git_refspec() + XDIST_INSTANCE_TYPE = "c5d.large" + XDIST_WORKER_AMI = credentials('XDIST_WORKER_AMI') + XDIST_WORKER_IAM_PROFILE_ARN = credentials('XDIST_WORKER_IAM_PROFILE_ARN') + XDIST_WORKER_KEY_NAME = "ucsd-jenkins-worker" + XDIST_WORKER_SUBNET = credentials('XDIST_WORKER_SUBNET') + XDIST_WORKER_SECURITY_GROUP = credentials('XDIST_WORKER_SECURITY_GROUP') + WTW_CONTEXT = "python" } stages { stage('Mark build as pending on Github') { @@ -74,10 +82,10 @@ pipeline { stage('Run Tests') { parallel { stage("lms-unit") { - agent { label "ironwood-jenkins-worker" } + agent { label "jenkins-worker" } environment { TEST_SUITE = "lms-unit" - XDIST_NUM_TASKS = 10 + XDIST_NUM_WORKERS = 10 XDIST_REMOTE_NUM_PROCESSES = 1 } steps { @@ -94,10 +102,10 @@ pipeline { } } stage("cms-unit") { - agent { label "ironwood-jenkins-worker" } + agent { label "jenkins-worker" } environment { TEST_SUITE = "cms-unit" - XDIST_NUM_TASKS = 3 + XDIST_NUM_WORKERS = 3 XDIST_REMOTE_NUM_PROCESSES = 1 } steps { @@ -114,10 +122,10 @@ pipeline { } } stage("commonlib-unit") { - agent { label "ironwood-jenkins-worker" } + agent { label "jenkins-worker" } environment { TEST_SUITE = "commonlib-unit" - XDIST_NUM_TASKS = 3 + XDIST_NUM_WORKERS = 3 XDIST_REMOTE_NUM_PROCESSES = 1 } steps { diff --git a/scripts/Jenkinsfiles/quality b/scripts/Jenkinsfiles/quality index be92d2eea3af..e06c1beae9c8 100644 --- a/scripts/Jenkinsfiles/quality +++ b/scripts/Jenkinsfiles/quality @@ -40,7 +40,7 @@ def qualityTestCleanup() { } pipeline { - agent { label "ironwood-jenkins-worker" } + agent { label "jenkins-worker" } options { timestamps() timeout(60) @@ -72,7 +72,7 @@ pipeline { stage('Run Tests') { parallel { stage("commonlib pylint") { - agent { label "ironwood-jenkins-worker" } + agent { label "jenkins-worker" } environment { TEST_SUITE = "quality" SHARD = 1 @@ -91,7 +91,7 @@ pipeline { } } stage("lms pylint") { - agent { label "ironwood-jenkins-worker" } + agent { label "jenkins-worker" } environment { TEST_SUITE = "quality" SHARD = 2 @@ -110,7 +110,7 @@ pipeline { } } stage("cms/openedx/pavelib pylint") { - agent { label "ironwood-jenkins-worker" } + agent { label "jenkins-worker" } environment { TEST_SUITE = "quality" SHARD = 3 @@ -129,7 +129,7 @@ pipeline { } } stage("Other quality checks") { - agent { label "ironwood-jenkins-worker" } + agent { label "jenkins-worker" } environment { TEST_SUITE = "quality" SHARD = 4 diff --git a/scripts/unit-tests.sh b/scripts/unit-tests.sh index 938708c8acff..93aa2b0bda70 100755 --- a/scripts/unit-tests.sh +++ b/scripts/unit-tests.sh @@ -36,9 +36,9 @@ if [[ -n "$TOXENV" ]]; then export NO_PREREQ_INSTALL="True" fi -if [[ -n "$XDIST_NUM_TASKS" ]]; then +if [[ -n "$XDIST_NUM_WORKERS" ]]; then bash scripts/xdist/prepare_xdist_nodes.sh - PAVER_ARGS="-v --xdist_ip_addresses="$( 0: + logger.info("Still waiting on {} workers to spin up".format(len(not_running))) + time.sleep(5) + else: + logger.info("Finished spinning up workers") + all_running = True + break + + if not all_running: + raise Exception( + "Timed out waiting to spin up all workers." + ) + logger.info("Successfully booted up {} workers.".format(number_of_workers)) + + not_ready_ip_addresses = ip_addresses[:] + logger.info("Checking ssh connection to workers.") + pool = Pool(processes=number_of_workers) + for ssh_try in range(0, self.WORKER_SSH_ATTEMPTS): + results = pool.map(_check_worker_ready, not_ready_ip_addresses) + deleted_ips = 0 + for num in range(0, len(results)): + if results[num] == 0: + del(not_ready_ip_addresses[num - deleted_ips]) + deleted_ips += 1 + + if len(not_ready_ip_addresses) == 0: + logger.info("All workers are ready for tests.") + break + + if ssh_try == self.WORKER_SSH_ATTEMPTS - 1: + raise Exception( + "Max ssh tries to remote workers reached." + ) + + logger.info("Not all workers are ready. Sleeping for 5 seconds then retrying.") + time.sleep(5) + + # Generate .txt files containing IP addresses and instance ids + ip_list_string = ",".join(ip_addresses) + logger.info("Worker IP list: {}".format(ip_list_string)) + ip_list_file = open("pytest_worker_ips.txt", "w") + ip_list_file.write(ip_list_string) + ip_list_file.close() + + worker_instance_id_list_string = ",".join(worker_instance_ids) + logger.info("Worker Instance Id list: {}".format(worker_instance_id_list_string)) + worker_arn_file = open("pytest_worker_instance_ids.txt", "w") + worker_arn_file.write(worker_instance_id_list_string) + worker_arn_file.close() + + def terminate_workers(self, worker_instance_ids): + """ + Terminates workers based on a list of worker_instance_ids. + """ + instance_id_list = worker_instance_ids.split(',') + response = self.ec2.terminate_instances( + InstanceIds=instance_id_list + ) + + +if __name__ == "__main__": + + parser = argparse.ArgumentParser( + description="PytestWorkerManager, manages EC2 workers in an AWS cluster." + ) + + parser.add_argument('--action', '-a', choices=['up', 'down'], default=None, + help="Action for PytestWorkerManager to perform. " + "Either up for spinning up AWS EC2 workers or down for terminating them") + + parser.add_argument('--region', '-g', default='us-west-2', + help="AWS region where EC2 infrastructure lives. Defaults to us-west-2") + + # Spinning up workers + parser.add_argument('--num-workers', '-n', type=int, default=None, + help="Number of EC2 workers to spin up") + + parser.add_argument('--ami', '-ami', default=None, + help="AMI for workers") + + parser.add_argument('--instance-type', '-type', default=None, + help="Desired EC2 instance type") + + parser.add_argument('--subnet-id', '-s', default=None, + help="Subnet for the workers to exist in") + + parser.add_argument('--security_groups', '-sg', nargs='+', default=None, + help="List of security group ids to apply to workers") + + parser.add_argument('--key-name', '-key', default=None, + help="Key pair name for sshing to worker") + + parser.add_argument('--iam-arn', '-iam', default=None, + help="Iam Instance Profile ARN for the workers") + + # Terminating workers + parser.add_argument('--instance-ids', '-ids', default=None, + help="Instance ids terminate") + + args = parser.parse_args() + workerManager = PytestWorkerManager(args.region) + + if args.action == 'up': + workerManager.spin_up_workers( + args.num_workers, + args.ami, + args.instance_type, + args.subnet_id, + args.security_groups, + args.key_name, + args.iam_arn + ) + elif args.action == 'down': + workerManager.terminate_workers( + args.instance_ids + ) + else: + logger.info("No action specified for PytestWorkerManager") diff --git a/scripts/xdist/terminate_xdist_nodes.sh b/scripts/xdist/terminate_xdist_nodes.sh index ee077a2c5739..e2997da6f7c5 100644 --- a/scripts/xdist/terminate_xdist_nodes.sh +++ b/scripts/xdist/terminate_xdist_nodes.sh @@ -1,10 +1,10 @@ #!/bin/bash set -e -if [ -f pytest_task_arns.txt ]; then - echo "Terminating xdist containers with pytest_container_manager.py" - xdist_task_arns=$( Date: Thu, 6 Feb 2020 12:29:29 +0500 Subject: [PATCH 11/13] Fixed the default course image issue in elasticsearch --- openedx/core/lib/courses.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/openedx/core/lib/courses.py b/openedx/core/lib/courses.py index 929a4ed81529..c0f59e780a30 100644 --- a/openedx/core/lib/courses.py +++ b/openedx/core/lib/courses.py @@ -10,6 +10,7 @@ from xmodule.assetstore.assetmgr import AssetManager from xmodule.contentstore.content import StaticContent from xmodule.contentstore.django import contentstore +from xmodule.exceptions import NotFoundError from xmodule.modulestore.django import modulestore @@ -32,8 +33,12 @@ def course_image_url(course, image_key='course_image'): url = settings.STATIC_URL + settings.DEFAULT_COURSE_ABOUT_IMAGE_URL else: loc = StaticContent.compute_location(course.id, getattr(course, image_key)) - url = StaticContent.serialize_asset_key_with_slash(loc) - + try: + AssetManager.find(loc) + except NotFoundError: + url = '/static/' + settings.DEFAULT_COURSE_ABOUT_IMAGE_URL + else: + url = StaticContent.serialize_asset_key_with_slash(loc) return url From 89c8afa630a4539a50daaa5f05fbfe1cdab169bf Mon Sep 17 00:00:00 2001 From: Muhammad Umar Khan Date: Thu, 6 Feb 2020 18:33:57 +0500 Subject: [PATCH 12/13] Update content for user deletion --- .../js/student_account/components/StudentAccountDeletion.jsx | 2 +- .../student_account/components/StudentAccountDeletionModal.jsx | 2 +- .../templates/course_experience/course-home-fragment.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lms/static/js/student_account/components/StudentAccountDeletion.jsx b/lms/static/js/student_account/components/StudentAccountDeletion.jsx index 0cf71ea1449c..556d0a8b59d9 100644 --- a/lms/static/js/student_account/components/StudentAccountDeletion.jsx +++ b/lms/static/js/student_account/components/StudentAccountDeletion.jsx @@ -39,7 +39,7 @@ export class StudentAccountDeletion extends React.Component { render() { const { deletionModalOpen, socialAuthConnected, isActive } = this.state; const loseAccessText = StringUtils.interpolate( - gettext('You may also lose access to verified certificates and other program credentials like MicroMasters certificates. If you want to make a copy of these for your records before proceeding with deletion, follow the instructions for {htmlStart}printing or downloading a certificate{htmlEnd}.'), + gettext('You may also lose access to verified certificates and other program credentials like MicroMasters certificates. If you want to make a copy of these for your records before proceeding with deletion, follow the instructions for {htmlStart}printing or downloading a statement of accomplishment{htmlEnd}.'), { htmlStart: '', htmlEnd: '', diff --git a/lms/static/js/student_account/components/StudentAccountDeletionModal.jsx b/lms/static/js/student_account/components/StudentAccountDeletionModal.jsx index e2e2b301a0a8..3619e20857b3 100644 --- a/lms/static/js/student_account/components/StudentAccountDeletionModal.jsx +++ b/lms/static/js/student_account/components/StudentAccountDeletionModal.jsx @@ -94,7 +94,7 @@ class StudentAccountDeletionConfirmationModal extends React.Component { } = this.state; const { onClose } = this.props; const loseAccessText = StringUtils.interpolate( - gettext('You may also lose access to verified certificates and other program credentials like MicroMasters certificates. If you want to make a copy of these for your records before proceeding with deletion, follow the instructions for {htmlStart}printing or downloading a certificate{htmlEnd}.'), + gettext('You may also lose access to verified certificates and other program credentials like MicroMasters certificates. If you want to make a copy of these for your records before proceeding with deletion, follow the instructions for {htmlStart}printing or downloading a statement of accomplishment{htmlEnd}.'), { htmlStart: '', htmlEnd: '', diff --git a/openedx/features/course_experience/templates/course_experience/course-home-fragment.html b/openedx/features/course_experience/templates/course_experience/course-home-fragment.html index c6dee98b27ac..22ba178055ec 100644 --- a/openedx/features/course_experience/templates/course_experience/course-home-fragment.html +++ b/openedx/features/course_experience/templates/course_experience/course-home-fragment.html @@ -141,7 +141,7 @@

${_("Course Tools")}

% endif % if upgrade_url and upgrade_price:
-

${_("Pursue a verified certificate")}

+

${_("Pursue a Statement of Accomplishment")}

From 9b286deec5e6e08712a7376b7ba8692bde439569 Mon Sep 17 00:00:00 2001 From: danialmalik Date: Fri, 7 Feb 2020 16:11:16 +0500 Subject: [PATCH 13/13] increase jenkins test worker timeout --- scripts/xdist/pytest_worker_manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/xdist/pytest_worker_manager.py b/scripts/xdist/pytest_worker_manager.py index ca432e04cbd1..4383d55316db 100644 --- a/scripts/xdist/pytest_worker_manager.py +++ b/scripts/xdist/pytest_worker_manager.py @@ -84,7 +84,7 @@ def spin_up_workers(self, number_of_workers, ami, instance_type, subnet, securit not_running = worker_instance_ids[:] ip_addresses = [] all_running = False - for attempt in range(0, self.WORKER_BOOTUP_TIMEOUT_MINUTES * 12): + for attempt in range(0, self.WORKER_BOOTUP_TIMEOUT_MINUTES * 30): try: list_workers_response = self.ec2.describe_instances(InstanceIds=not_running) except: