# What this PR does Instead of always adding `.aiff` or `.mp3` at the end of notification sound names depending on the platform (iOS vs Android), add them only if no extension is present already. This should make it possible to use sounds with custom extensions. ## Checklist - [x] Unit, integration, and e2e (if applicable) tests updated - [x] Documentation added (or `pr:no public docs` PR label added if not required) - [x] `CHANGELOG.md` updated (or `pr:no changelog` PR label added if not required)
96 lines
4.7 KiB
Python
96 lines
4.7 KiB
Python
import pytest
|
|
|
|
from apps.mobile_app.demo_push import _get_test_escalation_fcm_message, get_test_push_title
|
|
from apps.mobile_app.models import FCMDevice, MobileAppUserSettings
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_test_escalation_fcm_message_user_settings(
|
|
make_organization_and_user, make_alert_receive_channel, make_alert_group, make_alert
|
|
):
|
|
organization, user = make_organization_and_user()
|
|
device = FCMDevice.objects.create(user=user, registration_id="test_device_id")
|
|
|
|
message = _get_test_escalation_fcm_message(user, device, critical=False)
|
|
|
|
# Check user settings are passed to FCM message
|
|
assert message.data["default_notification_sound_name"] == "default_sound.mp3"
|
|
assert message.data["default_notification_volume_type"] == "constant"
|
|
assert message.data["default_notification_volume_override"] == "false"
|
|
assert message.data["default_notification_volume"] == "0.8"
|
|
assert message.data["important_notification_sound_name"] == "default_sound_important.mp3"
|
|
assert message.data["important_notification_volume_type"] == "constant"
|
|
assert message.data["important_notification_volume"] == "0.8"
|
|
assert message.data["important_notification_volume_override"] == "true"
|
|
assert message.data["important_notification_override_dnd"] == "true"
|
|
|
|
# Check APNS notification sound is set correctly
|
|
apns_sound = message.apns.payload.aps.sound
|
|
assert apns_sound.critical is False
|
|
assert apns_sound.name == "default_sound.aiff"
|
|
assert apns_sound.volume is None # APNS doesn't allow to specify volume for non-critical notifications
|
|
|
|
# Check expected test push content
|
|
assert message.apns.payload.aps.badge is None
|
|
assert message.apns.payload.aps.alert.title == get_test_push_title(critical=False)
|
|
assert message.data["title"] == get_test_push_title(critical=False)
|
|
assert message.data["type"] == "oncall.message"
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_escalation_fcm_message_user_settings_critical(
|
|
make_organization_and_user, make_alert_receive_channel, make_alert_group, make_alert
|
|
):
|
|
organization, user = make_organization_and_user()
|
|
device = FCMDevice.objects.create(user=user, registration_id="test_device_id")
|
|
|
|
message = _get_test_escalation_fcm_message(user, device, critical=True)
|
|
|
|
# Check user settings are passed to FCM message
|
|
assert message.data["default_notification_sound_name"] == "default_sound.mp3"
|
|
assert message.data["default_notification_volume_type"] == "constant"
|
|
assert message.data["default_notification_volume_override"] == "false"
|
|
assert message.data["default_notification_volume"] == "0.8"
|
|
assert message.data["important_notification_sound_name"] == "default_sound_important.mp3"
|
|
assert message.data["important_notification_volume_type"] == "constant"
|
|
assert message.data["important_notification_volume"] == "0.8"
|
|
assert message.data["important_notification_volume_override"] == "true"
|
|
assert message.data["important_notification_override_dnd"] == "true"
|
|
|
|
# Check APNS notification sound is set correctly
|
|
apns_sound = message.apns.payload.aps.sound
|
|
assert apns_sound.critical is True
|
|
assert apns_sound.name == "default_sound_important.aiff"
|
|
assert apns_sound.volume == 0.8
|
|
assert message.apns.payload.aps.custom_data["interruption-level"] == "critical"
|
|
|
|
# Check expected test push content
|
|
assert message.apns.payload.aps.badge is None
|
|
assert message.apns.payload.aps.alert.title == get_test_push_title(critical=True)
|
|
assert message.data["title"] == get_test_push_title(critical=True)
|
|
assert message.data["type"] == "oncall.critical_message"
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_escalation_fcm_message_user_settings_critical_override_dnd_disabled(
|
|
make_organization_and_user, make_alert_receive_channel, make_alert_group, make_alert
|
|
):
|
|
organization, user = make_organization_and_user()
|
|
device = FCMDevice.objects.create(user=user, registration_id="test_device_id")
|
|
|
|
# Disable important notification override DND
|
|
MobileAppUserSettings.objects.create(user=user, important_notification_override_dnd=False)
|
|
message = _get_test_escalation_fcm_message(user, device, critical=True)
|
|
|
|
# Check user settings are passed to FCM message
|
|
assert message.data["important_notification_override_dnd"] == "false"
|
|
|
|
# Check APNS notification sound is set correctly
|
|
apns_sound = message.apns.payload.aps.sound
|
|
assert apns_sound.critical is False
|
|
assert message.apns.payload.aps.custom_data["interruption-level"] == "time-sensitive"
|
|
|
|
# Check expected test push content
|
|
assert message.apns.payload.aps.badge is None
|
|
assert message.apns.payload.aps.alert.title == get_test_push_title(critical=True)
|
|
assert message.data["title"] == get_test_push_title(critical=True)
|