From fd7527e13645831fa5a28d8f4c71c6c99bd88700 Mon Sep 17 00:00:00 2001 From: Amit <43564590+amitvadhel@users.noreply.github.com> Date: Fri, 10 May 2019 19:35:41 +0300 Subject: [PATCH] INCR-239 (#20510) * INCR-239: Run python-modernize and isort on openedx/core/djangoapps/programs [tests, tasks] * INCR-239: Grouped six package and represent unused variables with _ --- .../djangoapps/programs/tasks/v1/tasks.py | 4 +- .../programs/tasks/v1/tests/test_tasks.py | 9 ++-- .../djangoapps/programs/tests/factories.py | 2 + .../core/djangoapps/programs/tests/mixins.py | 2 + .../test_backpopulate_program_credentials.py | 11 +++-- .../djangoapps/programs/tests/test_signals.py | 9 ++-- .../djangoapps/programs/tests/test_utils.py | 49 ++++++++++--------- 7 files changed, 51 insertions(+), 35 deletions(-) diff --git a/openedx/core/djangoapps/programs/tasks/v1/tasks.py b/openedx/core/djangoapps/programs/tasks/v1/tasks.py index fda5c633ff..457b245593 100644 --- a/openedx/core/djangoapps/programs/tasks/v1/tasks.py +++ b/openedx/core/djangoapps/programs/tasks/v1/tasks.py @@ -1,6 +1,8 @@ """ This file contains celery tasks for programs-related functionality. """ +from __future__ import absolute_import + from celery import task from celery.exceptions import MaxRetriesExceededError from celery.utils.log import get_task_logger @@ -16,8 +18,8 @@ from openedx.core.djangoapps.certificates.api import available_date_for_certific from openedx.core.djangoapps.content.course_overviews.models import CourseOverview from openedx.core.djangoapps.credentials.models import CredentialsApiConfig from openedx.core.djangoapps.credentials.utils import get_credentials, get_credentials_api_client -from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers from openedx.core.djangoapps.programs.utils import ProgramProgressMeter +from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers LOGGER = get_task_logger(__name__) # Under cms the following setting is not defined, leading to errors during tests. diff --git a/openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py b/openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py index eeeae5bb91..2ad18790aa 100644 --- a/openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py +++ b/openedx/core/djangoapps/programs/tasks/v1/tests/test_tasks.py @@ -1,20 +1,23 @@ """ Tests for programs celery tasks. """ +from __future__ import absolute_import + import json import logging from datetime import datetime, timedelta + import ddt import httpretty import mock import pytz -from waffle.testutils import override_switch from celery.exceptions import MaxRetriesExceededError from django.conf import settings -from django.test import override_settings, TestCase +from django.test import TestCase, override_settings from edx_oauth2_provider.tests.factories import ClientFactory from edx_rest_api_client import exceptions from edx_rest_api_client.client import EdxRestApiClient +from waffle.testutils import override_switch from lms.djangoapps.certificates.tests.factories import GeneratedCertificateFactory from openedx.core.djangoapps.catalog.tests.mixins import CatalogIntegrationMixin @@ -22,7 +25,7 @@ from openedx.core.djangoapps.certificates.config import waffle from openedx.core.djangoapps.content.course_overviews.tests.factories import CourseOverviewFactory from openedx.core.djangoapps.credentials.tests.mixins import CredentialsApiConfigMixin from openedx.core.djangoapps.programs.tasks.v1 import tasks -from openedx.core.djangoapps.site_configuration.tests.factories import SiteFactory, SiteConfigurationFactory +from openedx.core.djangoapps.site_configuration.tests.factories import SiteConfigurationFactory, SiteFactory from openedx.core.djangolib.testing.utils import skip_unless_lms from student.tests.factories import UserFactory diff --git a/openedx/core/djangoapps/programs/tests/factories.py b/openedx/core/djangoapps/programs/tests/factories.py index efe7b11336..7c582e8e8c 100644 --- a/openedx/core/djangoapps/programs/tests/factories.py +++ b/openedx/core/djangoapps/programs/tests/factories.py @@ -1,5 +1,7 @@ """Factories for generating fake program-related data.""" # pylint: disable=missing-docstring +from __future__ import absolute_import + import factory diff --git a/openedx/core/djangoapps/programs/tests/mixins.py b/openedx/core/djangoapps/programs/tests/mixins.py index d1cf22af3d..ce5c7baaaf 100644 --- a/openedx/core/djangoapps/programs/tests/mixins.py +++ b/openedx/core/djangoapps/programs/tests/mixins.py @@ -1,4 +1,6 @@ """Mixins for use during testing.""" +from __future__ import absolute_import + from openedx.core.djangoapps.programs.models import ProgramsApiConfig diff --git a/openedx/core/djangoapps/programs/tests/test_backpopulate_program_credentials.py b/openedx/core/djangoapps/programs/tests/test_backpopulate_program_credentials.py index 7397c70563..9e081dffd0 100644 --- a/openedx/core/djangoapps/programs/tests/test_backpopulate_program_credentials.py +++ b/openedx/core/djangoapps/programs/tests/test_backpopulate_program_credentials.py @@ -1,19 +1,22 @@ """Tests for the backpopulate_program_credentials management command.""" +from __future__ import absolute_import + import ddt import mock from django.core.management import call_command from django.test import TestCase +from opaque_keys.edx.keys import CourseKey +from six.moves import range -from lms.djangoapps.certificates.models import CertificateStatuses from course_modes.models import CourseMode from lms.djangoapps.certificates.api import MODES +from lms.djangoapps.certificates.models import CertificateStatuses from lms.djangoapps.certificates.tests.factories import GeneratedCertificateFactory -from opaque_keys.edx.keys import CourseKey from openedx.core.djangoapps.catalog.tests.factories import ( - generate_course_run_key, - ProgramFactory, CourseFactory, CourseRunFactory, + ProgramFactory, + generate_course_run_key ) from openedx.core.djangoapps.catalog.tests.mixins import CatalogIntegrationMixin from openedx.core.djangoapps.content.course_overviews.tests.factories import CourseOverviewFactory diff --git a/openedx/core/djangoapps/programs/tests/test_signals.py b/openedx/core/djangoapps/programs/tests/test_signals.py index 59ccf6f061..2cae272231 100644 --- a/openedx/core/djangoapps/programs/tests/test_signals.py +++ b/openedx/core/djangoapps/programs/tests/test_signals.py @@ -2,16 +2,17 @@ This module contains tests for programs-related signals and signal handlers. """ -from django.test import TestCase +from __future__ import absolute_import + import mock - +from django.test import TestCase from opaque_keys.edx.keys import CourseKey -from student.tests.factories import UserFactory -from openedx.core.djangoapps.signals.signals import COURSE_CERT_AWARDED, COURSE_CERT_CHANGED from openedx.core.djangoapps.programs.signals import handle_course_cert_awarded, handle_course_cert_changed +from openedx.core.djangoapps.signals.signals import COURSE_CERT_AWARDED, COURSE_CERT_CHANGED from openedx.core.djangoapps.site_configuration.tests.factories import SiteConfigurationFactory from openedx.core.djangolib.testing.utils import skip_unless_lms +from student.tests.factories import UserFactory TEST_USERNAME = 'test-user' TEST_COURSE_KEY = CourseKey.from_string('course-v1:edX+test_course+1') diff --git a/openedx/core/djangoapps/programs/tests/test_utils.py b/openedx/core/djangoapps/programs/tests/test_utils.py index 0fc6429e6f..3dce58d302 100644 --- a/openedx/core/djangoapps/programs/tests/test_utils.py +++ b/openedx/core/djangoapps/programs/tests/test_utils.py @@ -1,4 +1,6 @@ """Tests covering Programs utilities.""" +from __future__ import absolute_import + import datetime import json import uuid @@ -7,17 +9,18 @@ from copy import deepcopy import ddt import httpretty import mock +import six +from six.moves import range from django.conf import settings -from django.urls import reverse from django.test import TestCase from django.test.utils import override_settings +from django.urls import reverse from pytz import utc - -from course_modes.models import CourseMode -from entitlements.tests.factories import CourseEntitlementFactory from testfixtures import LogCapture from waffle.testutils import override_switch +from course_modes.models import CourseMode +from entitlements.tests.factories import CourseEntitlementFactory from lms.djangoapps.certificates.api import MODES from lms.djangoapps.certificates.tests.factories import GeneratedCertificateFactory from lms.djangoapps.commerce.tests.test_utils import update_commerce_config @@ -99,7 +102,7 @@ class TestProgramProgressMeter(TestCase): self.assertEqual(meter.engaged_programs, []) self._assert_progress(meter) - self.assertEqual(meter.completed_programs_with_available_dates.keys(), []) + self.assertEqual(list(meter.completed_programs_with_available_dates.keys()), []) def test_enrollments_but_no_programs(self, mock_get_programs): """Verify behavior when enrollments exist, but no matching programs do.""" @@ -111,7 +114,7 @@ class TestProgramProgressMeter(TestCase): self.assertEqual(meter.engaged_programs, []) self._assert_progress(meter) - self.assertEqual(meter.completed_programs_with_available_dates.keys(), []) + self.assertEqual(list(meter.completed_programs_with_available_dates.keys()), []) def test_entitlements_but_no_programs(self, mock_get_programs): """ Verify engaged_programs is empty when entitlements exist, but no matching programs do. """ @@ -150,7 +153,7 @@ class TestProgramProgressMeter(TestCase): meter, ProgressFactory(uuid=program['uuid'], in_progress=1, grades={course_run_key: 0.0}) ) - self.assertEqual(meter.completed_programs_with_available_dates.keys(), []) + self.assertEqual(list(meter.completed_programs_with_available_dates.keys()), []) def test_single_program_entitlement(self, mock_get_programs): """ @@ -374,7 +377,7 @@ class TestProgramProgressMeter(TestCase): meter, *(ProgressFactory(uuid=program['uuid'], in_progress=1, grades=grades) for program in programs) ) - self.assertEqual(meter.completed_programs_with_available_dates.keys(), []) + self.assertEqual(list(meter.completed_programs_with_available_dates.keys()), []) def test_multiple_program_entitlement(self, mock_get_programs): """ @@ -447,7 +450,7 @@ class TestProgramProgressMeter(TestCase): meter, *(ProgressFactory(uuid=program['uuid'], in_progress=1, grades=grades) for program in programs) ) - self.assertEqual(meter.completed_programs_with_available_dates.keys(), []) + self.assertEqual(list(meter.completed_programs_with_available_dates.keys()), []) def test_shared_entitlement_engagement(self, mock_get_programs): """ @@ -498,17 +501,17 @@ class TestProgramProgressMeter(TestCase): # No enrollments, no programs in progress. meter = ProgramProgressMeter(self.site, self.user) self._assert_progress(meter) - self.assertEqual(meter.completed_programs_with_available_dates.keys(), []) + self.assertEqual(list(meter.completed_programs_with_available_dates.keys()), []) # One enrollment, one program in progress. self._create_enrollments(first_course_run_key) meter = ProgramProgressMeter(self.site, self.user) - program, program_uuid = data[0], data[0]['uuid'] + _, program_uuid = data[0], data[0]['uuid'] self._assert_progress( meter, ProgressFactory(uuid=program_uuid, in_progress=1, not_started=1, grades={first_course_run_key: 0.0}) ) - self.assertEqual(meter.completed_programs_with_available_dates.keys(), []) + self.assertEqual(list(meter.completed_programs_with_available_dates.keys()), []) # Two enrollments, all courses in progress. self._create_enrollments(second_course_run_key) @@ -524,7 +527,7 @@ class TestProgramProgressMeter(TestCase): }, ) ) - self.assertEqual(meter.completed_programs_with_available_dates.keys(), []) + self.assertEqual(list(meter.completed_programs_with_available_dates.keys()), []) # One valid certificate earned, one course complete. self._create_certificates(first_course_run_key, mode=MODES.verified) @@ -541,7 +544,7 @@ class TestProgramProgressMeter(TestCase): } ) ) - self.assertEqual(meter.completed_programs_with_available_dates.keys(), []) + self.assertEqual(list(meter.completed_programs_with_available_dates.keys()), []) # Invalid certificate earned, still one course to complete. (invalid because mode doesn't match the course) second_cert = self._create_certificates(second_course_run_key, mode=MODES.honor)[0] @@ -559,7 +562,7 @@ class TestProgramProgressMeter(TestCase): } ) ) - self.assertEqual(meter.completed_programs_with_available_dates.keys(), []) + self.assertEqual(list(meter.completed_programs_with_available_dates.keys()), []) # Second valid certificate obtained, all courses complete. second_cert.mode = MODES.verified @@ -576,7 +579,7 @@ class TestProgramProgressMeter(TestCase): } ) ) - self.assertEqual(meter.completed_programs_with_available_dates.keys(), [program_uuid]) + self.assertEqual(list(meter.completed_programs_with_available_dates.keys()), [program_uuid]) def test_nonverified_course_run_completion(self, mock_get_programs): """ @@ -601,12 +604,12 @@ class TestProgramProgressMeter(TestCase): self._create_certificates(course_run_key) meter = ProgramProgressMeter(self.site, self.user) - program, program_uuid = data[0], data[0]['uuid'] + _, program_uuid = data[0], data[0]['uuid'] self._assert_progress( meter, ProgressFactory(uuid=program_uuid, completed=1, grades={course_run_key: 0.0}) ) - self.assertEqual(meter.completed_programs_with_available_dates.keys(), [program_uuid]) + self.assertEqual(list(meter.completed_programs_with_available_dates.keys()), [program_uuid]) @mock.patch(UTILS_MODULE + '.available_date_for_certificate') def test_completed_programs_with_available_dates(self, mock_available_date_for_certificate, mock_get_programs): @@ -693,7 +696,7 @@ class TestProgramProgressMeter(TestCase): # Verify that the test program is not complete. meter = ProgramProgressMeter(self.site, self.user) - self.assertEqual(meter.completed_programs_with_available_dates.keys(), []) + self.assertEqual(list(meter.completed_programs_with_available_dates.keys()), []) # Grant a 'no-id-professional' certificate for one of the course runs, # thereby completing the program. @@ -702,7 +705,7 @@ class TestProgramProgressMeter(TestCase): # Verify that the program is complete. meter = ProgramProgressMeter(self.site, self.user) - self.assertEqual(meter.completed_programs_with_available_dates.keys(), [program['uuid']]) + self.assertEqual(list(meter.completed_programs_with_available_dates.keys()), [program['uuid']]) @mock.patch(UTILS_MODULE + '.ProgramProgressMeter.completed_course_runs', new_callable=mock.PropertyMock) def test_credit_course_counted_complete_for_verified(self, mock_completed_course_runs, mock_get_programs): @@ -797,7 +800,7 @@ def _create_course(self, course_price, course_run_count=1, make_entitlement=Fals course.instructor_info = self.instructors course = self.update_course(course, self.user.id) - run = CourseRunFactory(key=unicode(course.id), seats=[SeatFactory(price=course_price)]) + run = CourseRunFactory(key=six.text_type(course.id), seats=[SeatFactory(price=course_price)]) course_runs.append(run) entitlements = [EntitlementFactory()] if make_entitlement else [] @@ -833,7 +836,7 @@ class TestProgramDataExtender(ModuleStoreTestCase): self.course.end = datetime.datetime.now(utc) + datetime.timedelta(days=1) self.course = self.update_course(self.course, self.user.id) - self.course_run = CourseRunFactory(key=unicode(self.course.id)) + self.course_run = CourseRunFactory(key=six.text_type(self.course.id)) self.catalog_course = CourseFactory(course_runs=[self.course_run]) self.program = ProgramFactory(courses=[self.catalog_course]) self.course_price = 100 @@ -1475,7 +1478,7 @@ class TestProgramMarketingDataExtender(ModuleStoreTestCase): for __ in range(3): course = ModuleStoreCourseFactory() course = self.update_course(course, self.user.id) - course_runs.append(CourseRunFactory(key=unicode(course.id), seats=[])) + course_runs.append(CourseRunFactory(key=six.text_type(course.id), seats=[])) program = ProgramFactory(courses=[CourseFactory(course_runs=course_runs)]) data = ProgramMarketingDataExtender(program, self.user).extend()