diff --git a/openedx/core/djangoapps/appsembler/sites/tests/test_utils.py b/openedx/core/djangoapps/appsembler/sites/tests/test_utils.py index 61629f123387..46f03aae80ac 100644 --- a/openedx/core/djangoapps/appsembler/sites/tests/test_utils.py +++ b/openedx/core/djangoapps/appsembler/sites/tests/test_utils.py @@ -12,8 +12,10 @@ get_current_organization, get_initial_page_elements, get_active_sites, + get_lms_link_from_course_key ) from openedx.core.djangoapps.site_configuration.tests.factories import SiteFactory + from organizations.models import Organization @@ -126,3 +128,36 @@ def test_raises_if_multiorg_feature_and_multitenant_email_feature_on(self): self.request.site = self.siteFoo with self.assertRaises(ImproperlyConfigured): get_current_organization() + + +class LMSLinkByCourseOrgTestCase(TestCase): + """ + Exercise getting the appropriate LMS Link for Studio "View in LMS" + based on the organization value set on the course that is being viewed. + (note we don't test with custom domains since that is handled by middleware) + """ + def setUp(self): + super(LMSLinkByCourseOrgTestCase, self).setUp() + self.siteFoo = SiteFactory.create(domain='foo.dev', name='foo.dev') + self.courseKey = "course-v1:org+course+run" + self.base_lms_url = "lms_base.domain" + + @patch('openedx.core.djangoapps.appsembler.api.sites.get_site_for_course') + def test_lms_link_happy_path(self, mocked_get_site_for_course): + mocked_get_site_for_course.return_value = self.siteFoo + url = get_lms_link_from_course_key(self.base_lms_url, self.courseKey) + self.assertEqual(url, "foo.dev") + + @patch('openedx.core.djangoapps.appsembler.api.sites.get_site_for_course') + def test_lms_link_no_site_matching_course(self, mocked_get_site_for_course): + mocked_get_site_for_course.return_value = None + url = get_lms_link_from_course_key(self.base_lms_url, self.courseKey) + self.assertEqual(url, self.base_lms_url) + + @patch.dict('django.conf.settings.FEATURES', { + 'PREVIEW_LMS_BASE': 'preview.lms_base.domain' + }) + def test_lms_link_for_preview_always_return_preview_domain(self): + preview_url = "preview.lms_base.domain" + url = get_lms_link_from_course_key(preview_url, self.courseKey) + self.assertEqual(url, preview_url) diff --git a/openedx/core/djangoapps/appsembler/sites/utils.py b/openedx/core/djangoapps/appsembler/sites/utils.py index c87fe4b48126..3edb1f1a5e0e 100644 --- a/openedx/core/djangoapps/appsembler/sites/utils.py +++ b/openedx/core/djangoapps/appsembler/sites/utils.py @@ -37,12 +37,12 @@ def get_lms_link_from_course_key(base_lms_url, course_key): """ beeline.add_context_field("base_lms_url", base_lms_url) beeline.add_context_field("course_key", course_key) - try: - site_domain = Site.objects.get(name=course_key.org).domain - except Site.DoesNotExist: - site_domain = "{}.{}".format(course_key.org, base_lms_url) - - return site_domain + # avoid circular import + from openedx.core.djangoapps.appsembler.api.sites import get_site_for_course + course_site = get_site_for_course(course_key) + if course_site: + return course_site.domain + return base_lms_url @beeline.traced(name="get_site_by_organization")