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) == 1
77 name = book.get_contact_name(id)
78 assert name == backend.contactsData[id]["name"]
81 assert len(callbackData) == 0, "%r" % callbackData
83 book.update(force=True)
84 assert len(callbackData) == 0, "%r" % callbackData
86 contacts = list(book.get_contacts())
87 assert len(contacts) == 1
89 name = book.get_contact_name(id)
90 assert name == backend.contactsData[id]["name"]
92 contactDetails = list(book.get_contact_details(id))
93 assert len(contactDetails) == 0
96 def test_one_contact_with_details():
98 callback = generate_update_callback(callbackData)
100 backend = MockBackend([
103 "details": [("Type A", "123"), ("Type B", "456"), ("Type C", "789")],
106 book = gvoice.addressbook.Addressbook(backend)
107 book.updateSignalHandler.register_sink(callback)
108 assert len(callbackData) == 0, "%r" % callbackData
110 contacts = list(book.get_contacts())
111 assert len(contacts) == 1
113 name = book.get_contact_name(id)
114 assert name == backend.contactsData[id]["name"]
117 assert len(callbackData) == 0, "%r" % callbackData
119 book.update(force=True)
120 assert len(callbackData) == 0, "%r" % callbackData
122 contacts = list(book.get_contacts())
123 assert len(contacts) == 1
125 name = book.get_contact_name(id)
126 assert name == backend.contactsData[id]["name"]
128 contactDetails = list(book.get_contact_details(id))
129 print "%r" % contactDetails
130 assert len(contactDetails) == 3
131 assert contactDetails[0][0] == "Type A"
132 assert contactDetails[0][1] == "123"
133 assert contactDetails[1][0] == "Type B"
134 assert contactDetails[1][1] == "456"
135 assert contactDetails[2][0] == "Type C"
136 assert contactDetails[2][1] == "789"
139 def test_adding_a_contact():
141 callback = generate_update_callback(callbackData)
143 backend = MockBackend([
149 book = gvoice.addressbook.Addressbook(backend)
150 book.updateSignalHandler.register_sink(callback)
151 assert len(callbackData) == 0, "%r" % callbackData
154 assert len(callbackData) == 0, "%r" % callbackData
156 book.update(force=True)
157 assert len(callbackData) == 0, "%r" % callbackData
159 backend.contactsData.append({
165 assert len(callbackData) == 0, "%r" % callbackData
167 book.update(force=True)
168 assert len(callbackData) == 1, "%r" % callbackData
170 callbackBook, addedContacts, removedContacts, changedContacts = callbackData[0]
171 assert callbackBook is book
172 assert len(addedContacts) == 1
173 assert 1 in addedContacts
174 assert len(removedContacts) == 0
175 assert len(changedContacts) == 0
178 def test_removing_a_contact():
180 callback = generate_update_callback(callbackData)
182 backend = MockBackend([
188 book = gvoice.addressbook.Addressbook(backend)
189 book.updateSignalHandler.register_sink(callback)
190 assert len(callbackData) == 0, "%r" % callbackData
193 assert len(callbackData) == 0, "%r" % callbackData
195 book.update(force=True)
196 assert len(callbackData) == 0, "%r" % callbackData
198 del backend.contactsData[:]
201 assert len(callbackData) == 0, "%r" % callbackData
203 book.update(force=True)
204 assert len(callbackData) == 1, "%r" % callbackData
206 callbackBook, addedContacts, removedContacts, changedContacts = callbackData[0]
207 assert callbackBook is book
208 assert len(addedContacts) == 0
209 assert len(removedContacts) == 1
210 assert 0 in removedContacts
211 assert len(changedContacts) == 0