Commit 9b24735c by Clinton Blackburn

Credit test cleanup

Removed a lot of duplicate code!

ECOM-4379
parent 51715b9e
...@@ -371,7 +371,15 @@ class CreditRequirementApiTests(CreditApiTestBase): ...@@ -371,7 +371,15 @@ class CreditRequirementApiTests(CreditApiTestBase):
eligibilities = api.get_eligibilities_for_user("staff") eligibilities = api.get_eligibilities_for_user("staff")
self.assertEqual(eligibilities, []) 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): def test_set_credit_requirement_status(self):
username = "staff"
self.add_credit_course() self.add_credit_course()
requirements = [ requirements = [
{ {
...@@ -395,40 +403,34 @@ class CreditRequirementApiTests(CreditApiTestBase): ...@@ -395,40 +403,34 @@ class CreditRequirementApiTests(CreditApiTestBase):
self.assertEqual(len(course_requirements), 2) self.assertEqual(len(course_requirements), 2)
# Initially, the status should be None # Initially, the status should be None
req_status = api.get_credit_requirement_status(self.course_key, "staff", namespace="grade", name="grade") self.assert_grade_requirement_status(None, 0)
self.assertEqual(req_status[0]["status"], None)
self.assertEqual(req_status[0]["order"], 0)
# Set the requirement to "satisfied" and check that it's actually set # Set the requirement to "satisfied" and check that it's actually set
api.set_credit_requirement_status("staff", self.course_key, "grade", "grade") api.set_credit_requirement_status(username, self.course_key, "grade", "grade")
req_status = api.get_credit_requirement_status(self.course_key, "staff", namespace="grade", name="grade") self.assert_grade_requirement_status('satisfied', 0)
self.assertEqual(req_status[0]["status"], "satisfied")
self.assertEqual(req_status[0]["order"], 0)
# Set the requirement to "failed" and check that it's actually set # 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") api.set_credit_requirement_status(username, self.course_key, "grade", "grade", status="failed")
req_status = api.get_credit_requirement_status(self.course_key, "staff", namespace="grade", name="grade") self.assert_grade_requirement_status('failed', 0)
self.assertEqual(req_status[0]["status"], "failed")
self.assertEqual(req_status[0]["order"], 0)
req_status = api.get_credit_requirement_status(self.course_key, "staff") req_status = api.get_credit_requirement_status(self.course_key, "staff")
self.assertEqual(req_status[0]["status"], "failed") self.assertEqual(req_status[0]["status"], "failed")
self.assertEqual(req_status[0]["order"], 0) 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]["status"], None)
self.assertEqual(req_status[1]["order"], 1) self.assertEqual(req_status[1]["order"], 1)
# Set the requirement to "declined" and check that it's actually set # Set the requirement to "declined" and check that it's actually set
api.set_credit_requirement_status( api.set_credit_requirement_status(
"staff", self.course_key, username, self.course_key,
"reverification", "reverification",
"i4x://edX/DemoX/edx-reverification-block/assessment_uuid", "i4x://edX/DemoX/edx-reverification-block/assessment_uuid",
status="declined" status="declined"
) )
req_status = api.get_credit_requirement_status( req_status = api.get_credit_requirement_status(
self.course_key, self.course_key,
"staff", username,
namespace="reverification", namespace="reverification",
name="i4x://edX/DemoX/edx-reverification-block/assessment_uuid" name="i4x://edX/DemoX/edx-reverification-block/assessment_uuid"
) )
......
...@@ -2,24 +2,23 @@ ...@@ -2,24 +2,23 @@
Tests for minimum grade requirement status Tests for minimum grade requirement status
""" """
import pytz
import ddt import ddt
import pytz
from datetime import timedelta, datetime from datetime import timedelta, datetime
from nose.plugins.attrib import attr from unittest import skipUnless
from django.conf import settings from django.conf import settings
from django.test.client import RequestFactory 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 ( from openedx.core.djangoapps.credit.api import (
set_credit_requirements, get_credit_requirement_status set_credit_requirements, get_credit_requirement_status
) )
from openedx.core.djangoapps.credit.models import CreditCourse, CreditProvider from openedx.core.djangoapps.credit.models import CreditCourse, CreditProvider
from openedx.core.djangoapps.credit.signals import listen_for_grade_calculation 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') @attr('shard_2')
...@@ -67,20 +66,23 @@ class TestMinGradedRequirementStatus(ModuleStoreTestCase): ...@@ -67,20 +66,23 @@ class TestMinGradedRequirementStatus(ModuleStoreTestCase):
# Add a single credit requirement (final grade) # Add a single credit requirement (final grade)
set_credit_requirements(self.course.id, requirements) 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( @ddt.data(
(0.6, VALID_DUE_DATE), (0.6, VALID_DUE_DATE),
(0.52, VALID_DUE_DATE), (0.52, VALID_DUE_DATE),
(0.70, EXPIRED_DUE_DATE), (0.70, EXPIRED_DUE_DATE),
) )
@ddt.unpack @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 """Test with valid grades. Deadline date does not effect in case
of valid grade. of valid grade.
""" """
self.assert_requirement_status(grade, due_date, 'satisfied')
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')
@ddt.data( @ddt.data(
(0.50, None), (0.50, None),
...@@ -88,16 +90,10 @@ class TestMinGradedRequirementStatus(ModuleStoreTestCase): ...@@ -88,16 +90,10 @@ class TestMinGradedRequirementStatus(ModuleStoreTestCase):
(0.40, VALID_DUE_DATE), (0.40, VALID_DUE_DATE),
) )
@ddt.unpack @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.""" """Test with failed grades and deadline is still open or not defined."""
self.assert_requirement_status(grade, due_date, None)
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)
def test_min_grade_requirement_failed_grade_expired_deadline(self): def test_min_grade_requirement_failed_grade_expired_deadline(self):
"""Test with failed grades and deadline expire""" """Test with failed grades and deadline expire"""
self.assert_requirement_status(0.22, self.EXPIRED_DUE_DATE, 'failed')
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')
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment