* INCR-239: Run python-modernize and isort on openedx/core/djangoapps/programs [tests, tasks]

* INCR-239: Grouped six package and represent unused variables with _
This commit is contained in:
Amit
2019-05-10 19:35:41 +03:00
committed by Michael Youngstrom
parent eb0f52d110
commit fd7527e136
7 changed files with 51 additions and 35 deletions

View File

@@ -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.

View File

@@ -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

View File

@@ -1,5 +1,7 @@
"""Factories for generating fake program-related data."""
# pylint: disable=missing-docstring
from __future__ import absolute_import
import factory

View File

@@ -1,4 +1,6 @@
"""Mixins for use during testing."""
from __future__ import absolute_import
from openedx.core.djangoapps.programs.models import ProgramsApiConfig

View File

@@ -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

View File

@@ -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')

View File

@@ -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()