Normalize notification email frequency preferences
This commit is contained in:
parent
3ddcabbbbc
commit
6132261d69
@ -446,11 +446,18 @@ def channel_preferences(request):
|
||||
user=request.user
|
||||
)
|
||||
|
||||
def _normalize_email_frequency(value):
|
||||
if value == 'disabled':
|
||||
return 'never'
|
||||
return value
|
||||
|
||||
if request.method == 'GET':
|
||||
data = {
|
||||
'web_enabled': prefs.web_enabled,
|
||||
'email_enabled': prefs.email_enabled,
|
||||
'email_frequency': prefs.email_frequency,
|
||||
'email_frequency': _normalize_email_frequency(
|
||||
prefs.email_frequency
|
||||
),
|
||||
'push_enabled': prefs.push_enabled,
|
||||
'dnd_enabled': prefs.dnd_enabled,
|
||||
'dnd_start_time': _format_time_or_none(prefs.dnd_start_time),
|
||||
@ -468,8 +475,10 @@ def channel_preferences(request):
|
||||
prefs.email_enabled = request.data.get('email_enabled')
|
||||
|
||||
if 'email_frequency' in request.data:
|
||||
frequency = request.data.get('email_frequency')
|
||||
if frequency in ['instant', 'daily', 'weekly', 'disabled']:
|
||||
frequency = _normalize_email_frequency(
|
||||
request.data.get('email_frequency')
|
||||
)
|
||||
if frequency in ['instant', 'daily', 'weekly', 'never']:
|
||||
prefs.email_frequency = frequency
|
||||
|
||||
if 'push_enabled' in request.data:
|
||||
|
||||
@ -3,6 +3,7 @@ from unittest.mock import patch
|
||||
import pytest
|
||||
|
||||
from notifications.models import Notification
|
||||
from notifications.models import UserChannelPreferences
|
||||
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
@ -106,3 +107,54 @@ class TestNotificationRealtimeEvents:
|
||||
args, kwargs = send_event.call_args
|
||||
assert args == (user.id, [matching.id])
|
||||
assert kwargs == {"category": "Заявки"}
|
||||
|
||||
|
||||
class TestNotificationPreferencesApi:
|
||||
def test_get_preferences_returns_never_frequency(
|
||||
self, api_client, user_factory
|
||||
):
|
||||
user = user_factory()
|
||||
UserChannelPreferences.objects.create(
|
||||
user=user,
|
||||
email_enabled=True,
|
||||
email_frequency="never",
|
||||
)
|
||||
|
||||
api_client.force_authenticate(user=user)
|
||||
response = api_client.get("/api/v1/notifications/preferences/")
|
||||
|
||||
assert response.status_code == 200
|
||||
assert response.data["email_frequency"] == "never"
|
||||
|
||||
def test_put_preferences_accepts_legacy_disabled_alias(
|
||||
self, api_client, user_factory
|
||||
):
|
||||
user = user_factory()
|
||||
api_client.force_authenticate(user=user)
|
||||
|
||||
response = api_client.put(
|
||||
"/api/v1/notifications/preferences/",
|
||||
{"email_enabled": True, "email_frequency": "disabled"},
|
||||
format="json",
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
prefs = UserChannelPreferences.objects.get(user=user)
|
||||
assert prefs.email_enabled is True
|
||||
assert prefs.email_frequency == "never"
|
||||
|
||||
def test_put_preferences_accepts_never(
|
||||
self, api_client, user_factory
|
||||
):
|
||||
user = user_factory()
|
||||
api_client.force_authenticate(user=user)
|
||||
|
||||
response = api_client.put(
|
||||
"/api/v1/notifications/preferences/",
|
||||
{"email_frequency": "never"},
|
||||
format="json",
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
prefs = UserChannelPreferences.objects.get(user=user)
|
||||
assert prefs.email_frequency == "never"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user