From ca64946b996684359bfa78fa3b322e46725ce442 Mon Sep 17 00:00:00 2001 From: Mike Dikan Date: Wed, 1 Mar 2017 17:50:43 -0500 Subject: [PATCH] Remove deprecated references to ProgramsApiConfig model ECOM-7195 The (now deprecated) programs service had several fields to set up configuration of the API. We are removing the property/field references in codeas the first part of deprecating the model fields. Also being removed are the model properties. --- common/djangoapps/student/views.py | 2 +- common/test/acceptance/fixtures/programs.py | 1 + .../learner_dashboard/tests/test_programs.py | 4 +- lms/djangoapps/learner_dashboard/views.py | 8 +-- .../student_account/test/test_views.py | 4 +- lms/djangoapps/student_account/views.py | 2 +- openedx/core/djangoapps/programs/models.py | 49 -------------- .../core/djangoapps/programs/tests/mixins.py | 1 + .../djangoapps/programs/tests/test_models.py | 67 ------------------- 9 files changed, 12 insertions(+), 126 deletions(-) delete mode 100644 openedx/core/djangoapps/programs/tests/test_models.py diff --git a/common/djangoapps/student/views.py b/common/djangoapps/student/views.py index 616d732bfe..1d8c08e1b1 100644 --- a/common/djangoapps/student/views.py +++ b/common/djangoapps/student/views.py @@ -830,7 +830,7 @@ def dashboard(request): 'courses_requirements_not_met': courses_requirements_not_met, 'nav_hidden': True, 'inverted_programs': inverted_programs, - 'show_program_listing': ProgramsApiConfig.current().show_program_listing, + 'show_program_listing': ProgramsApiConfig.is_enabled(), 'disable_courseware_js': True, 'display_course_modes_on_dashboard': enable_verified_certificates and display_course_modes_on_dashboard, } diff --git a/common/test/acceptance/fixtures/programs.py b/common/test/acceptance/fixtures/programs.py index 7c16344774..260c13bdc3 100644 --- a/common/test/acceptance/fixtures/programs.py +++ b/common/test/acceptance/fixtures/programs.py @@ -8,6 +8,7 @@ class ProgramsConfigMixin(object): """Mixin providing a method used to configure the programs feature.""" def set_programs_api_configuration(self, is_enabled=False, api_version=1): """Dynamically adjusts the Programs config model during tests.""" + # Update these paramters once fields are removed from model ConfigModelFixture('/config/programs', { 'enabled': is_enabled, 'api_version_number': api_version, diff --git a/lms/djangoapps/learner_dashboard/tests/test_programs.py b/lms/djangoapps/learner_dashboard/tests/test_programs.py index a390864a82..d9bd9652c0 100644 --- a/lms/djangoapps/learner_dashboard/tests/test_programs.py +++ b/lms/djangoapps/learner_dashboard/tests/test_programs.py @@ -121,7 +121,7 @@ class TestProgramListing(ProgramsApiConfigMixin, CredentialsApiConfigMixin, Shar """ Verify that the page 404s if disabled. """ - self.create_programs_config(program_listing_enabled=False) + self.create_programs_config(enabled=False) response = self.client.get(self.url) self.assertEqual(response.status_code, 404) @@ -294,7 +294,7 @@ class TestProgramDetails(ProgramsApiConfigMixin, CatalogIntegrationMixin, Shared """ Verify that the page 404s if disabled. """ - self.create_programs_config(program_details_enabled=False) + self.create_programs_config(enabled=False) response = self.client.get(self.url) self.assertEqual(response.status_code, 404) diff --git a/lms/djangoapps/learner_dashboard/views.py b/lms/djangoapps/learner_dashboard/views.py index 3336a91313..85f939ed69 100644 --- a/lms/djangoapps/learner_dashboard/views.py +++ b/lms/djangoapps/learner_dashboard/views.py @@ -22,7 +22,7 @@ from openedx.core.djangoapps.user_api.preferences.api import get_user_preference def program_listing(request): """View a list of programs in which the user is engaged.""" programs_config = ProgramsApiConfig.current() - if not programs_config.show_program_listing: + if not programs_config.enabled: raise Http404 meter = ProgramProgressMeter(request.user) @@ -34,7 +34,7 @@ def program_listing(request): 'nav_hidden': True, 'programs': meter.engaged_programs, 'progress': meter.progress, - 'show_program_listing': programs_config.show_program_listing, + 'show_program_listing': programs_config.enabled, 'uses_pattern_library': True, } @@ -46,7 +46,7 @@ def program_listing(request): def program_details(request, program_uuid): """View details about a specific program.""" programs_config = ProgramsApiConfig.current() - if not programs_config.show_program_details: + if not programs_config.enabled: raise Http404 program_data = get_programs(uuid=program_uuid) @@ -66,7 +66,7 @@ def program_details(request, program_uuid): context = { 'program_data': program_data, 'urls': urls, - 'show_program_listing': programs_config.show_program_listing, + 'show_program_listing': programs_config.enabled, 'nav_hidden': True, 'disable_courseware_js': True, 'uses_pattern_library': True, diff --git a/lms/djangoapps/student_account/test/test_views.py b/lms/djangoapps/student_account/test/test_views.py index f05f6c2934..d91aa88bda 100644 --- a/lms/djangoapps/student_account/test/test_views.py +++ b/lms/djangoapps/student_account/test/test_views.py @@ -596,7 +596,7 @@ class AccountSettingsViewTest(ThirdPartyAuthTestMixin, TestCase, ProgramsApiConf """ Verify that tabs header will be shown while program listing is enabled. """ - self.create_programs_config(program_listing_enabled=True) + self.create_programs_config() view_path = reverse('account_settings') response = self.client.get(path=view_path) @@ -606,7 +606,7 @@ class AccountSettingsViewTest(ThirdPartyAuthTestMixin, TestCase, ProgramsApiConf """ Verify that nav header will be shown while program listing is disabled. """ - self.create_programs_config(program_listing_enabled=False) + self.create_programs_config(enabled=False) view_path = reverse('account_settings') response = self.client.get(path=view_path) diff --git a/lms/djangoapps/student_account/views.py b/lms/djangoapps/student_account/views.py index 9599dc810e..9a355f3b55 100644 --- a/lms/djangoapps/student_account/views.py +++ b/lms/djangoapps/student_account/views.py @@ -471,7 +471,7 @@ def account_settings_context(request): 'user_accounts_api_url': reverse("accounts_api", kwargs={'username': user.username}), 'user_preferences_api_url': reverse('preferences_api', kwargs={'username': user.username}), 'disable_courseware_js': True, - 'show_program_listing': ProgramsApiConfig.current().show_program_listing, + 'show_program_listing': ProgramsApiConfig.is_enabled(), 'order_history': user_orders } diff --git a/openedx/core/djangoapps/programs/models.py b/openedx/core/djangoapps/programs/models.py index b46b314615..c4d5f38e21 100644 --- a/openedx/core/djangoapps/programs/models.py +++ b/openedx/core/djangoapps/programs/models.py @@ -94,52 +94,3 @@ class ProgramsApiConfig(ConfigurationModel): verbose_name=_("Do we want to show program details pages"), default=False ) - - @property - def internal_api_url(self): - """ - Generate a URL based on internal service URL and API version number. - """ - return urljoin(self.internal_service_url, '/api/v{}/'.format(self.api_version_number)) - - @property - def public_api_url(self): - """ - Generate a URL based on public service URL and API version number. - """ - return urljoin(self.public_service_url, '/api/v{}/'.format(self.api_version_number)) - - @property - def is_cache_enabled(self): - """Whether responses from the Programs API will be cached.""" - return self.cache_ttl > 0 - - @property - def is_studio_tab_enabled(self): - """ - Indicates whether Studio functionality related to Programs should - be enabled or not. - """ - return self.enabled and self.enable_studio_tab - - @property - def is_certification_enabled(self): - """ - Indicates whether background tasks should be initiated to grant - certificates for Program completion. - """ - return self.enabled and self.enable_certification - - @property - def show_program_listing(self): - """ - Indicates whether we want to show program listing page - """ - return self.enabled and self.program_listing_enabled - - @property - def show_program_details(self): - """ - Indicates whether we want to show program details pages - """ - return self.enabled and self.program_details_enabled diff --git a/openedx/core/djangoapps/programs/tests/mixins.py b/openedx/core/djangoapps/programs/tests/mixins.py index 42d73293b7..91e73d9895 100644 --- a/openedx/core/djangoapps/programs/tests/mixins.py +++ b/openedx/core/djangoapps/programs/tests/mixins.py @@ -5,6 +5,7 @@ from openedx.core.djangoapps.programs.models import ProgramsApiConfig class ProgramsApiConfigMixin(object): """Utilities for working with Programs configuration during testing.""" + # Update these paramters once fields are removed from model DEFAULTS = { 'enabled': True, 'api_version_number': 1, diff --git a/openedx/core/djangoapps/programs/tests/test_models.py b/openedx/core/djangoapps/programs/tests/test_models.py deleted file mode 100644 index fcc462495f..0000000000 --- a/openedx/core/djangoapps/programs/tests/test_models.py +++ /dev/null @@ -1,67 +0,0 @@ -"""Tests for models supporting Program-related functionality.""" -import ddt -from django.test import TestCase -import mock -from nose.plugins.attrib import attr - -from openedx.core.djangoapps.programs.tests.mixins import ProgramsApiConfigMixin -from openedx.core.djangolib.testing.utils import skip_unless_lms - - -@skip_unless_lms -@attr(shard=2) -@ddt.ddt -# ConfigurationModels use the cache. Make every cache get a miss. -@mock.patch('config_models.models.cache.get', return_value=None) -class TestProgramsApiConfig(ProgramsApiConfigMixin, TestCase): - """Tests covering the ProgramsApiConfig model.""" - def test_url_construction(self, _mock_cache): - """Verify that URLs returned by the model are constructed correctly.""" - programs_config = self.create_programs_config() - - self.assertEqual( - programs_config.internal_api_url, - programs_config.internal_service_url.strip('/') + '/api/v{}/'.format(programs_config.api_version_number) - ) - self.assertEqual( - programs_config.public_api_url, - programs_config.public_service_url.strip('/') + '/api/v{}/'.format(programs_config.api_version_number) - ) - - @ddt.data( - (0, False), - (1, True), - ) - @ddt.unpack - def test_cache_control(self, cache_ttl, is_cache_enabled, _mock_cache): - """Verify the behavior of the property controlling whether API responses are cached.""" - programs_config = self.create_programs_config(cache_ttl=cache_ttl) - self.assertEqual(programs_config.is_cache_enabled, is_cache_enabled) - - def test_is_studio_tab_enabled(self, _mock_cache): - """ - Verify that the property controlling display of the Studio tab is only True - when configuration is enabled and all required configuration is provided. - """ - programs_config = self.create_programs_config(enabled=False) - self.assertFalse(programs_config.is_studio_tab_enabled) - - programs_config = self.create_programs_config(enable_studio_tab=False) - self.assertFalse(programs_config.is_studio_tab_enabled) - - programs_config = self.create_programs_config() - self.assertTrue(programs_config.is_studio_tab_enabled) - - def test_is_certification_enabled(self, _mock_cache): - """ - Verify that the property controlling certification-related functionality - for Programs behaves as expected. - """ - programs_config = self.create_programs_config(enabled=False) - self.assertFalse(programs_config.is_certification_enabled) - - programs_config = self.create_programs_config(enable_certification=False) - self.assertFalse(programs_config.is_certification_enabled) - - programs_config = self.create_programs_config() - self.assertTrue(programs_config.is_certification_enabled)