66
66
SUPPORTED_ORDERS = set(
67
['date', 'author', 'subject', 'thread_newest', 'thread_oldest',
67
['date', 'author', 'subject', 'thread_oldest', 'thread_subject'])
71
70
class FakeGrackleRequestHandler(BaseHTTPRequestHandler):
83
82
scheme, netloc, path, params, query_string, fragments = (
84
83
urlparse(self.path))
85
parts = path.split('/')
86
if parts[1] == 'archive':
87
self.get_messages(parts[2], query_string)
89
def get_messages(self, archive_id, query_string):
84
archive = os.path.split(path)[1]
90
85
query = parse_qs(query_string)
91
86
parameters = simplejson.loads(query['parameters'][0])
92
87
order = parameters.get('order')
93
messages = self.server.messages[archive_id]
88
messages = self.server.messages[archive]
94
89
if order is not None :
95
90
if order not in SUPPORTED_ORDERS:
96
91
self.send_response(httplib.BAD_REQUEST)
103
98
threaded.sort(key=lambda t: t[0]['subject'])
104
99
if order == 'thread_oldest':
105
100
threaded.sort(key=lambda t: min(m['date'] for m in t))
106
if order == 'thread_newest':
107
threaded.sort(key=lambda t: max(m['date'] for m in t))
108
101
for thread in threaded:
109
102
messages.extend(thread)
250
243
response = client.get_messages('baz', order='thread_oldest')
251
244
self.assertIDOrder(['bar', 'qux', 'foo'], response['messages'])
253
def test_get_messages_thread_newest_order(self):
254
client = GrackleClient('localhost', 8439)
255
with fake_grackle_service(client, {'baz': [
256
{'message_id': 'bar', 'date': 'x'},
257
{'message_id': 'qux', 'date': 'w'},
258
{'message_id': 'foo', 'date': 'y', 'in_reply_to': 'bar'},
259
{'message_id': 'baz', 'date': 'z', 'in_reply_to': 'qux'},
261
response = client.get_messages('baz', order='date')
263
['qux', 'bar', 'foo', 'baz'], response['messages'])
264
response = client.get_messages('baz', order='thread_newest')
266
['bar', 'foo', 'qux', 'baz'], response['messages'])
268
246
def test_get_messages_unsupported_order(self):
269
247
client = GrackleClient('localhost', 8439)
270
248
with fake_grackle_service(client,