From 1f71b7dc4b89b8c97f40d84634d65b16a19dbddb Mon Sep 17 00:00:00 2001 From: "Dave St.Germain" Date: Tue, 21 Apr 2020 12:16:24 -0400 Subject: [PATCH] TNL-7148 This adds another field to the CourseOverviewTab model to support external links. --- .../migrations/0021_courseoverviewtab_link.py | 18 ++++++++++++++++++ .../content/course_overviews/models.py | 4 +++- .../courseware_api/tests/test_views.py | 17 ++++++++++++++++- 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 openedx/core/djangoapps/content/course_overviews/migrations/0021_courseoverviewtab_link.py diff --git a/openedx/core/djangoapps/content/course_overviews/migrations/0021_courseoverviewtab_link.py b/openedx/core/djangoapps/content/course_overviews/migrations/0021_courseoverviewtab_link.py new file mode 100644 index 0000000000..bc0bc6a933 --- /dev/null +++ b/openedx/core/djangoapps/content/course_overviews/migrations/0021_courseoverviewtab_link.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.12 on 2020-04-21 15:46 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('course_overviews', '0020_courseoverviewtab_url_slug'), + ] + + operations = [ + migrations.AddField( + model_name='courseoverviewtab', + name='link', + field=models.TextField(null=True), + ), + ] diff --git a/openedx/core/djangoapps/content/course_overviews/models.py b/openedx/core/djangoapps/content/course_overviews/models.py index cb28d09ca1..4bf77d1931 100644 --- a/openedx/core/djangoapps/content/course_overviews/models.py +++ b/openedx/core/djangoapps/content/course_overviews/models.py @@ -59,7 +59,7 @@ class CourseOverview(TimeStampedModel): app_label = 'course_overviews' # IMPORTANT: Bump this whenever you modify this model and/or add a migration. - VERSION = 9 + VERSION = 10 # Cache entry versioning. version = IntegerField() @@ -261,6 +261,7 @@ class CourseOverview(TimeStampedModel): name=tab.name, course_staff_only=tab.course_staff_only, url_slug=tab.get('url_slug'), + link=tab.get('link'), course_overview=course_overview) for tab in course.tabs ]) @@ -862,6 +863,7 @@ class CourseOverviewTab(models.Model): name = models.TextField(null=True) course_staff_only = models.BooleanField(default=False) url_slug = models.TextField(null=True) + link = models.TextField(null=True) def __str__(self): return self.tab_id diff --git a/openedx/core/djangoapps/courseware_api/tests/test_views.py b/openedx/core/djangoapps/courseware_api/tests/test_views.py index 45d7afac9f..23b01b48cf 100644 --- a/openedx/core/djangoapps/courseware_api/tests/test_views.py +++ b/openedx/core/djangoapps/courseware_api/tests/test_views.py @@ -12,6 +12,7 @@ from lms.djangoapps.courseware.access_utils import ( ACCESS_DENIED, ACCESS_GRANTED ) +from lms.djangoapps.courseware.tabs import ExternalLinkCourseTab from xmodule.modulestore.django import modulestore from xmodule.modulestore.tests.django_utils import ( @@ -40,6 +41,7 @@ class BaseCoursewareTests(SharedModuleStoreTestCase): emit_signals=True, modulestore=cls.store, ) + cls.user = UserFactory( username='student', email=u'user@example.com', @@ -63,6 +65,12 @@ class CourseApiTestViews(BaseCoursewareTests): """ Tests for the courseware REST API """ + @classmethod + def setUpClass(cls): + BaseCoursewareTests.setUpClass() + cls.course.tabs.append(ExternalLinkCourseTab.load('external_link', name='Zombo', link='http://zombo.com')) + cls.store.update_item(cls.course, cls.user.id) + @ddt.data( (True, None, ACCESS_DENIED), (True, 'audit', ACCESS_DENIED), @@ -85,7 +93,14 @@ class CourseApiTestViews(BaseCoursewareTests): enrollment = response.data['enrollment'] assert enrollment_mode == enrollment['mode'] assert enrollment['is_active'] - assert len(response.data['tabs']) == 4 + assert len(response.data['tabs']) == 5 + found = False + for tab in response.data['tabs']: + if tab['type'] == 'external_link' and tab['url'] == 'http://zombo.com': + found = True + break + else: + assert found, 'external link not in course tabs' elif enable_anonymous and not logged_in: # multiple checks use this handler check_public_access.assert_called()