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
75 assert len(callbackData) == 0, "%r" % callbackData
77 book.update(force=True)
78 assert len(callbackData) == 0, "%r" % callbackData
80 contacts = list(book.get_contacts())
81 assert len(contacts) == 1
83 name = book.get_contact_name(id)
84 assert name == backend.contactsData[id]["name"]
86 contactDetails = list(book.get_contact_details(id))
87 assert len(contactDetails) == 0
90 def test_one_contact_with_details():
92 callback = generate_update_callback(callbackData)
94 backend = MockBackend([
97 "details": [("Type A", "123"), ("Type B", "456"), ("Type C", "789")],
100 book = gvoice.addressbook.Addressbook(backend)
101 book.updateSignalHandler.register_sink(callback)
102 assert len(callbackData) == 0, "%r" % callbackData
105 assert len(callbackData) == 0, "%r" % callbackData
107 book.update(force=True)
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"]
116 contactDetails = list(book.get_contact_details(id))
117 print "%r" % contactDetails
118 assert len(contactDetails) == 3
119 assert contactDetails[0][0] == "Type A"
120 assert contactDetails[0][1] == "123"
121 assert contactDetails[1][0] == "Type B"
122 assert contactDetails[1][1] == "456"
123 assert contactDetails[2][0] == "Type C"
124 assert contactDetails[2][1] == "789"
127 def test_adding_a_contact():
129 callback = generate_update_callback(callbackData)
131 backend = MockBackend([
137 book = gvoice.addressbook.Addressbook(backend)
138 book.updateSignalHandler.register_sink(callback)
139 assert len(callbackData) == 0, "%r" % callbackData
142 assert len(callbackData) == 0, "%r" % callbackData
144 book.update(force=True)
145 assert len(callbackData) == 0, "%r" % callbackData
147 backend.contactsData.append({
153 assert len(callbackData) == 0, "%r" % callbackData
155 book.update(force=True)
156 assert len(callbackData) == 1, "%r" % callbackData
158 callbackBook, addedContacts, removedContacts, changedContacts = callbackData[0]
159 assert callbackBook is book
160 assert len(addedContacts) == 1
161 assert 1 in addedContacts
162 assert len(removedContacts) == 0
163 assert len(changedContacts) == 0
166 def test_removing_a_contact():
168 callback = generate_update_callback(callbackData)
170 backend = MockBackend([
176 book = gvoice.addressbook.Addressbook(backend)
177 book.updateSignalHandler.register_sink(callback)
178 assert len(callbackData) == 0, "%r" % callbackData
181 assert len(callbackData) == 0, "%r" % callbackData
183 book.update(force=True)
184 assert len(callbackData) == 0, "%r" % callbackData
186 del backend.contactsData[:]
189 assert len(callbackData) == 0, "%r" % callbackData
191 book.update(force=True)
192 assert len(callbackData) == 1, "%r" % callbackData
194 callbackBook, addedContacts, removedContacts, changedContacts = callbackData[0]
195 assert callbackBook is book
196 assert len(addedContacts) == 0
197 assert len(removedContacts) == 1
198 assert 0 in removedContacts
199 assert len(changedContacts) == 0