|
10 | 10 |
|
11 | 11 | from enterprise_access.apps.core.tests.factories import UserFactory |
12 | 12 | from enterprise_access.apps.subsidy_access_policy.tests.factories import AssignedLearnerCreditAccessPolicyFactory |
| 13 | +from enterprise_access.apps.subsidy_request.constants import SubsidyRequestStates |
| 14 | +from enterprise_access.apps.subsidy_request.tests.factories import LearnerCreditRequestFactory |
13 | 15 |
|
14 | 16 | from ..api import ( |
15 | 17 | AllocationException, |
@@ -1124,3 +1126,54 @@ def test_expire_assignments_with_expired_subsidy( |
1124 | 1126 | self.assertEqual(assignment.learner_email, 'larry@stooges.com') |
1125 | 1127 | self.assertEqual(assignment.lms_user_id, 12345) |
1126 | 1128 | mock_expired_email.delay.assert_called_once_with(assignment.uuid) |
| 1129 | + |
| 1130 | + @ddt.data( |
| 1131 | + *LearnerContentAssignmentStateChoices.EXPIRABLE_STATES |
| 1132 | + ) |
| 1133 | + @mock.patch('enterprise_access.apps.content_assignments.api.send_assignment_automatically_expired_email') |
| 1134 | + def test_expire_credit_request_when_assigment_expires(self, expirable_assignment_state, mock_expired_email): |
| 1135 | + """ |
| 1136 | + Tests that we expire any open credit requests when we expire an assignment. |
| 1137 | + """ |
| 1138 | + course_key = 'edX+DemoX' |
| 1139 | + course_run_key = 'course-v1:edX+DemoX+T2024' |
| 1140 | + content_key = course_key |
| 1141 | + |
| 1142 | + assignment = LearnerContentAssignmentFactory.create( |
| 1143 | + assignment_configuration=self.assignment_configuration, |
| 1144 | + content_key=content_key, |
| 1145 | + parent_content_key=content_key, |
| 1146 | + is_assigned_course_run=True, |
| 1147 | + state=expirable_assignment_state, |
| 1148 | + learner_email='larry@stooges.com', |
| 1149 | + lms_user_id=12345, |
| 1150 | + ) |
| 1151 | + |
| 1152 | + credit_request = LearnerCreditRequestFactory.create( |
| 1153 | + assignment=assignment |
| 1154 | + ) |
| 1155 | + |
| 1156 | + assignment.add_successful_notified_action() |
| 1157 | + |
| 1158 | + # create non-expired content metadata |
| 1159 | + mock_content_metadata = self.mock_content_metadata( |
| 1160 | + content_key=content_key, |
| 1161 | + course_run_key=course_run_key, |
| 1162 | + enroll_by_date=delta_t(days=100, as_string=True), |
| 1163 | + ) |
| 1164 | + |
| 1165 | + # set a policy-subsidy expiration date in the past |
| 1166 | + mock_subsidy_record = {'expiration_datetime': delta_t(days=-1, as_string=True)} |
| 1167 | + with mock.patch.object(self.policy, 'subsidy_record', return_value=mock_subsidy_record): |
| 1168 | + expire_assignment( |
| 1169 | + assignment, |
| 1170 | + content_metadata=mock_content_metadata, |
| 1171 | + modify_assignment=True, |
| 1172 | + ) |
| 1173 | + |
| 1174 | + credit_request.refresh_from_db() |
| 1175 | + assignment.refresh_from_db() |
| 1176 | + |
| 1177 | + self.assertEqual(assignment.state, LearnerContentAssignmentStateChoices.EXPIRED) |
| 1178 | + self.assertEqual(credit_request.state, SubsidyRequestStates.EXPIRED) |
| 1179 | + mock_expired_email.delay.assert_not_called() |
0 commit comments