Skip to content

Commit

Permalink
feat: remove check for auto external cancelation
Browse files Browse the repository at this point in the history
The write_reversals_from_enterprise_unenrollments management command (currently run on a cron) has this conditional (source).
We used the not self.automatic_external_cancellation check to gate this code path on a Django setting. On stage/prod, this setting is set to True, and thus bypasses this conditional check.
Now that stage/prod is always True, we can remove this gating altogether.
ENT-9269
  • Loading branch information
iloveagent57 committed Aug 13, 2024
1 parent 70543d0 commit b50aa9b
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 124 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,6 @@ def __init__(self, *args, **kwargs):
provider_url=settings.GET_SMARTER_OAUTH2_PROVIDER_URL,
api_url=settings.GET_SMARTER_API_URL
)
self.automatic_external_cancellation = getattr(
settings,
"ENTERPRISE_SUBSIDY_AUTOMATIC_EXTERNAL_CANCELLATION",
False
)

def add_arguments(self, parser):
"""
Expand Down Expand Up @@ -163,18 +158,6 @@ def handle_reversing_enterprise_course_unenrollment(self, unenrollment):
f"Writing Reversal for Transaction: {related_transaction}."
)

# On initial release we are only supporting learner initiated unenrollments for OCM courses.
# OCM courses are identified by the lack of an external_reference on the Transaction object.
# Externally referenced transactions can be unenrolled through the Django admin actions related to the
# Transaction model.
if related_transaction.external_reference.exists() and not self.automatic_external_cancellation:
logger.info(
f"{self.dry_run_prefix}Found unenrolled enterprise fulfillment: {fulfillment_uuid} related to "
f"an externally referenced transaction: {related_transaction.external_reference.first()}. "
f"Skipping ENTERPRISE_SUBSIDY_AUTOMATIC_EXTERNAL_CANCELLATION={self.automatic_external_cancellation}."
)
return 0

# Memoize the content metadata for the course run fetched from the enterprise catalog
if not self.fetched_content_metadata.get(enrollment_course_run_key):
content_metadata = ContentMetadataApi.get_content_metadata(
Expand Down
108 changes: 1 addition & 107 deletions enterprise_subsidy/apps/transaction/tests/test_management.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import ddt
from django.core.management import call_command
from django.test import TestCase, override_settings
from django.test import TestCase
from openedx_ledger.models import Reversal, TransactionStateChoices
from openedx_ledger.test_utils.factories import (
ExternalFulfillmentProviderFactory,
Expand Down Expand Up @@ -653,110 +653,6 @@ def test_write_reversals_from_enterprise_unenrollments(
assert Reversal.objects.count() == 0
self.assertFalse(mock_send_event_bus_reversed.called)

@mock.patch('enterprise_subsidy.apps.transaction.signals.handlers.send_transaction_reversed_event')
@mock.patch(
'enterprise_subsidy.apps.transaction.management.commands.write_reversals_from_enterprise_unenrollments.'
'EnterpriseApiClient'
)
@mock.patch(
'enterprise_subsidy.apps.transaction.management.commands.write_reversals_from_enterprise_unenrollments.'
'ContentMetadataApi'
)
@mock.patch(
'enterprise_subsidy.apps.transaction.api.EnterpriseApiClient'
)
@override_settings(ENTERPRISE_SUBSIDY_AUTOMATIC_EXTERNAL_CANCELLATION=False)
def test_write_reversals_from_geag_enterprise_unenrollments_disabled_setting(
self,
mock_signal_client,
mock_fetch_course_metadata_client,
mock_fetch_recent_unenrollments_client,
mock_send_event_bus_reversed,
):
"""
Test the write_reversals_from_enterprise_unenrollments management command's ability to create a reversal.
"""
# Reversal creation will trigger a signal handler that will make a call to enterprise
mock_signal_client.return_value = mock.MagicMock()

# Call to enterprise, fetching recent unenrollments
mock_fetch_recent_unenrollments_client.return_value.fetch_recent_unenrollments.return_value = [
{
'enterprise_course_enrollment': {
'enterprise_customer_user': 10,
'course_id': self.geag_transaction.content_key,
'created': '2023-05-25T19:27:29Z',
'unenrolled_at': '2023-06-1T19:27:29Z',
},
'transaction_id': self.geag_transaction.uuid,
'uuid': str(self.geag_transaction.fulfillment_identifier),
}
]

# Call to enterprise catalog, fetching course metadata
mock_fetch_course_metadata_client.get_content_metadata.return_value = {
'key': self.course_key,
'content_type': 'course',
'uuid': self.course_uuid,
'title': 'Demonstration Course',
'course_runs': [{
'key': self.geag_transaction.content_key,
'uuid': '00f8945b-bb50-4c7a-98f4-2f2f6178ff2f',
'title': 'Demonstration Course',
'external_key': None,
'seats': [{
'type': 'verified',
'price': '149.00',
'currency': 'USD',
'upgrade_deadline': '2023-05-26T15:45:32.494051Z',
'upgrade_deadline_override': None,
'credit_provider': None,
'credit_hours': None,
'sku': '8CF08E5',
'bulk_sku': 'A5B6DBE'
}, {
'type': 'audit',
'price': '0.00',
'currency': 'USD',
'upgrade_deadline': None,
'upgrade_deadline_override': None,
'credit_provider': None,
'credit_hours': None,
'sku': '68EFFFF',
'bulk_sku': None
}],
'start': '2013-02-05T05:00:00Z',
'end': None,
'go_live_date': None,
'enrollment_start': None,
'enrollment_end': None,
'is_enrollable': True,
'availability': 'Current',
'course': 'edX+DemoX',
'first_enrollable_paid_seat_price': 149,
'enrollment_count': 0,
'recent_enrollment_count': 0,
'course_uuid': self.course_uuid,
}],
'entitlements': self.course_entitlements,
'modified': '2022-05-26T15:46:24.355321Z',
'additional_metadata': None,
'enrollment_count': 0,
'recent_enrollment_count': 0,
'course_run_keys': [self.courserun_key],
'content_last_modified': '2023-03-06T20:56:46Z',
'enrollment_url': 'https://foobar.com',
'active': False
}

assert Reversal.objects.count() == 0

call_command('write_reversals_from_enterprise_unenrollments')

assert Reversal.objects.count() == 0

self.assertFalse(mock_send_event_bus_reversed.called)

@mock.patch('enterprise_subsidy.apps.transaction.signals.handlers.send_transaction_reversed_event')
@mock.patch(
'enterprise_subsidy.apps.fulfillment.api.GetSmarterEnterpriseApiClient'
Expand All @@ -772,7 +668,6 @@ def test_write_reversals_from_geag_enterprise_unenrollments_disabled_setting(
@mock.patch(
'enterprise_subsidy.apps.transaction.api.EnterpriseApiClient'
)
@override_settings(ENTERPRISE_SUBSIDY_AUTOMATIC_EXTERNAL_CANCELLATION=True)
def test_write_reversals_from_geag_enterprise_unenrollments_enabled_setting(
self,
mock_signal_client,
Expand Down Expand Up @@ -880,7 +775,6 @@ def test_write_reversals_from_geag_enterprise_unenrollments_enabled_setting(
@mock.patch(
'enterprise_subsidy.apps.transaction.api.EnterpriseApiClient'
)
@override_settings(ENTERPRISE_SUBSIDY_AUTOMATIC_EXTERNAL_CANCELLATION=True)
def test_write_reversals_from_geag_enterprise_unenrollments_unknown_provider(
self,
mock_signal_client,
Expand Down

0 comments on commit b50aa9b

Please sign in to comment.