From 6b6e87e7974ef5ccfd0d9453c69855cb0dfad64e Mon Sep 17 00:00:00 2001 From: Awais Qureshi <awais.qureshi@arbisoft.com> Date: Wed, 14 Apr 2021 15:17:32 +0500 Subject: [PATCH] refactor: upgrading factory-boy. --- lms/djangoapps/badges/tests/factories.py | 8 ++++---- lms/djangoapps/courseware/tests/test_date_summary.py | 7 +++++-- lms/djangoapps/experiments/factories.py | 4 ++-- lms/djangoapps/survey/tests/factories.py | 4 ++-- openedx/core/djangoapps/credit/tests/factories.py | 12 ++++++------ openedx/core/djangoapps/schedules/tests/factories.py | 6 +++--- .../course_duration_limits/tests/test_access.py | 12 ++++-------- requirements/constraints.txt | 3 --- requirements/edx/development.txt | 2 +- requirements/edx/testing.txt | 2 +- 10 files changed, 28 insertions(+), 32 deletions(-) diff --git a/lms/djangoapps/badges/tests/factories.py b/lms/djangoapps/badges/tests/factories.py index 7fca1fe3976..9a271dfa35e 100644 --- a/lms/djangoapps/badges/tests/factories.py +++ b/lms/djangoapps/badges/tests/factories.py @@ -30,7 +30,7 @@ def generate_dummy_image(_unused): ) -class CourseCompleteImageConfigurationFactory(DjangoModelFactory): +class CourseCompleteImageConfigurationFactory(factory.django.DjangoModelFactory): """ Factory for BadgeImageConfigurations """ @@ -41,7 +41,7 @@ class CourseCompleteImageConfigurationFactory(DjangoModelFactory): icon = factory.LazyAttribute(generate_dummy_image) -class BadgeClassFactory(DjangoModelFactory): +class BadgeClassFactory(factory.django.DjangoModelFactory): """ Factory for BadgeClass """ @@ -64,7 +64,7 @@ class RandomBadgeClassFactory(BadgeClassFactory): slug = factory.lazy_attribute(lambda _: 'test_slug_' + str(random()).replace('.', '_')) -class BadgeAssertionFactory(DjangoModelFactory): +class BadgeAssertionFactory(factory.django.DjangoModelFactory): """ Factory for BadgeAssertions """ @@ -78,7 +78,7 @@ class BadgeAssertionFactory(DjangoModelFactory): image_url = 'http://example.com/image.png' -class CourseEventBadgesConfigurationFactory(DjangoModelFactory): +class CourseEventBadgesConfigurationFactory(factory.django.DjangoModelFactory): """ Factory for CourseEventsBadgesConfiguration """ diff --git a/lms/djangoapps/courseware/tests/test_date_summary.py b/lms/djangoapps/courseware/tests/test_date_summary.py index c31ff417500..74c68e262db 100644 --- a/lms/djangoapps/courseware/tests/test_date_summary.py +++ b/lms/djangoapps/courseware/tests/test_date_summary.py @@ -40,6 +40,7 @@ from lms.djangoapps.verify_student.models import VerificationDeadline from lms.djangoapps.verify_student.services import IDVerificationService from lms.djangoapps.verify_student.tests.factories import SoftwareSecurePhotoVerificationFactory from openedx.core.djangoapps.content.course_overviews.models import CourseOverview +from openedx.core.djangoapps.content.course_overviews.tests.factories import CourseOverviewFactory from openedx.core.djangoapps.self_paced.models import SelfPacedConfiguration from openedx.core.djangoapps.site_configuration.tests.factories import SiteFactory # pylint: disable=unused-import from openedx.core.djangoapps.user_api.preferences.api import set_user_preference @@ -1016,7 +1017,8 @@ class TestScheduleOverrides(SharedModuleStoreTestCase): course = create_self_paced_course_run(days_till_start=-1, org_id='TestOrg') DynamicUpgradeDeadlineConfiguration.objects.create(enabled=True) if enroll_first: - enrollment = CourseEnrollmentFactory(course_id=course.id, mode=CourseMode.AUDIT, course__self_paced=True) + course_overview = CourseOverviewFactory.create(self_paced=True) + enrollment = CourseEnrollmentFactory(course_id=course.id, mode=CourseMode.AUDIT, course=course_overview) OrgDynamicUpgradeDeadlineConfiguration.objects.create( enabled=org_config_enabled, opt_out=org_config_opt_out, org_id=course.id.org ) @@ -1024,7 +1026,8 @@ class TestScheduleOverrides(SharedModuleStoreTestCase): enabled=course_config_enabled, opt_out=course_config_opt_out, course_id=course.id ) if not enroll_first: - enrollment = CourseEnrollmentFactory(course_id=course.id, mode=CourseMode.AUDIT, course__self_paced=True) + course_overview = CourseOverviewFactory.create(self_paced=True) + enrollment = CourseEnrollmentFactory(course_id=course.id, mode=CourseMode.AUDIT, course=course_overview) # The enrollment has a schedule, and the upgrade_deadline is set when expected_dynamic_deadline is True if not enroll_first: diff --git a/lms/djangoapps/experiments/factories.py b/lms/djangoapps/experiments/factories.py index fa0d5d3398a..049fb79a982 100644 --- a/lms/djangoapps/experiments/factories.py +++ b/lms/djangoapps/experiments/factories.py @@ -10,7 +10,7 @@ from common.djangoapps.student.tests.factories import UserFactory from lms.djangoapps.experiments.models import ExperimentData, ExperimentKeyValue -class ExperimentDataFactory(factory.DjangoModelFactory): # lint-amnesty, pylint: disable=missing-class-docstring +class ExperimentDataFactory(factory.django.DjangoModelFactory): # lint-amnesty, pylint: disable=missing-class-docstring class Meta: model = ExperimentData @@ -20,7 +20,7 @@ class ExperimentDataFactory(factory.DjangoModelFactory): # lint-amnesty, pylint value = factory.Faker('word') -class ExperimentKeyValueFactory(factory.DjangoModelFactory): # lint-amnesty, pylint: disable=missing-class-docstring +class ExperimentKeyValueFactory(factory.django.DjangoModelFactory): # lint-amnesty, pylint: disable=missing-class-docstring class Meta: model = ExperimentKeyValue diff --git a/lms/djangoapps/survey/tests/factories.py b/lms/djangoapps/survey/tests/factories.py index dd3c35b35e9..4fe7c0c0c01 100644 --- a/lms/djangoapps/survey/tests/factories.py +++ b/lms/djangoapps/survey/tests/factories.py @@ -5,7 +5,7 @@ from common.djangoapps.student.tests.factories import UserFactory from lms.djangoapps.survey.models import SurveyAnswer, SurveyForm -class SurveyFormFactory(factory.DjangoModelFactory): # lint-amnesty, pylint: disable=missing-class-docstring +class SurveyFormFactory(factory.django.DjangoModelFactory): # lint-amnesty, pylint: disable=missing-class-docstring class Meta: model = SurveyForm @@ -13,7 +13,7 @@ class SurveyFormFactory(factory.DjangoModelFactory): # lint-amnesty, pylint: di form = '<form>First name:<input type="text" name="firstname"/></form>' -class SurveyAnswerFactory(factory.DjangoModelFactory): # lint-amnesty, pylint: disable=missing-class-docstring +class SurveyAnswerFactory(factory.django.DjangoModelFactory): # lint-amnesty, pylint: disable=missing-class-docstring class Meta: model = SurveyAnswer diff --git a/openedx/core/djangoapps/credit/tests/factories.py b/openedx/core/djangoapps/credit/tests/factories.py index cc2f9165d6c..778b1f9ea26 100644 --- a/openedx/core/djangoapps/credit/tests/factories.py +++ b/openedx/core/djangoapps/credit/tests/factories.py @@ -21,7 +21,7 @@ from openedx.core.djangoapps.credit.models import ( from common.djangoapps.util.date_utils import to_timestamp -class CreditCourseFactory(factory.DjangoModelFactory): +class CreditCourseFactory(factory.django.DjangoModelFactory): class Meta: model = CreditCourse @@ -29,14 +29,14 @@ class CreditCourseFactory(factory.DjangoModelFactory): enabled = True -class CreditRequirementFactory(factory.DjangoModelFactory): +class CreditRequirementFactory(factory.django.DjangoModelFactory): class Meta: model = CreditRequirement course = factory.SubFactory(CreditCourseFactory) -class CreditRequirementStatusFactory(factory.DjangoModelFactory): +class CreditRequirementStatusFactory(factory.django.DjangoModelFactory): class Meta: model = CreditRequirementStatus @@ -44,7 +44,7 @@ class CreditRequirementStatusFactory(factory.DjangoModelFactory): status = CreditRequirementStatus.REQUIREMENT_STATUS_CHOICES[0][0] -class CreditProviderFactory(factory.DjangoModelFactory): +class CreditProviderFactory(factory.django.DjangoModelFactory): class Meta: model = CreditProvider @@ -52,14 +52,14 @@ class CreditProviderFactory(factory.DjangoModelFactory): provider_url = FuzzyText(prefix='http://') -class CreditEligibilityFactory(factory.DjangoModelFactory): +class CreditEligibilityFactory(factory.django.DjangoModelFactory): class Meta: model = CreditEligibility course = factory.SubFactory(CreditCourseFactory) -class CreditRequestFactory(factory.DjangoModelFactory): +class CreditRequestFactory(factory.django.DjangoModelFactory): class Meta: model = CreditRequest diff --git a/openedx/core/djangoapps/schedules/tests/factories.py b/openedx/core/djangoapps/schedules/tests/factories.py index 560e3d6689e..882b62fb8b7 100644 --- a/openedx/core/djangoapps/schedules/tests/factories.py +++ b/openedx/core/djangoapps/schedules/tests/factories.py @@ -11,14 +11,14 @@ from openedx.core.djangoapps.site_configuration.tests.factories import SiteFacto from common.djangoapps.student.tests.factories import CourseEnrollmentFactory -class ScheduleExperienceFactory(factory.DjangoModelFactory): +class ScheduleExperienceFactory(factory.django.DjangoModelFactory): class Meta: model = models.ScheduleExperience experience_type = models.ScheduleExperience.EXPERIENCES.default -class ScheduleFactory(factory.DjangoModelFactory): # lint-amnesty, pylint: disable=missing-class-docstring +class ScheduleFactory(factory.django.DjangoModelFactory): # lint-amnesty, pylint: disable=missing-class-docstring class Meta: model = models.Schedule @@ -28,7 +28,7 @@ class ScheduleFactory(factory.DjangoModelFactory): # lint-amnesty, pylint: disa experience = factory.RelatedFactory(ScheduleExperienceFactory, 'schedule') -class ScheduleConfigFactory(factory.DjangoModelFactory): # lint-amnesty, pylint: disable=missing-class-docstring +class ScheduleConfigFactory(factory.django.DjangoModelFactory): # lint-amnesty, pylint: disable=missing-class-docstring class Meta: model = models.ScheduleConfig diff --git a/openedx/features/course_duration_limits/tests/test_access.py b/openedx/features/course_duration_limits/tests/test_access.py index 263561dd5a9..1dbcbb33649 100644 --- a/openedx/features/course_duration_limits/tests/test_access.py +++ b/openedx/features/course_duration_limits/tests/test_access.py @@ -14,6 +14,7 @@ from common.djangoapps.course_modes.models import CourseMode from common.djangoapps.course_modes.tests.factories import CourseModeFactory from common.djangoapps.student.tests.factories import UserFactory from lms.djangoapps.courseware.models import DynamicUpgradeDeadlineConfiguration +from openedx.core.djangoapps.content.course_overviews.tests.factories import CourseOverviewFactory from openedx.core.djangoapps.schedules.models import Schedule from openedx.core.djangoapps.user_api.preferences.api import set_user_preference from openedx.core.djangolib.testing.utils import CacheIsolationTestCase @@ -36,6 +37,7 @@ class TestAccess(CacheIsolationTestCase): CourseDurationLimitConfig.objects.create(enabled=True, enabled_as_of=datetime(2018, 1, 1, tzinfo=UTC)) DynamicUpgradeDeadlineConfiguration.objects.create(enabled=True) + self.course = CourseOverviewFactory.create(start=datetime(2018, 1, 1, tzinfo=UTC), self_paced=True) def assertDateInMessage(self, date, message): # lint-amnesty, pylint: disable=missing-function-docstring # First, check that the formatted version is in there @@ -100,10 +102,7 @@ class TestAccess(CacheIsolationTestCase): else: course_upgrade_deadline = None - enrollment = CourseEnrollmentFactory.create( - course__start=datetime(2018, 1, 1, tzinfo=UTC), - course__self_paced=True, - ) + enrollment = CourseEnrollmentFactory.create(course=self.course) CourseModeFactory.create( course_id=enrollment.course.id, mode_slug=CourseMode.VERIFIED, @@ -140,10 +139,7 @@ class TestAccess(CacheIsolationTestCase): enrollment date, content_availability_date is set to max of course start or enrollment date """ - enrollment = CourseEnrollmentFactory.create( - course__start=datetime(2018, 1, 1, tzinfo=UTC), - course__self_paced=True, - ) + enrollment = CourseEnrollmentFactory.create(course=self.course) CourseModeFactory.create( course_id=enrollment.course.id, mode_slug=CourseMode.VERIFIED, diff --git a/requirements/constraints.txt b/requirements/constraints.txt index f6c3540cfb4..a54baba75d1 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -33,9 +33,6 @@ django-storages<1.9 # for them. edx-enterprise==3.22.4 -# Upgrading to 2.12.0 breaks several test classes due to API changes, need to update our code accordingly -factory-boy==2.8.1 - # Newer versions need a more recent version of python-dateutil freezegun==0.3.12 diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index 9ad2fceb3cc..6d969a92c21 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -138,7 +138,7 @@ enmerkar-underscore==2.0.0 # via -r requirements/edx/testing.txt enmerkar==0.7.1 # via -r requirements/edx/testing.txt, enmerkar-underscore event-tracking==1.0.4 # via -r requirements/edx/testing.txt, edx-event-routing-backends, edx-proctoring, edx-search execnet==1.8.0 # via -r requirements/edx/testing.txt, pytest-xdist -factory-boy==2.8.1 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.txt +factory-boy==3.2.0 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.txt faker==8.0.0 # via -r requirements/edx/testing.txt, factory-boy filelock==3.0.12 # via -r requirements/edx/testing.txt, tox, virtualenv freezegun==0.3.12 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.txt diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 3cee8e0f100..d2dc91f2304 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -134,7 +134,7 @@ enmerkar-underscore==2.0.0 # via -r requirements/edx/base.txt enmerkar==0.7.1 # via -r requirements/edx/base.txt, enmerkar-underscore event-tracking==1.0.4 # via -r requirements/edx/base.txt, edx-event-routing-backends, edx-proctoring, edx-search execnet==1.8.0 # via pytest-xdist -factory-boy==2.8.1 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.in +factory-boy==3.2.0 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.in faker==8.0.0 # via factory-boy filelock==3.0.12 # via tox, virtualenv freezegun==0.3.12 # via -c requirements/edx/../constraints.txt, -r requirements/edx/testing.in -- GitLab