1 from __future__ import with_statement
7 sys.path.append("../src")
9 import util.coroutines as coroutines
14 logging.basicConfig(level=logging.DEBUG)
17 class MockBackend(object):
19 def __init__(self, conversationsData):
20 self.conversationsData = conversationsData
22 def get_messages(self):
23 return self.conversationsData
26 def generate_update_callback(callbackData):
29 @coroutines.expand_positional
30 def callback(conversations, updatedIds):
31 callbackData.append((conversations, updatedIds))
36 def test_no_conversations():
38 callback = generate_update_callback(callbackData)
40 backend = MockBackend([])
41 conversings = gvoice.conversations.Conversations(backend)
42 conversings.updateSignalHandler.register_sink(callback)
43 assert len(callbackData) == 0, "%r" % callbackData
46 assert len(callbackData) == 0, "%r" % callbackData
48 conversings.update(force=True)
49 assert len(callbackData) == 0, "%r" % callbackData
51 contacts = list(conversings.get_conversations())
52 assert len(contacts) == 0
55 def test_a_conversation():
57 callback = generate_update_callback(callbackData)
59 backend = MockBackend([
64 "time": datetime.datetime(2000, 1, 1),
65 "relTime": "Sometime back",
66 "prettyNumber": "(555) 555-1224",
67 "number": "5555551224",
70 ("Innocent Man", "Body of Message", "Forever ago")
74 conversings = gvoice.conversations.Conversations(backend)
75 conversings.updateSignalHandler.register_sink(callback)
76 assert len(callbackData) == 0, "%r" % callbackData
79 assert len(callbackData) == 1, "%r" % callbackData
82 cons = list(conversings.get_conversations())
84 assert cons[0] == ("con1", "5555551224"), cons
87 assert len(callbackData) == 0, "%r" % callbackData
89 conversings.update(force=True)
90 assert len(callbackData) == 0, "%r" % callbackData
93 def test_adding_a_conversation():
95 callback = generate_update_callback(callbackData)
97 backend = MockBackend([
102 "time": datetime.datetime(2000, 1, 1),
103 "relTime": "Sometime back",
104 "prettyNumber": "(555) 555-1224",
105 "number": "5555551224",
108 ("Innocent Man", "Body of Message", "Forever ago")
112 conversings = gvoice.conversations.Conversations(backend)
113 conversings.updateSignalHandler.register_sink(callback)
114 assert len(callbackData) == 0, "%r" % callbackData
117 assert len(callbackData) == 1, "%r" % callbackData
120 cons = list(conversings.get_conversations())
121 assert len(cons) == 1
122 assert cons[0] == ("con1", "5555551224"), cons
125 assert len(callbackData) == 0, "%r" % callbackData
127 conversings.update(force=True)
128 assert len(callbackData) == 0, "%r" % callbackData
130 backend.conversationsData.append(
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",
141 ("Con Man", "Body of Message somewhere", "Maybe")
147 assert len(callbackData) == 0, "%r" % callbackData
149 conversings.update(force=True)
150 assert len(callbackData) == 1, "%r" % callbackData
151 idsOnly = callbackData[0][1]
152 assert ("con2", "5555552244") in idsOnly, idsOnly
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
160 def test_merging_a_conversation():
162 callback = generate_update_callback(callbackData)
164 backend = MockBackend([
169 "time": datetime.datetime(2000, 1, 1),
170 "relTime": "Sometime back",
171 "prettyNumber": "(555) 555-1224",
172 "number": "5555551224",
175 ("Innocent Man", "Body of Message", "Forever ago")
179 conversings = gvoice.conversations.Conversations(backend)
180 conversings.updateSignalHandler.register_sink(callback)
181 assert len(callbackData) == 0, "%r" % callbackData
184 assert len(callbackData) == 1, "%r" % callbackData
187 cons = list(conversings.get_conversations())
188 assert len(cons) == 1
189 assert cons[0] == ("con1", "5555551224"), cons
192 assert len(callbackData) == 0, "%r" % callbackData
194 conversings.update(force=True)
195 assert len(callbackData) == 0, "%r" % callbackData
197 backend.conversationsData.append(
202 "time": datetime.datetime(2003, 1, 1),
203 "relTime": "Sometime back",
204 "prettyNumber": "(555) 555-1224",
205 "number": "5555551224",
208 ("Innocent Man", "Mwahahaah", "somewhat closer")
214 assert len(callbackData) == 0, "%r" % callbackData
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"]