Adding some notes on bugs
[theonering] / tests / test_conversations.py
1 from __future__ import with_statement
2
3 import datetime
4 import logging
5
6 import sys
7 sys.path.append("../src")
8
9 import util.coroutines as coroutines
10
11 import gvoice
12
13
14 logging.basicConfig(level=logging.DEBUG)
15
16
17 class MockBackend(object):
18
19         def __init__(self, conversationsData):
20                 self.conversationsData = conversationsData
21
22         def get_messages(self):
23                 return self.conversationsData
24
25
26 def generate_update_callback(callbackData):
27
28         @coroutines.func_sink
29         @coroutines.expand_positional
30         def callback(conversations, updatedIds):
31                 callbackData.append((conversations, updatedIds))
32
33         return callback
34
35
36 def test_no_conversations():
37         callbackData = []
38         callback = generate_update_callback(callbackData)
39
40         backend = MockBackend([])
41         conversings = gvoice.conversations.Conversations(backend)
42         conversings.updateSignalHandler.register_sink(callback)
43         assert len(callbackData) == 0, "%r" % callbackData
44
45         conversings.update()
46         assert len(callbackData) == 0, "%r" % callbackData
47
48         conversings.update(force=True)
49         assert len(callbackData) == 0, "%r" % callbackData
50
51         contacts = list(conversings.get_conversations())
52         assert len(contacts) == 0
53
54
55 def test_a_conversation():
56         callbackData = []
57         callback = generate_update_callback(callbackData)
58
59         backend = MockBackend([
60                 {
61                         "id": "conv1",
62                         "contactId": "con1",
63                         "name": "Con Man",
64                         "time": datetime.datetime(2000, 1, 1),
65                         "relTime": "Sometime back",
66                         "prettyNumber": "(555) 555-1224",
67                         "number": "5555551224",
68                         "location": "",
69                         "messageParts": [
70                                 ("Innocent Man", "Body of Message", "Forever ago")
71                         ],
72                 },
73         ])
74         conversings = gvoice.conversations.Conversations(backend)
75         conversings.updateSignalHandler.register_sink(callback)
76         assert len(callbackData) == 0, "%r" % callbackData
77
78         conversings.update()
79         assert len(callbackData) == 1, "%r" % callbackData
80         del callbackData[:]
81
82         cons = list(conversings.get_conversations())
83         assert len(cons) == 1
84         assert cons[0] == ("con1", "5555551224"), cons
85
86         conversings.update()
87         assert len(callbackData) == 0, "%r" % callbackData
88
89         conversings.update(force=True)
90         assert len(callbackData) == 0, "%r" % callbackData
91
92
93 def test_adding_a_conversation():
94         callbackData = []
95         callback = generate_update_callback(callbackData)
96
97         backend = MockBackend([
98                 {
99                         "id": "conv1",
100                         "contactId": "con1",
101                         "name": "Con Man",
102                         "time": datetime.datetime(2000, 1, 1),
103                         "relTime": "Sometime back",
104                         "prettyNumber": "(555) 555-1224",
105                         "number": "5555551224",
106                         "location": "",
107                         "messageParts": [
108                                 ("Innocent Man", "Body of Message", "Forever ago")
109                         ],
110                 },
111         ])
112         conversings = gvoice.conversations.Conversations(backend)
113         conversings.updateSignalHandler.register_sink(callback)
114         assert len(callbackData) == 0, "%r" % callbackData
115
116         conversings.update()
117         assert len(callbackData) == 1, "%r" % callbackData
118         del callbackData[:]
119
120         cons = list(conversings.get_conversations())
121         assert len(cons) == 1
122         assert cons[0] == ("con1", "5555551224"), cons
123
124         conversings.update()
125         assert len(callbackData) == 0, "%r" % callbackData
126
127         conversings.update(force=True)
128         assert len(callbackData) == 0, "%r" % callbackData
129
130         backend.conversationsData.append(
131                 {
132                         "id": "conv2",
133                         "contactId": "con2",
134                         "name": "Pretty Man",
135                         "time": datetime.datetime(2003, 1, 1),
136                         "relTime": "Somewhere over the rainbow",
137                         "prettyNumber": "(555) 555-2244",
138                         "number": "5555552244",
139                         "location": "",
140                         "messageParts": [
141                                 ("Con Man", "Body of Message somewhere", "Maybe")
142                         ],
143                 },
144         )
145
146         conversings.update()
147         assert len(callbackData) == 0, "%r" % callbackData
148
149         conversings.update(force=True)
150         assert len(callbackData) == 1, "%r" % callbackData
151         idsOnly = callbackData[0][1]
152         assert ("con2", "5555552244") in idsOnly, idsOnly
153
154         cons = list(conversings.get_conversations())
155         assert len(cons) == 2
156         assert ("con1", "5555551224") in cons, cons
157         assert ("con2", "5555552244") in cons, cons
158
159
160 def test_merging_a_conversation():
161         callbackData = []
162         callback = generate_update_callback(callbackData)
163
164         backend = MockBackend([
165                 {
166                         "id": "conv1",
167                         "contactId": "con1",
168                         "name": "Con Man",
169                         "time": datetime.datetime(2000, 1, 1),
170                         "relTime": "Sometime back",
171                         "prettyNumber": "(555) 555-1224",
172                         "number": "5555551224",
173                         "location": "",
174                         "messageParts": [
175                                 ("Innocent Man", "Body of Message", "Forever ago")
176                         ],
177                 },
178         ])
179         conversings = gvoice.conversations.Conversations(backend)
180         conversings.updateSignalHandler.register_sink(callback)
181         assert len(callbackData) == 0, "%r" % callbackData
182
183         conversings.update()
184         assert len(callbackData) == 1, "%r" % callbackData
185         del callbackData[:]
186
187         cons = list(conversings.get_conversations())
188         assert len(cons) == 1
189         assert cons[0] == ("con1", "5555551224"), cons
190
191         conversings.update()
192         assert len(callbackData) == 0, "%r" % callbackData
193
194         conversings.update(force=True)
195         assert len(callbackData) == 0, "%r" % callbackData
196
197         backend.conversationsData.append(
198                 {
199                         "id": "conv1",
200                         "contactId": "con1",
201                         "name": "Con Man",
202                         "time": datetime.datetime(2003, 1, 1),
203                         "relTime": "Sometime back",
204                         "prettyNumber": "(555) 555-1224",
205                         "number": "5555551224",
206                         "location": "",
207                         "messageParts": [
208                                 ("Innocent Man", "Mwahahaah", "somewhat closer")
209                         ],
210                 },
211         )
212
213         conversings.update()
214         assert len(callbackData) == 0, "%r" % callbackData
215
216         conversings.update(force=True)
217         assert len(callbackData) == 1, "%r" % callbackData
218         idsOnly = callbackData[0][1]
219         assert ("con1", "5555551224") in idsOnly, idsOnly
220         convseration = conversings.get_conversation(idsOnly.pop())
221         assert len(convseration["messageParts"]) == 2, convseration["messageParts"]