From 17e92f5518f07dcb75e7fea14e3cf734182bcc15 Mon Sep 17 00:00:00 2001 From: Clinton Blackburn Date: Fri, 6 May 2016 02:13:17 -0400 Subject: [PATCH] Credit test cleanup Removed a lot of duplicate code! ECOM-4379 --- .../core/djangoapps/credit/tests/test_api.py | 30 ++++++++------- .../djangoapps/credit/tests/test_signals.py | 38 +++++++++---------- 2 files changed, 33 insertions(+), 35 deletions(-) diff --git a/openedx/core/djangoapps/credit/tests/test_api.py b/openedx/core/djangoapps/credit/tests/test_api.py index d68fe77b6a..02c9be41a2 100644 --- a/openedx/core/djangoapps/credit/tests/test_api.py +++ b/openedx/core/djangoapps/credit/tests/test_api.py @@ -371,7 +371,15 @@ class CreditRequirementApiTests(CreditApiTestBase): eligibilities = api.get_eligibilities_for_user("staff") self.assertEqual(eligibilities, []) + def assert_grade_requirement_status(self, expected_status, expected_order): + """ Assert the status and order of the grade requirement. """ + req_status = api.get_credit_requirement_status(self.course_key, 'staff', namespace="grade", name="grade") + self.assertEqual(req_status[0]["status"], expected_status) + self.assertEqual(req_status[0]["order"], expected_order) + return req_status + def test_set_credit_requirement_status(self): + username = "staff" self.add_credit_course() requirements = [ { @@ -395,40 +403,34 @@ class CreditRequirementApiTests(CreditApiTestBase): self.assertEqual(len(course_requirements), 2) # Initially, the status should be None - req_status = api.get_credit_requirement_status(self.course_key, "staff", namespace="grade", name="grade") - self.assertEqual(req_status[0]["status"], None) - self.assertEqual(req_status[0]["order"], 0) + self.assert_grade_requirement_status(None, 0) # Set the requirement to "satisfied" and check that it's actually set - api.set_credit_requirement_status("staff", self.course_key, "grade", "grade") - req_status = api.get_credit_requirement_status(self.course_key, "staff", namespace="grade", name="grade") - self.assertEqual(req_status[0]["status"], "satisfied") - self.assertEqual(req_status[0]["order"], 0) + api.set_credit_requirement_status(username, self.course_key, "grade", "grade") + self.assert_grade_requirement_status('satisfied', 0) # Set the requirement to "failed" and check that it's actually set - api.set_credit_requirement_status("staff", self.course_key, "grade", "grade", status="failed") - req_status = api.get_credit_requirement_status(self.course_key, "staff", namespace="grade", name="grade") - self.assertEqual(req_status[0]["status"], "failed") - self.assertEqual(req_status[0]["order"], 0) + api.set_credit_requirement_status(username, self.course_key, "grade", "grade", status="failed") + self.assert_grade_requirement_status('failed', 0) req_status = api.get_credit_requirement_status(self.course_key, "staff") self.assertEqual(req_status[0]["status"], "failed") self.assertEqual(req_status[0]["order"], 0) - # make sure the 'order' on the 2nd requiemtn is set correctly (aka 1) + # make sure the 'order' on the 2nd requirement is set correctly (aka 1) self.assertEqual(req_status[1]["status"], None) self.assertEqual(req_status[1]["order"], 1) # Set the requirement to "declined" and check that it's actually set api.set_credit_requirement_status( - "staff", self.course_key, + username, self.course_key, "reverification", "i4x://edX/DemoX/edx-reverification-block/assessment_uuid", status="declined" ) req_status = api.get_credit_requirement_status( self.course_key, - "staff", + username, namespace="reverification", name="i4x://edX/DemoX/edx-reverification-block/assessment_uuid" ) diff --git a/openedx/core/djangoapps/credit/tests/test_signals.py b/openedx/core/djangoapps/credit/tests/test_signals.py index f2480e9d5b..0dc8102b5a 100644 --- a/openedx/core/djangoapps/credit/tests/test_signals.py +++ b/openedx/core/djangoapps/credit/tests/test_signals.py @@ -2,24 +2,23 @@ Tests for minimum grade requirement status """ -import pytz import ddt +import pytz from datetime import timedelta, datetime -from nose.plugins.attrib import attr +from unittest import skipUnless from django.conf import settings from django.test.client import RequestFactory -from unittest import skipUnless +from nose.plugins.attrib import attr +from student.tests.factories import UserFactory +from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase +from xmodule.modulestore.tests.factories import CourseFactory from openedx.core.djangoapps.credit.api import ( set_credit_requirements, get_credit_requirement_status ) - from openedx.core.djangoapps.credit.models import CreditCourse, CreditProvider from openedx.core.djangoapps.credit.signals import listen_for_grade_calculation -from student.tests.factories import UserFactory -from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase -from xmodule.modulestore.tests.factories import CourseFactory @attr('shard_2') @@ -67,20 +66,23 @@ class TestMinGradedRequirementStatus(ModuleStoreTestCase): # Add a single credit requirement (final grade) set_credit_requirements(self.course.id, requirements) + def assert_requirement_status(self, grade, due_date, expected_status): + """ Verify the user's credit requirement status is as expected after simulating a grading calculation. """ + listen_for_grade_calculation(None, self.user.username, {'percent': grade}, self.course.id, due_date) + req_status = get_credit_requirement_status(self.course.id, self.request.user.username, 'grade', 'grade') + self.assertEqual(req_status[0]['status'], expected_status) + @ddt.data( (0.6, VALID_DUE_DATE), (0.52, VALID_DUE_DATE), (0.70, EXPIRED_DUE_DATE), ) @ddt.unpack - def test_min_grade_requirement_with_valid_grade(self, grade_achieved, due_date): + def test_min_grade_requirement_with_valid_grade(self, grade, due_date): """Test with valid grades. Deadline date does not effect in case of valid grade. """ - - listen_for_grade_calculation(None, self.user.username, {'percent': grade_achieved}, self.course.id, due_date) - req_status = get_credit_requirement_status(self.course.id, self.request.user.username, 'grade', 'grade') - self.assertEqual(req_status[0]["status"], 'satisfied') + self.assert_requirement_status(grade, due_date, 'satisfied') @ddt.data( (0.50, None), @@ -88,16 +90,10 @@ class TestMinGradedRequirementStatus(ModuleStoreTestCase): (0.40, VALID_DUE_DATE), ) @ddt.unpack - def test_min_grade_requirement_failed_grade_valid_deadline(self, grade_achieved, due_date): + def test_min_grade_requirement_failed_grade_valid_deadline(self, grade, due_date): """Test with failed grades and deadline is still open or not defined.""" - - listen_for_grade_calculation(None, self.user.username, {'percent': grade_achieved}, self.course.id, due_date) - req_status = get_credit_requirement_status(self.course.id, self.request.user.username, 'grade', 'grade') - self.assertEqual(req_status[0]["status"], None) + self.assert_requirement_status(grade, due_date, None) def test_min_grade_requirement_failed_grade_expired_deadline(self): """Test with failed grades and deadline expire""" - - listen_for_grade_calculation(None, self.user.username, {'percent': 0.22}, self.course.id, self.EXPIRED_DUE_DATE) - req_status = get_credit_requirement_status(self.course.id, self.request.user.username, 'grade', 'grade') - self.assertEqual(req_status[0]["status"], 'failed') + self.assert_requirement_status(0.22, self.EXPIRED_DUE_DATE, 'failed')