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):
24 for (i, contactData) in enumerate(self.contactsData)
28 def generate_update_callback(callbackData):
31 @coroutines.expand_positional
32 def callback(book, addedContacts, removedContacts, changedContacts):
33 callbackData.append((book, addedContacts, removedContacts, changedContacts))
38 def test_no_contacts():
40 callback = generate_update_callback(callbackData)
42 backend = MockBackend([])
43 book = gvoice.addressbook.Addressbook(backend)
44 book.updateSignalHandler.register_sink(callback)
45 assert len(callbackData) == 0, "%r" % callbackData
48 assert len(callbackData) == 0, "%r" % callbackData
50 book.update(force=True)
51 assert len(callbackData) == 0, "%r" % callbackData
53 contacts = list(book.get_contacts())
54 assert len(contacts) == 0
57 def test_one_contact_no_details():
59 callback = generate_update_callback(callbackData)
61 backend = MockBackend([
67 book = gvoice.addressbook.Addressbook(backend)
68 book.updateSignalHandler.register_sink(callback)
69 assert len(callbackData) == 0, "%r" % callbackData
71 contacts = list(book.get_contacts())
72 assert len(contacts) == 0, "%r" % contacts
75 assert len(callbackData) == 1, "%r" % callbackData
77 contacts = list(book.get_contacts())
78 assert len(contacts) == 1, "%r" % contacts
80 name = book.get_contact_name(id)
81 assert name == backend.contactsData[id]["name"]
84 assert len(callbackData) == 0, "%r" % callbackData
86 book.update(force=True)
87 assert len(callbackData) == 0, "%r" % callbackData
89 contacts = list(book.get_contacts())
90 assert len(contacts) == 1
92 name = book.get_contact_name(id)
93 assert name == backend.contactsData[id]["name"]
96 def test_one_contact_with_details():
98 callback = generate_update_callback(callbackData)
100 backend = MockBackend([
104 {"phoneType": "Type A", "phoneNumber": "123"},
105 {"phoneType": "Type B", "phoneNumber": "456"},
106 {"phoneType": "Type C", "phoneNumber": "789"}],
109 book = gvoice.addressbook.Addressbook(backend)
110 book.updateSignalHandler.register_sink(callback)
111 assert len(callbackData) == 0, "%r" % callbackData
113 contacts = list(book.get_contacts())
114 assert len(contacts) == 0, "%r" % contacts
117 assert len(callbackData) == 1, "%r" % callbackData
119 contacts = list(book.get_contacts())
120 assert len(contacts) == 1, "%r" % contacts
122 name = book.get_contact_name(id)
123 assert name == backend.contactsData[id]["name"]
126 assert len(callbackData) == 0, "%r" % callbackData
128 book.update(force=True)
129 assert len(callbackData) == 0, "%r" % callbackData
131 contacts = list(book.get_contacts())
132 assert len(contacts) == 1
134 name = book.get_contact_name(id)
135 assert name == backend.contactsData[id]["name"]
138 def test_adding_a_contact():
140 callback = generate_update_callback(callbackData)
142 backend = MockBackend([
148 book = gvoice.addressbook.Addressbook(backend)
149 book.updateSignalHandler.register_sink(callback)
150 assert len(callbackData) == 0, "%r" % callbackData
153 assert len(callbackData) == 1, "%r" % callbackData
157 assert len(callbackData) == 0, "%r" % callbackData
159 book.update(force=True)
160 assert len(callbackData) == 0, "%r" % callbackData
162 backend.contactsData.append({
168 assert len(callbackData) == 0, "%r" % callbackData
170 book.update(force=True)
171 assert len(callbackData) == 1, "%r" % callbackData
173 callbackBook, addedContacts, removedContacts, changedContacts = callbackData[0]
174 assert callbackBook is book
175 assert len(addedContacts) == 1
176 assert 1 in addedContacts
177 assert len(removedContacts) == 0
178 assert len(changedContacts) == 0
181 def test_removing_a_contact():
183 callback = generate_update_callback(callbackData)
185 backend = MockBackend([
191 book = gvoice.addressbook.Addressbook(backend)
192 book.updateSignalHandler.register_sink(callback)
193 assert len(callbackData) == 0, "%r" % callbackData
196 assert len(callbackData) == 1, "%r" % callbackData
200 assert len(callbackData) == 0, "%r" % callbackData
202 book.update(force=True)
203 assert len(callbackData) == 0, "%r" % callbackData
205 del backend.contactsData[:]
208 assert len(callbackData) == 0, "%r" % callbackData
210 book.update(force=True)
211 assert len(callbackData) == 1, "%r" % callbackData
213 callbackBook, addedContacts, removedContacts, changedContacts = callbackData[0]
214 assert callbackBook is book
215 assert len(addedContacts) == 0
216 assert len(removedContacts) == 1
217 assert 0 in removedContacts
218 assert len(changedContacts) == 0