forked from jazzband/django-push-notifications
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_wns.py
160 lines (146 loc) · 4.83 KB
/
test_wns.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
import xml.etree.ElementTree as ET
from django.test import TestCase
from push_notifications.wns import (
dict_to_xml_schema, wns_send_bulk_message, wns_send_message
)
from ._mock import mock
class WNSSendMessageTestCase(TestCase):
def setUp(self):
pass
@mock.patch("push_notifications.wns._wns_prepare_toast", return_value="this is expected")
@mock.patch("push_notifications.wns._wns_send")
def test_send_message_calls_wns_send_with_toast(self, mock_method, _):
wns_send_message(uri="one", message="test message")
mock_method.assert_called_with(uri="one", data="this is expected", wns_type="wns/toast")
@mock.patch("push_notifications.wns.dict_to_xml_schema", return_value=ET.Element("toast"))
@mock.patch("push_notifications.wns._wns_send")
def test_send_message_calls_wns_send_with_xml(self, mock_method, _):
wns_send_message(uri="one", xml_data={"key": "value"})
mock_method.assert_called_with(uri="one", data=b"<toast />", wns_type="wns/toast")
def test_send_message_raises_TypeError_if_one_of_the_data_params_arent_filled(self):
with self.assertRaises(TypeError):
wns_send_message(uri="one")
class WNSSendBulkMessageTestCase(TestCase):
def setUp(self):
pass
@mock.patch("push_notifications.wns.wns_send_message")
def test_send_bulk_message_doesnt_call_send_message_with_empty_list(self, mock_method):
wns_send_bulk_message(uri_list=[], message="test message")
mock_method.assert_not_called()
@mock.patch("push_notifications.wns.wns_send_message")
def test_send_bulk_message_calls_send_message(self, mock_method):
wns_send_bulk_message(uri_list=["one", ], message="test message")
mock_method.assert_called_with(
message="test message", raw_data=None, uri="one", xml_data=None
)
class WNSDictToXmlSchemaTestCase(TestCase):
def setUp(self):
pass
def test_create_simple_xml_from_dict(self):
xml_data = {
"toast": {
"attrs": {"key": "value"},
"children": {
"visual": {
"children": {
"binding": {
"attrs": {"template": "ToastText01"},
"children": {
"text": {
"attrs": {"id": "1"},
"children": "toast notification"
}
}
}
}
}
}
}
}
# Converting xml to str via tostring is inconsistent, so we have to check each element.
xml_tree = dict_to_xml_schema(xml_data)
self.assertEqual(xml_tree.tag, "toast")
self.assertEqual(xml_tree.attrib, {"key": "value"})
visual = xml_tree.getchildren()[0]
self.assertEqual(visual.tag, "visual")
binding = visual.getchildren()[0]
self.assertEqual(binding.tag, "binding")
self.assertEqual(binding.attrib, {"template": "ToastText01"})
text = binding.getchildren()[0]
self.assertEqual(text.tag, "text")
self.assertEqual(text.attrib, {"id": "1"})
self.assertEqual(text.text, "toast notification")
def test_create_multi_sub_element_xml_from_dict(self):
xml_data = {
"toast": {
"attrs": {
"key": "value"
},
"children": {
"visual": {
"children": {
"binding": {
"attrs": {"template": "ToastText02"},
"children": {
"text": [
{"attrs": {"id": "1"}, "children": "first text"},
{"attrs": {"id": "2"}, "children": "second text"},
]
}
}
}
}
}
}
}
# Converting xml to str via tostring is inconsistent, so we have to check each element.
xml_tree = dict_to_xml_schema(xml_data)
self.assertEqual(xml_tree.tag, "toast")
self.assertEqual(xml_tree.attrib, {"key": "value"})
visual = xml_tree.getchildren()[0]
self.assertEqual(visual.tag, "visual")
binding = visual.getchildren()[0]
self.assertEqual(binding.tag, "binding")
self.assertEqual(binding.attrib, {"template": "ToastText02"})
children = binding.getchildren()
self.assertEqual(len(children), 2)
def test_create_two_multi_sub_element_xml_from_dict(self):
xml_data = {
"toast": {
"attrs": {
"key": "value"
},
"children": {
"visual": {
"children": {
"binding": {
"attrs": {
"template": "ToastText02"
},
"children": {
"text": [
{"attrs": {"id": "1"}, "children": "first text"},
{"attrs": {"id": "2"}, "children": "second text"},
],
"image": [
{"attrs": {"src": "src1"}},
{"attrs": {"src": "src2"}},
]
}
}
}
}
}
}
}
# Converting xml to str via tostring is inconsistent, so we have to check each element.
xml_tree = dict_to_xml_schema(xml_data)
self.assertEqual(xml_tree.tag, "toast")
self.assertEqual(xml_tree.attrib, {"key": "value"})
visual = xml_tree.getchildren()[0]
self.assertEqual(visual.tag, "visual")
binding = visual.getchildren()[0]
self.assertEqual(binding.tag, "binding")
self.assertEqual(binding.attrib, {"template": "ToastText02"})
children = binding.getchildren()
self.assertEqual(len(children), 4)