Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions license_manager/apps/api/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ def _batch_notify_or_remind_assigned_emails(
enterprise_name = enterprise_customer.get('name')
enterprise_sender_alias = get_enterprise_sender_alias(enterprise_customer)
enterprise_contact_email = enterprise_customer.get('contact_email')
enterprise_default_language = enterprise_customer.get('default_language') or ''

pending_license_by_email = {}
emails_for_aliasing = []
Expand All @@ -198,6 +199,7 @@ def _batch_notify_or_remind_assigned_emails(
'enterprise_customer_name': enterprise_name,
'enterprise_sender_alias': enterprise_sender_alias,
'enterprise_contact_email': enterprise_contact_email,
'enterprise_default_language': enterprise_default_language,
}
recipient = _aliased_recipient_object_from_email(user_email)
recipient['attributes'].update(get_license_tracking_properties(pending_license))
Expand Down Expand Up @@ -292,13 +294,15 @@ def send_post_activation_email_task(enterprise_customer_uuid, user_email):
enterprise_slug = enterprise_customer.get('slug')
enterprise_sender_alias = get_enterprise_sender_alias(enterprise_customer)
enterprise_contact_email = enterprise_customer.get('contact_email')
enterprise_default_language = enterprise_customer.get('default_language') or ''

braze_campaign_id = settings.BRAZE_ACTIVATION_EMAIL_CAMPAIGN
braze_trigger_properties = {
'enterprise_customer_slug': enterprise_slug,
'enterprise_customer_name': enterprise_name,
'enterprise_sender_alias': enterprise_sender_alias,
'enterprise_contact_email': enterprise_contact_email,
'enterprise_default_language': enterprise_default_language,
}
recipient = _aliased_recipient_object_from_email(user_email)

Expand Down
83 changes: 83 additions & 0 deletions license_manager/apps/api/tests/test_tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ def test_assignment_email_task(self, mock_braze_client, mock_enterprise_client):
'name': self.enterprise_name,
'sender_alias': self.enterprise_sender_alias,
'contact_email': self.contact_email,
'default_language': 'en',
}

# Add an extra recipient with no associated license
Expand Down Expand Up @@ -142,6 +143,7 @@ def test_assignment_email_task(self, mock_braze_client, mock_enterprise_client):
'enterprise_customer_name': self.enterprise_name,
'enterprise_sender_alias': self.enterprise_sender_alias,
'enterprise_contact_email': self.contact_email,
'enterprise_default_language': 'en',
}
expected_recipient = {
'attributes': {'email': user_email},
Expand Down Expand Up @@ -182,6 +184,7 @@ def test_assignment_task_send_email_failure_logged(self, mock_enterprise_client,
'name': self.enterprise_name,
'sender_alias': self.enterprise_sender_alias,
'contact_email': self.contact_email,
'default_language': 'en',
}

tasks.send_assignment_email_task(
Expand All @@ -203,6 +206,7 @@ def test_send_reminder_email_task(self, mock_enterprise_client, mock_braze_clien
'name': self.enterprise_name,
'sender_alias': self.enterprise_sender_alias,
'contact_email': self.contact_email,
'default_language': 'en',
}
with freeze_time(localized_utcnow()):
# Add an extra recipient with no associated license
Expand Down Expand Up @@ -239,6 +243,7 @@ def test_send_reminder_email_task(self, mock_enterprise_client, mock_braze_clien
'enterprise_customer_name': self.enterprise_name,
'enterprise_sender_alias': self.enterprise_sender_alias,
'enterprise_contact_email': self.contact_email,
'enterprise_default_language': 'en',
}
expected_recipient = {
'attributes': {'email': user_email},
Expand Down Expand Up @@ -282,6 +287,7 @@ def test_send_reminder_email_failure_no_remind_date_update(self, mock_enterprise
'name': self.enterprise_name,
'sender_alias': self.enterprise_sender_alias,
'contact_email': self.contact_email,
'default_language': 'en',
}

with self.assertRaises(BrazeClientError):
Expand All @@ -297,6 +303,58 @@ def test_send_reminder_email_failure_no_remind_date_update(self, mock_enterprise
False
)

@mock.patch('license_manager.apps.api.tasks.BrazeApiClient', autospec=True, return_value=mock.MagicMock())
@mock.patch('license_manager.apps.api.tasks.EnterpriseApiClient', return_value=mock.MagicMock())
def test_assignment_email_task_with_null_default_language(self, mock_enterprise_client, mock_braze_client):
"""
Assert the assignment email task handles None default_language by using empty string.
"""
mock_enterprise_client().get_enterprise_customer_data.return_value = {
'slug': self.enterprise_slug,
'name': self.enterprise_name,
'sender_alias': self.enterprise_sender_alias,
'contact_email': self.contact_email,
'default_language': None, # Explicitly None
}

tasks.send_assignment_email_task(
self.custom_template_text,
self.email_recipient_list,
self.subscription_plan.uuid
)

# Verify that enterprise_default_language is empty string when source is None
mock_send_message = mock_braze_client.return_value.send_campaign_message
actual_recipients = mock_send_message.call_args_list[0][1]['recipients']
for recipient in actual_recipients:
assert recipient['trigger_properties']['enterprise_default_language'] == ''

@mock.patch('license_manager.apps.api.tasks.BrazeApiClient', autospec=True, return_value=mock.MagicMock())
@mock.patch('license_manager.apps.api.tasks.EnterpriseApiClient', return_value=mock.MagicMock())
def test_send_reminder_email_task_with_null_default_language(self, mock_enterprise_client, mock_braze_client):
"""
Assert the reminder email task handles None default_language by using empty string.
"""
mock_enterprise_client().get_enterprise_customer_data.return_value = {
'slug': self.enterprise_slug,
'name': self.enterprise_name,
'sender_alias': self.enterprise_sender_alias,
'contact_email': self.contact_email,
'default_language': None, # Explicitly None
}

tasks.send_reminder_email_task(
self.custom_template_text,
self.email_recipient_list,
self.subscription_plan.uuid
)

# Verify that enterprise_default_language is empty string when source is None
mock_send_message = mock_braze_client.return_value.send_campaign_message
actual_recipients = mock_send_message.call_args_list[0][1]['recipients']
for recipient in actual_recipients:
assert recipient['trigger_properties']['enterprise_default_language'] == ''

def _verify_mock_send_email_arguments(self, send_email_args):
"""
Verifies that the arguments passed into send_activation_emails is correct
Expand Down Expand Up @@ -328,6 +386,7 @@ def test_send_post_activation_email_task(self, mock_braze_client, mock_enterpris
'name': self.enterprise_name,
'sender_alias': self.enterprise_sender_alias,
'contact_email': self.contact_email,
'default_language': 'en',
}

tasks.send_post_activation_email_task(self.enterprise_uuid, self.user_email)
Expand All @@ -342,6 +401,7 @@ def test_send_post_activation_email_task(self, mock_braze_client, mock_enterpris
'enterprise_customer_name': self.enterprise_name,
'enterprise_sender_alias': self.enterprise_sender_alias,
'enterprise_contact_email': self.contact_email,
'enterprise_default_language': 'en',
}
expected_recipient = {
'attributes': {'email': self.user_email},
Expand All @@ -367,11 +427,34 @@ def test_send_post_activation_email_task_reraises_braze_exceptions(self, _, mock
'name': self.enterprise_name,
'sender_alias': self.enterprise_sender_alias,
'contact_email': self.contact_email,
'default_language': 'en',
}

with self.assertRaises(BrazeClientError):
tasks.send_post_activation_email_task(self.enterprise_uuid, self.user_email)

@mock.patch('license_manager.apps.api.tasks.EnterpriseApiClient', return_value=mock.MagicMock())
@mock.patch('license_manager.apps.api.tasks.BrazeApiClient', return_value=mock.MagicMock())
def test_send_post_activation_email_task_with_null_default_language(
self, mock_braze_client, mock_enterprise_client
):
"""
Assert the activation email task handles None default_language by using empty string.
"""
mock_enterprise_client().get_enterprise_customer_data.return_value = {
'slug': self.enterprise_slug,
'name': self.enterprise_name,
'sender_alias': self.enterprise_sender_alias,
'contact_email': self.contact_email,
'default_language': None, # Explicitly None
}

tasks.send_post_activation_email_task(self.enterprise_uuid, self.user_email)

# Verify that enterprise_default_language is empty string when source is None
actual_trigger_properties = mock_braze_client().send_campaign_message.call_args[1]['trigger_properties']
assert actual_trigger_properties['enterprise_default_language'] == ''

@mock.patch('license_manager.apps.api.tasks.EnterpriseApiClient', return_value=mock.MagicMock())
@mock.patch('license_manager.apps.api.tasks.BrazeApiClient', return_value=mock.MagicMock())
def test_revocation_cap_email_task(self, mock_braze_client, mock_enterprise_client):
Expand Down