mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
Merge pull request #3633 from modoboa/fix/alarm_bulk_delete
Changed HTTP method for alarm bulk delete endpoint
This commit is contained in:
@@ -13,8 +13,6 @@ export default {
|
||||
return repository.delete(`${resource}/${alarmId}/`)
|
||||
},
|
||||
bulkDelete(alarmsIds) {
|
||||
return repository.delete(`${resource}/bulk_delete/`, {
|
||||
params: { ids: alarmsIds },
|
||||
})
|
||||
return repository.post(`${resource}/bulk_delete/`, { ids: alarmsIds })
|
||||
},
|
||||
}
|
||||
|
||||
@@ -741,6 +741,11 @@ class AlarmSerializer(serializers.ModelSerializer):
|
||||
model = models.Alarm
|
||||
|
||||
|
||||
class AlarmBulkDeleteSerializer(serializers.Serializer):
|
||||
|
||||
ids = serializers.ListField(child=serializers.IntegerField())
|
||||
|
||||
|
||||
class AlarmSwitchStatusSerializer(serializers.Serializer):
|
||||
"""Serializer to switch the status of an Alarm."""
|
||||
|
||||
|
||||
@@ -806,9 +806,10 @@ class AlarmViewSetTestCase(ModoAPITestCase):
|
||||
|
||||
def test_bulk_delete(self):
|
||||
url = reverse("v2:alarm-bulk-delete")
|
||||
resp = self.client.delete(url)
|
||||
resp = self.client.post(url)
|
||||
self.assertEqual(resp.status_code, 400)
|
||||
resp = self.client.delete(f"{url}?ids[]=toto")
|
||||
data = {"ids": ["toto"]}
|
||||
resp = self.client.post(url, data, format="json")
|
||||
self.assertEqual(resp.status_code, 400)
|
||||
alarm1 = factories.AlarmFactory(
|
||||
domain__name="test.com", mailbox=None, title="Test alarm"
|
||||
@@ -816,7 +817,8 @@ class AlarmViewSetTestCase(ModoAPITestCase):
|
||||
alarm2 = factories.AlarmFactory(
|
||||
domain__name="test.com", mailbox=None, title="Test alarm"
|
||||
)
|
||||
resp = self.client.delete(f"{url}?ids[]={alarm1.pk}&ids[]={alarm2.pk}")
|
||||
data = {"ids": [alarm1.pk, alarm2.pk]}
|
||||
resp = self.client.post(url, data, format="json")
|
||||
self.assertEqual(resp.status_code, 204)
|
||||
with self.assertRaises(models.Alarm.DoesNotExist):
|
||||
alarm1.refresh_from_db()
|
||||
|
||||
@@ -387,11 +387,18 @@ class AlarmViewSet(
|
||||
.order_by("-created")
|
||||
)
|
||||
|
||||
def get_serializer_class(self, *args, **kwargs):
|
||||
if self.action == "bulk_delete":
|
||||
return serializers.AlarmBulkDeleteSerializer
|
||||
elif self.action == "switch":
|
||||
return serializers.AlarmSwitchStatusSerializer
|
||||
return serializers.AlarmSerializer
|
||||
|
||||
@action(methods=["patch"], detail=True)
|
||||
def switch(self, request, **kwargs):
|
||||
"""Custom update method that switch status of an alarm."""
|
||||
alarm = self.get_object()
|
||||
serializer = serializers.AlarmSwitchStatusSerializer(data=request.data)
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
if serializer.data["status"] == constants.ALARM_CLOSED:
|
||||
alarm.close()
|
||||
@@ -399,15 +406,10 @@ class AlarmViewSet(
|
||||
alarm.reopen()
|
||||
return response.Response(status=status.HTTP_204_NO_CONTENT)
|
||||
|
||||
@action(methods=["delete"], detail=False)
|
||||
@action(methods=["post"], detail=False)
|
||||
def bulk_delete(self, request, **kwargs):
|
||||
"""Delete multiple alarms at the same time."""
|
||||
ids = request.query_params.getlist("ids[]")
|
||||
if not ids:
|
||||
return response.Response(_("No alarm ID provided"), status=400)
|
||||
try:
|
||||
ids = [int(alarm_id) for alarm_id in ids]
|
||||
except ValueError:
|
||||
return response.Response(_("Received invalid alarm id(s)"), status=400)
|
||||
models.Alarm.objects.filter(pk__in=ids).delete()
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
models.Alarm.objects.filter(pk__in=serializer.validated_data["ids"]).delete()
|
||||
return response.Response(status=204)
|
||||
|
||||
Reference in New Issue
Block a user