From ffd1e29dd1d00249d7061ef5ee0d658db11e11cb Mon Sep 17 00:00:00 2001 From: Renzo Lucioni Date: Mon, 6 Jun 2016 13:59:23 -0400 Subject: [PATCH] Show Programs tab on program detail pages --- .../learner_dashboard/tests/test_programs.py | 21 ++++++++++++++----- lms/djangoapps/learner_dashboard/views.py | 2 ++ .../core/djangoapps/programs/tests/mixins.py | 1 + 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/lms/djangoapps/learner_dashboard/tests/test_programs.py b/lms/djangoapps/learner_dashboard/tests/test_programs.py index a8eef6d149..f306c9b180 100644 --- a/lms/djangoapps/learner_dashboard/tests/test_programs.py +++ b/lms/djangoapps/learner_dashboard/tests/test_programs.py @@ -6,6 +6,7 @@ import json import unittest from urlparse import urljoin +from bs4 import BeautifulSoup from django.conf import settings from django.core.urlresolvers import reverse from django.test import override_settings, TestCase @@ -51,7 +52,6 @@ class TestProgramListing( ClientFactory(name=CredentialsApiConfig.OAUTH2_CLIENT_NAME, client_type=CONFIDENTIAL) ClientFactory(name=ProgramsApiConfig.OAUTH2_CLIENT_NAME, client_type=CONFIDENTIAL) self.student = UserFactory() - self.create_programs_config(xseries_ad_enabled=True, program_listing_enabled=True) def _create_course_and_enroll(self, student, org, course, run): """ @@ -107,6 +107,7 @@ class TestProgramListing( @httpretty.activate def test_get_program_with_no_enrollment(self): + self.create_programs_config() response = self._setup_and_get_program() for program_element in self._get_program_checklist(0): self.assertNotContains(response, program_element) @@ -115,6 +116,7 @@ class TestProgramListing( @httpretty.activate def test_get_one_program(self): + self.create_programs_config() self._create_course_and_enroll(self.student, *self.COURSE_KEYS[0].split('/')) response = self._setup_and_get_program() for program_element in self._get_program_checklist(0): @@ -126,6 +128,7 @@ class TestProgramListing( @httpretty.activate def test_get_both_program(self): + self.create_programs_config() self._create_course_and_enroll(self.student, *self.COURSE_KEYS[0].split('/')) self._create_course_and_enroll(self.student, *self.COURSE_KEYS[5].split('/')) response = self._setup_and_get_program() @@ -143,7 +146,7 @@ class TestProgramListing( self.assertEqual(response.status_code, 404) def test_xseries_advertise_disabled(self): - self.create_programs_config(program_listing_enabled=True, xseries_ad_enabled=False) + self.create_programs_config(xseries_ad_enabled=False) self.client.login(username=self.student.username, password=self.PASSWORD) response = self.client.get(self.url) x_series_url = urljoin(settings.MKTG_URLS.get('ROOT'), 'xseries') @@ -194,7 +197,7 @@ class TestProgramListing( @httpretty.activate def test_get_xseries_certificates_with_data(self): - self.create_programs_config(program_listing_enabled=True) + self.create_programs_config() self.create_credentials_config(is_learner_issuance_enabled=True) self.client.login(username=self.student.username, password=self.PASSWORD) @@ -213,7 +216,7 @@ class TestProgramListing( @httpretty.activate def test_get_xseries_certificates_without_data(self): - self.create_programs_config(program_listing_enabled=True) + self.create_programs_config() self.create_credentials_config(is_learner_issuance_enabled=True) self.client.login(username=self.student.username, password=self.PASSWORD) @@ -283,8 +286,16 @@ class TestProgramDetails(ProgramsApiConfigMixin, SharedModuleStoreTestCase): def _assert_program_data_present(self, response): """Verify that program data is present.""" self.assertContains(response, 'programData') + self.assertContains(response, 'programListingUrl') self.assertContains(response, self.data['name']) - self.assertContains(response, reverse('program_listing_view')) + self._assert_programs_tab_present(response) + + def _assert_programs_tab_present(self, response): + """Verify that the programs tab is present in the nav.""" + soup = BeautifulSoup(response.content, 'html.parser') + self.assertTrue( + any(soup.find_all('a', class_='tab-nav-link', href=reverse('program_listing_view'))) + ) def test_login_required(self): """ diff --git a/lms/djangoapps/learner_dashboard/views.py b/lms/djangoapps/learner_dashboard/views.py index 204386d262..5de432cf68 100644 --- a/lms/djangoapps/learner_dashboard/views.py +++ b/lms/djangoapps/learner_dashboard/views.py @@ -63,10 +63,12 @@ def program_details(request, program_id): raise Http404 program_data = utils.supplement_program_data(program_data, request.user) + show_program_listing = ProgramsApiConfig.current().show_program_listing context = { 'program_data': program_data, 'program_listing_url': reverse('program_listing_view'), + 'show_program_listing': show_program_listing, 'nav_hidden': True, 'disable_courseware_js': True, 'uses_pattern_library': True diff --git a/openedx/core/djangoapps/programs/tests/mixins.py b/openedx/core/djangoapps/programs/tests/mixins.py index cb56b5917b..2a9c4360e8 100644 --- a/openedx/core/djangoapps/programs/tests/mixins.py +++ b/openedx/core/djangoapps/programs/tests/mixins.py @@ -22,6 +22,7 @@ class ProgramsApiConfigMixin(object): 'enable_studio_tab': True, 'enable_certification': True, 'xseries_ad_enabled': True, + 'program_listing_enabled': True, 'program_details_enabled': True, }