Adding support for building .debs
[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         cons = list(conversings.get_conversations())
79         assert len(cons) == 1
80         assert cons[0] == ("con1", "5555551224"), cons
81
82         conversings.update()
83         assert len(callbackData) == 0, "%r" % callbackData
84
85         conversings.update(force=True)
86         assert len(callbackData) == 0, "%r" % callbackData
87
88
89 def test_adding_a_conversation():
90         callbackData = []
91         callback = generate_update_callback(callbackData)
92
93         backend = MockBackend([
94                 {
95                         "id": "conv1",
96                         "contactId": "con1",
97                         "name": "Con Man",
98                         "time": datetime.datetime(2000, 1, 1),
99                         "relTime": "Sometime back",
100                         "prettyNumber": "(555) 555-1224",
101                         "number": "5555551224",
102                         "location": "",
103                         "messageParts": [
104                                 ("Innocent Man", "Body of Message", "Forever ago")
105                         ],
106                 },
107         ])
108         conversings = gvoice.conversations.Conversations(backend)
109         conversings.updateSignalHandler.register_sink(callback)
110         assert len(callbackData) == 0, "%r" % callbackData
111
112         cons = list(conversings.get_conversations())
113         assert len(cons) == 1
114         assert cons[0] == ("con1", "5555551224"), cons
115
116         conversings.update()
117         assert len(callbackData) == 0, "%r" % callbackData
118
119         conversings.update(force=True)
120         assert len(callbackData) == 0, "%r" % callbackData
121
122         backend.conversationsData.append(
123                 {
124                         "id": "conv2",
125                         "contactId": "con2",
126                         "name": "Pretty Man",
127                         "time": datetime.datetime(2003, 1, 1),
128                         "relTime": "Somewhere over the rainbow",
129                         "prettyNumber": "(555) 555-2244",
130                         "number": "5555552244",
131                         "location": "",
132                         "messageParts": [
133                                 ("Con Man", "Body of Message somewhere", "Maybe")
134                         ],
135                 },
136         )
137
138         conversings.update()
139         assert len(callbackData) == 0, "%r" % callbackData
140
141         conversings.update(force=True)
142         assert len(callbackData) == 1, "%r" % callbackData
143         idsOnly = callbackData[0][1]
144         assert ("con2", "5555552244") in idsOnly, idsOnly
145
146         cons = list(conversings.get_conversations())
147         assert len(cons) == 2
148         assert ("con1", "5555551224") in cons, cons
149         assert ("con2", "5555552244") in cons, cons
150
151
152 def test_merging_a_conversation():
153         callbackData = []
154         callback = generate_update_callback(callbackData)
155
156         backend = MockBackend([
157                 {
158                         "id": "conv1",
159                         "contactId": "con1",
160                         "name": "Con Man",
161                         "time": datetime.datetime(2000, 1, 1),
162                         "relTime": "Sometime back",
163                         "prettyNumber": "(555) 555-1224",
164                         "number": "5555551224",
165                         "location": "",
166                         "messageParts": [
167                                 ("Innocent Man", "Body of Message", "Forever ago")
168                         ],
169                 },
170         ])
171         conversings = gvoice.conversations.Conversations(backend)
172         conversings.updateSignalHandler.register_sink(callback)
173         assert len(callbackData) == 0, "%r" % callbackData
174
175         cons = list(conversings.get_conversations())
176         assert len(cons) == 1
177         assert cons[0] == ("con1", "5555551224"), cons
178
179         conversings.update()
180         assert len(callbackData) == 0, "%r" % callbackData
181
182         conversings.update(force=True)
183         assert len(callbackData) == 0, "%r" % callbackData
184
185         backend.conversationsData.append(
186                 {
187                         "id": "conv1",
188                         "contactId": "con1",
189                         "name": "Con Man",
190                         "time": datetime.datetime(2003, 1, 1),
191                         "relTime": "Sometime back",
192                         "prettyNumber": "(555) 555-1224",
193                         "number": "5555551224",
194                         "location": "",
195                         "messageParts": [
196                                 ("Innocent Man", "Mwahahaah", "somewhat closer")
197                         ],
198                 },
199         )
200
201         conversings.update()
202         assert len(callbackData) == 0, "%r" % callbackData
203
204         conversings.update(force=True)
205         assert len(callbackData) == 1, "%r" % callbackData
206         idsOnly = callbackData[0][1]
207         assert ("con1", "5555551224") in idsOnly, idsOnly
208         convseration = conversings.get_conversation(idsOnly.pop())
209         assert len(convseration["messageParts"]) == 2, convseration["messageParts"]