Skip to content

Commit 138e914

Browse files
feat: add enterprise default language in braze campaigns
1 parent 6edda66 commit 138e914

2 files changed

Lines changed: 85 additions & 0 deletions

File tree

license_manager/apps/api/tasks.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ def _batch_notify_or_remind_assigned_emails(
180180
enterprise_name = enterprise_customer.get('name')
181181
enterprise_sender_alias = get_enterprise_sender_alias(enterprise_customer)
182182
enterprise_contact_email = enterprise_customer.get('contact_email')
183+
enterprise_default_language = enterprise_customer.get('default_language') or ''
183184

184185
pending_license_by_email = {}
185186
emails_for_aliasing = []
@@ -198,6 +199,7 @@ def _batch_notify_or_remind_assigned_emails(
198199
'enterprise_customer_name': enterprise_name,
199200
'enterprise_sender_alias': enterprise_sender_alias,
200201
'enterprise_contact_email': enterprise_contact_email,
202+
'enterprise_default_language': enterprise_default_language,
201203
}
202204
recipient = _aliased_recipient_object_from_email(user_email)
203205
recipient['attributes'].update(get_license_tracking_properties(pending_license))
@@ -292,13 +294,15 @@ def send_post_activation_email_task(enterprise_customer_uuid, user_email):
292294
enterprise_slug = enterprise_customer.get('slug')
293295
enterprise_sender_alias = get_enterprise_sender_alias(enterprise_customer)
294296
enterprise_contact_email = enterprise_customer.get('contact_email')
297+
enterprise_default_language = enterprise_customer.get('default_language') or ''
295298

296299
braze_campaign_id = settings.BRAZE_ACTIVATION_EMAIL_CAMPAIGN
297300
braze_trigger_properties = {
298301
'enterprise_customer_slug': enterprise_slug,
299302
'enterprise_customer_name': enterprise_name,
300303
'enterprise_sender_alias': enterprise_sender_alias,
301304
'enterprise_contact_email': enterprise_contact_email,
305+
'enterprise_default_language': enterprise_default_language,
302306
}
303307
recipient = _aliased_recipient_object_from_email(user_email)
304308

license_manager/apps/api/tests/test_tasks.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ def test_assignment_email_task(self, mock_braze_client, mock_enterprise_client):
106106
'name': self.enterprise_name,
107107
'sender_alias': self.enterprise_sender_alias,
108108
'contact_email': self.contact_email,
109+
'default_language': 'en',
109110
}
110111

111112
# Add an extra recipient with no associated license
@@ -142,6 +143,7 @@ def test_assignment_email_task(self, mock_braze_client, mock_enterprise_client):
142143
'enterprise_customer_name': self.enterprise_name,
143144
'enterprise_sender_alias': self.enterprise_sender_alias,
144145
'enterprise_contact_email': self.contact_email,
146+
'enterprise_default_language': 'en',
145147
}
146148
expected_recipient = {
147149
'attributes': {'email': user_email},
@@ -182,6 +184,7 @@ def test_assignment_task_send_email_failure_logged(self, mock_enterprise_client,
182184
'name': self.enterprise_name,
183185
'sender_alias': self.enterprise_sender_alias,
184186
'contact_email': self.contact_email,
187+
'default_language': 'en',
185188
}
186189

187190
tasks.send_assignment_email_task(
@@ -203,6 +206,7 @@ def test_send_reminder_email_task(self, mock_enterprise_client, mock_braze_clien
203206
'name': self.enterprise_name,
204207
'sender_alias': self.enterprise_sender_alias,
205208
'contact_email': self.contact_email,
209+
'default_language': 'en',
206210
}
207211
with freeze_time(localized_utcnow()):
208212
# Add an extra recipient with no associated license
@@ -239,6 +243,7 @@ def test_send_reminder_email_task(self, mock_enterprise_client, mock_braze_clien
239243
'enterprise_customer_name': self.enterprise_name,
240244
'enterprise_sender_alias': self.enterprise_sender_alias,
241245
'enterprise_contact_email': self.contact_email,
246+
'enterprise_default_language': 'en',
242247
}
243248
expected_recipient = {
244249
'attributes': {'email': user_email},
@@ -282,6 +287,7 @@ def test_send_reminder_email_failure_no_remind_date_update(self, mock_enterprise
282287
'name': self.enterprise_name,
283288
'sender_alias': self.enterprise_sender_alias,
284289
'contact_email': self.contact_email,
290+
'default_language': 'en',
285291
}
286292

287293
with self.assertRaises(BrazeClientError):
@@ -297,6 +303,58 @@ def test_send_reminder_email_failure_no_remind_date_update(self, mock_enterprise
297303
False
298304
)
299305

306+
@mock.patch('license_manager.apps.api.tasks.BrazeApiClient', autospec=True, return_value=mock.MagicMock())
307+
@mock.patch('license_manager.apps.api.tasks.EnterpriseApiClient', return_value=mock.MagicMock())
308+
def test_assignment_email_task_with_null_default_language(self, mock_enterprise_client, mock_braze_client):
309+
"""
310+
Assert the assignment email task handles None default_language by using empty string.
311+
"""
312+
mock_enterprise_client().get_enterprise_customer_data.return_value = {
313+
'slug': self.enterprise_slug,
314+
'name': self.enterprise_name,
315+
'sender_alias': self.enterprise_sender_alias,
316+
'contact_email': self.contact_email,
317+
'default_language': None, # Explicitly None
318+
}
319+
320+
tasks.send_assignment_email_task(
321+
self.custom_template_text,
322+
self.email_recipient_list,
323+
self.subscription_plan.uuid
324+
)
325+
326+
# Verify that enterprise_default_language is empty string when source is None
327+
mock_send_message = mock_braze_client.return_value.send_campaign_message
328+
actual_recipients = mock_send_message.call_args_list[0][1]['recipients']
329+
for recipient in actual_recipients:
330+
assert recipient['trigger_properties']['enterprise_default_language'] == ''
331+
332+
@mock.patch('license_manager.apps.api.tasks.BrazeApiClient', autospec=True, return_value=mock.MagicMock())
333+
@mock.patch('license_manager.apps.api.tasks.EnterpriseApiClient', return_value=mock.MagicMock())
334+
def test_send_reminder_email_task_with_null_default_language(self, mock_enterprise_client, mock_braze_client):
335+
"""
336+
Assert the reminder email task handles None default_language by using empty string.
337+
"""
338+
mock_enterprise_client().get_enterprise_customer_data.return_value = {
339+
'slug': self.enterprise_slug,
340+
'name': self.enterprise_name,
341+
'sender_alias': self.enterprise_sender_alias,
342+
'contact_email': self.contact_email,
343+
'default_language': None, # Explicitly None
344+
}
345+
346+
tasks.send_reminder_email_task(
347+
self.custom_template_text,
348+
self.email_recipient_list,
349+
self.subscription_plan.uuid
350+
)
351+
352+
# Verify that enterprise_default_language is empty string when source is None
353+
mock_send_message = mock_braze_client.return_value.send_campaign_message
354+
actual_recipients = mock_send_message.call_args_list[0][1]['recipients']
355+
for recipient in actual_recipients:
356+
assert recipient['trigger_properties']['enterprise_default_language'] == ''
357+
300358
def _verify_mock_send_email_arguments(self, send_email_args):
301359
"""
302360
Verifies that the arguments passed into send_activation_emails is correct
@@ -328,6 +386,7 @@ def test_send_post_activation_email_task(self, mock_braze_client, mock_enterpris
328386
'name': self.enterprise_name,
329387
'sender_alias': self.enterprise_sender_alias,
330388
'contact_email': self.contact_email,
389+
'default_language': 'en',
331390
}
332391

333392
tasks.send_post_activation_email_task(self.enterprise_uuid, self.user_email)
@@ -342,6 +401,7 @@ def test_send_post_activation_email_task(self, mock_braze_client, mock_enterpris
342401
'enterprise_customer_name': self.enterprise_name,
343402
'enterprise_sender_alias': self.enterprise_sender_alias,
344403
'enterprise_contact_email': self.contact_email,
404+
'enterprise_default_language': 'en',
345405
}
346406
expected_recipient = {
347407
'attributes': {'email': self.user_email},
@@ -367,11 +427,32 @@ def test_send_post_activation_email_task_reraises_braze_exceptions(self, _, mock
367427
'name': self.enterprise_name,
368428
'sender_alias': self.enterprise_sender_alias,
369429
'contact_email': self.contact_email,
430+
'default_language': 'en',
370431
}
371432

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

436+
@mock.patch('license_manager.apps.api.tasks.EnterpriseApiClient', return_value=mock.MagicMock())
437+
@mock.patch('license_manager.apps.api.tasks.BrazeApiClient', return_value=mock.MagicMock())
438+
def test_send_post_activation_email_task_with_null_default_language(self, mock_braze_client, mock_enterprise_client):
439+
"""
440+
Assert the activation email task handles None default_language by using empty string.
441+
"""
442+
mock_enterprise_client().get_enterprise_customer_data.return_value = {
443+
'slug': self.enterprise_slug,
444+
'name': self.enterprise_name,
445+
'sender_alias': self.enterprise_sender_alias,
446+
'contact_email': self.contact_email,
447+
'default_language': None, # Explicitly None
448+
}
449+
450+
tasks.send_post_activation_email_task(self.enterprise_uuid, self.user_email)
451+
452+
# Verify that enterprise_default_language is empty string when source is None
453+
actual_trigger_properties = mock_braze_client().send_campaign_message.call_args[1]['trigger_properties']
454+
assert actual_trigger_properties['enterprise_default_language'] == ''
455+
375456
@mock.patch('license_manager.apps.api.tasks.EnterpriseApiClient', return_value=mock.MagicMock())
376457
@mock.patch('license_manager.apps.api.tasks.BrazeApiClient', return_value=mock.MagicMock())
377458
def test_revocation_cap_email_task(self, mock_braze_client, mock_enterprise_client):

0 commit comments

Comments
 (0)