63
63
os.kill(self.pid, SIGKILL)
66
SUPPORTED_ORDERS = set(['date', 'author', 'subject', 'thread_subject'])
66
SUPPORTED_ORDERS = set(
67
['date', 'author', 'subject', 'thread_oldest', 'thread_subject'])
69
70
class FakeGrackleRequestHandler(BaseHTTPRequestHandler):
90
91
self.send_response(httplib.BAD_REQUEST)
91
92
self.wfile.write('Unsupported order')
93
elif order == 'thread_subject':
94
elif order.startswith('thread_'):
94
95
threaded = threaded_messages(messages)
96
threaded.sort(key=lambda t: t[0]['subject'])
97
if order == 'thread_subject':
98
threaded.sort(key=lambda t: t[0]['subject'])
99
if order == 'thread_oldest':
100
threaded.sort(key=lambda t: min(m['date'] for m in t))
97
101
for thread in threaded:
98
102
messages.extend(thread)
101
self.server.messages[archive], key=lambda m: m[order])
104
messages.sort(key=lambda m: m[order])
102
105
messages = [m for m in messages
103
106
if 'message_ids' not in parameters or
104
107
m['message_id'] in parameters['message_ids']]
226
229
response = client.get_messages('baz', order='thread_subject')
227
230
self.assertIDOrder(['bar', 'qux', 'foo'], response['messages'])
232
def test_get_messages_thread_oldest_order(self):
233
client = GrackleClient('localhost', 8439)
234
with fake_grackle_service(client, {'baz': [
235
{'message_id': 'bar', 'date': 'x'},
236
{'message_id': 'qux', 'date': 'z'},
237
{'message_id': 'foo', 'date': 'y', 'in_reply_to': 'qux'},
239
response = client.get_messages('baz')
240
self.assertIDOrder(['bar', 'qux', 'foo'], response['messages'])
241
response = client.get_messages('baz', order='date')
242
self.assertIDOrder(['bar', 'foo', 'qux'], response['messages'])
243
response = client.get_messages('baz', order='thread_oldest')
244
self.assertIDOrder(['bar', 'qux', 'foo'], response['messages'])
229
246
def test_get_messages_unsupported_order(self):
230
247
client = GrackleClient('localhost', 8439)
231
248
with fake_grackle_service(client,