Skip to content

Commit 7e13ef8

Browse files
committed
feat(alert-system): add country/region validation in alert subscription serializer
1 parent 1d8fadb commit 7e13ef8

3 files changed

Lines changed: 26 additions & 1 deletion

File tree

assets

notifications/serializers.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from django.utils.translation import gettext
12
from rest_framework import serializers
23

34
from api.serializers import (
@@ -270,6 +271,16 @@ class AlertSubscriptionSerialize(ModelSerializer):
270271
hazard_types_detail = DisasterTypeSerializer(source="hazard_types", many=True, read_only=True)
271272
alert_per_day_display = serializers.CharField(source="get_alert_per_day_display", read_only=True)
272273

274+
def validate(self, attrs):
275+
countries = attrs.get("countries")
276+
regions = attrs.get("regions")
277+
278+
if not countries and not regions:
279+
raise serializers.ValidationError(
280+
{"non_field_errors": gettext("Please select at least one country or one region to create a subscription.")}
281+
)
282+
return attrs
283+
273284
class Meta:
274285
model = AlertSubscription
275286
fields = (

notifications/tests.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,20 @@ def test_list_retrieve_subscription(self):
277277
self.assert_200(response)
278278
self.assertEqual(response.data["user"], self.user1.id)
279279

280+
# Test create Subscription without country and region
281+
def test_create_subscription_without_country_and_region(self):
282+
data = {
283+
"title": "title-1-test",
284+
"user": self.user1.id,
285+
"hazard_types": [self.hazard_type1.id, self.hazard_type2.id],
286+
"alert_per_day": AlertSubscription.AlertPerDay.TEN,
287+
"source": AlertSubscription.AlertSource.MONTANDON,
288+
}
289+
url = "/api/v2/alert-subscription/"
290+
self.authenticate(self.user1)
291+
response = self.client.post(url, data=data, format="json")
292+
self.assert_400(response)
293+
280294
# Test Create Subscription
281295
def test_create_subscription(self):
282296

0 commit comments

Comments
 (0)