1 from __future__ import with_statement
6 sys.path.append("../src")
8 import util.coroutines as coroutines
13 logging.basicConfig(level=logging.DEBUG)
16 class MockBackend(object):
18 def __init__(self, contactsData):
19 self.contactsData = contactsData
21 def get_contacts(self):
23 (i, contactData["name"])
24 for (i, contactData) in enumerate(self.contactsData)
27 def get_contact_details(self, contactId):
28 return self.contactsData[contactId]["details"]
31 def generate_update_callback(callbackData):
34 @coroutines.expand_positional
35 def callback(book, addedContacts, removedContacts, changedContacts):
36 callbackData.append((book, addedContacts, removedContacts, changedContacts))
41 def test_no_contacts():
43 callback = generate_update_callback(callbackData)
45 backend = MockBackend([])
46 book = gvoice.addressbook.Addressbook(backend)
47 book.updateSignalHandler.register_sink(callback)
48 assert len(callbackData) == 0, "%r" % callbackData
51 assert len(callbackData) == 0, "%r" % callbackData
53 book.update(force=True)
54 assert len(callbackData) == 0, "%r" % callbackData
56 contacts = list(book.get_contacts())
57 assert len(contacts) == 0
60 def test_one_contact_no_details():
62 callback = generate_update_callback(callbackData)
64 backend = MockBackend([
70 book = gvoice.addressbook.Addressbook(backend)
71 book.updateSignalHandler.register_sink(callback)
72 assert len(callbackData) == 0, "%r" % callbackData
74 contacts = list(book.get_contacts())
75 assert len(contacts) == 0, "%r" % contacts
78 assert len(callbackData) == 1, "%r" % callbackData
80 contacts = list(book.get_contacts())
81 assert len(contacts) == 1, "%r" % contacts
83 name = book.get_contact_name(id)
84 assert name == backend.contactsData[id]["name"]
87 assert len(callbackData) == 0, "%r" % callbackData
89 book.update(force=True)
90 assert len(callbackData) == 0, "%r" % callbackData
92 contacts = list(book.get_contacts())
93 assert len(contacts) == 1
95 name = book.get_contact_name(id)
96 assert name == backend.contactsData[id]["name"]
98 contactDetails = list(book.get_contact_details(id))
99 assert len(contactDetails) == 0
102 def test_one_contact_with_details():
104 callback = generate_update_callback(callbackData)
106 backend = MockBackend([
109 "details": [("Type A", "123"), ("Type B", "456"), ("Type C", "789")],
112 book = gvoice.addressbook.Addressbook(backend)
113 book.updateSignalHandler.register_sink(callback)
114 assert len(callbackData) == 0, "%r" % callbackData
116 contacts = list(book.get_contacts())
117 assert len(contacts) == 0, "%r" % contacts
120 assert len(callbackData) == 1, "%r" % callbackData
122 contacts = list(book.get_contacts())
123 assert len(contacts) == 1, "%r" % contacts
125 name = book.get_contact_name(id)
126 assert name == backend.contactsData[id]["name"]
129 assert len(callbackData) == 0, "%r" % callbackData
131 book.update(force=True)
132 assert len(callbackData) == 0, "%r" % callbackData
134 contacts = list(book.get_contacts())
135 assert len(contacts) == 1
137 name = book.get_contact_name(id)
138 assert name == backend.contactsData[id]["name"]
140 contactDetails = list(book.get_contact_details(id))
141 print "%r" % contactDetails
142 assert len(contactDetails) == 3
143 assert contactDetails[0][0] == "Type A"
144 assert contactDetails[0][1] == "123"
145 assert contactDetails[1][0] == "Type B"
146 assert contactDetails[1][1] == "456"
147 assert contactDetails[2][0] == "Type C"
148 assert contactDetails[2][1] == "789"
151 def test_adding_a_contact():
153 callback = generate_update_callback(callbackData)
155 backend = MockBackend([
161 book = gvoice.addressbook.Addressbook(backend)
162 book.updateSignalHandler.register_sink(callback)
163 assert len(callbackData) == 0, "%r" % callbackData
166 assert len(callbackData) == 1, "%r" % callbackData
170 assert len(callbackData) == 0, "%r" % callbackData
172 book.update(force=True)
173 assert len(callbackData) == 0, "%r" % callbackData
175 backend.contactsData.append({
181 assert len(callbackData) == 0, "%r" % callbackData
183 book.update(force=True)
184 assert len(callbackData) == 1, "%r" % callbackData
186 callbackBook, addedContacts, removedContacts, changedContacts = callbackData[0]
187 assert callbackBook is book
188 assert len(addedContacts) == 1
189 assert 1 in addedContacts
190 assert len(removedContacts) == 0
191 assert len(changedContacts) == 0
194 def test_removing_a_contact():
196 callback = generate_update_callback(callbackData)
198 backend = MockBackend([
204 book = gvoice.addressbook.Addressbook(backend)
205 book.updateSignalHandler.register_sink(callback)
206 assert len(callbackData) == 0, "%r" % callbackData
209 assert len(callbackData) == 1, "%r" % callbackData
213 assert len(callbackData) == 0, "%r" % callbackData
215 book.update(force=True)
216 assert len(callbackData) == 0, "%r" % callbackData
218 del backend.contactsData[:]
221 assert len(callbackData) == 0, "%r" % callbackData
223 book.update(force=True)
224 assert len(callbackData) == 1, "%r" % callbackData
226 callbackBook, addedContacts, removedContacts, changedContacts = callbackData[0]
227 assert callbackBook is book
228 assert len(addedContacts) == 0
229 assert len(removedContacts) == 1
230 assert 0 in removedContacts
231 assert len(changedContacts) == 0