Skip to content

Commit 05deef8

Browse files
committed
Add custom message support
Signed-off-by: Kipchirchir Sigei <[email protected]>
1 parent d688155 commit 05deef8

2 files changed

Lines changed: 54 additions & 1 deletion

File tree

onadata/apps/messaging/serializers.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from django.utils.translation import gettext as _
1818
from rest_framework import exceptions, serializers
1919

20+
from onadata.apps.logger.models import Instance
2021
from onadata.apps.messaging.constants import MESSAGE, MESSAGE_VERBS
2122
from onadata.apps.messaging.utils import TargetDoesNotExist, get_target
2223

@@ -151,6 +152,7 @@ def send_message(
151152
target_type: str,
152153
user: User,
153154
message_verb: str,
155+
custom_message: dict = None
154156
):
155157
"""
156158
Send a message.
@@ -180,12 +182,21 @@ def send_message(
180182
ids = instance_id
181183
while len(ids) > 0:
182184
data["message"] = json.dumps({"id": ids[:message_id_limit]})
185+
if custom_message:
186+
message_dict = json.loads(data["message"])
187+
message_dict.update(custom_message)
188+
data["message"] = json.dumps(message_dict)
183189
message = MessageSerializer(data=data, context={"request": request})
184190
del ids[:message_id_limit]
185191
if message.is_valid():
186192
message.save()
187193
else:
188194
data["message"] = json.dumps({"id": instance_id})
195+
if custom_message:
196+
# update default message dict with extra fields
197+
message_dict = json.loads(data["message"])
198+
message_dict.update(custom_message)
199+
data["message"] = json.dumps(message_dict)
189200
message = MessageSerializer(data=data, context={"request": request})
190201
if message.is_valid():
191202
message.save()

onadata/apps/messaging/tests/test_utils.py

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
"""
22
Tests messaging app utils
33
"""
4+
import json
5+
from django.http.request import HttpRequest
46
from django.test.utils import override_settings
57
from unittest.mock import patch
68

79
from onadata.apps.main.tests.test_base import TestBase
810
from onadata.apps.messaging.serializers import send_message
9-
from onadata.apps.messaging.constants import SUBMISSION_DELETED
11+
from onadata.apps.messaging.constants import (
12+
SUBMISSION_DELETED, FORM_RENAMED
13+
)
1014

1115

1216
class TestMessagingUtils(TestBase):
@@ -32,3 +36,41 @@ def is_valid():
3236
self.xform.id, 'xform', self.user, SUBMISSION_DELETED)
3337
self.assertTrue(message_serializer_mock.called)
3438
self.assertEqual(message_serializer_mock.call_count, 2)
39+
40+
@patch('onadata.apps.messaging.serializers.MessageSerializer')
41+
def test_custom_message(self, message_serializer_mock):
42+
def is_valid():
43+
return True
44+
message_serializer_mock.is_valid.side_effect = is_valid
45+
self._create_user_and_login()
46+
self._publish_transportation_form()
47+
instance_id = [1]
48+
custom_message = {
49+
"old_title": "first title",
50+
"new_title": "second title"
51+
}
52+
send_message(
53+
instance_id,
54+
self.xform.id,
55+
'xform',
56+
self.user,
57+
FORM_RENAMED,
58+
custom_message
59+
)
60+
self.assertTrue(message_serializer_mock.called)
61+
self.assertEqual(message_serializer_mock.call_count, 1)
62+
request = HttpRequest()
63+
data = {
64+
"target_id": self.xform.id,
65+
"target_type": 'xform',
66+
"verb": FORM_RENAMED,
67+
"message": json.dumps({
68+
"id": [self.xform.id],
69+
"old_title": "first title",
70+
"new_title": "second title"
71+
})
72+
}
73+
message_serializer_mock.called_with(
74+
data=data, context={"request": request}
75+
)
76+

0 commit comments

Comments
 (0)