Mercurial > sat_tmp
comparison wokkel/test/test_rsm.py @ 10:2cd4f0ab9ad1
add tests for sat.tmp.wokkel
author | souliane <souliane@mailoo.org> |
---|---|
date | Tue, 14 Jul 2015 15:22:02 +0200 |
parents | |
children | e79eedd9c56a |
comparison
equal
deleted
inserted
replaced
9:9a4c367b22bb | 10:2cd4f0ab9ad1 |
---|---|
1 # Copyright (c) Adrien Cossa. | |
2 # See LICENSE for details. | |
3 | |
4 """ | |
5 Tests for L{wokkel.rsm}. | |
6 """ | |
7 | |
8 from zope.interface import verify | |
9 | |
10 from twisted.trial import unittest | |
11 from twisted.words.xish import domish | |
12 from twisted.words.protocols.jabber.jid import JID | |
13 from twisted.words.protocols.jabber.xmlstream import toResponse | |
14 from twisted.internet import defer | |
15 | |
16 from wokkel.generic import parseXml | |
17 from wokkel import iwokkel | |
18 from wokkel.test.helpers import XmlStreamStub, TestableRequestHandlerMixin | |
19 | |
20 from sat.tmp.wokkel import pubsub | |
21 from sat.tmp.wokkel.rsm import NS_RSM, RSMRequest, RSMResponse, PubSubClient, PubSubService | |
22 | |
23 import uuid | |
24 | |
25 | |
26 class RSMRequestTest(unittest.TestCase): | |
27 """ | |
28 Tests for L{rsm.RSMRequest}. | |
29 """ | |
30 | |
31 def test___init__(self): | |
32 """ | |
33 Fail to initialize a RSMRequest with wrong attribute values. | |
34 """ | |
35 self.assertRaises(AssertionError, RSMRequest, index=371, after=u'test') | |
36 self.assertRaises(AssertionError, RSMRequest, index=371, before=u'test') | |
37 self.assertRaises(AssertionError, RSMRequest, before=117) | |
38 self.assertRaises(AssertionError, RSMRequest, after=312) | |
39 self.assertRaises(AssertionError, RSMRequest, after=u'117', before=u'312') | |
40 | |
41 def test_parse(self): | |
42 """ | |
43 Parse a request element asking for the first page. | |
44 """ | |
45 xml = """ | |
46 <query xmlns='jabber:iq:search'> | |
47 <nick>Pete</nick> | |
48 <set xmlns='http://jabber.org/protocol/rsm'> | |
49 <max>1</max> | |
50 </set> | |
51 </query> | |
52 """ | |
53 request = RSMRequest.parse(parseXml(xml)) | |
54 self.assertEqual(1, request.max) | |
55 self.assertIdentical(None, request.index) | |
56 self.assertIdentical(None, request.after) | |
57 self.assertIdentical(None, request.before) | |
58 | |
59 def test_parseSecondPage(self): | |
60 """ | |
61 Parse a request element asking for a next page. | |
62 """ | |
63 xml = """ | |
64 <query xmlns='jabber:iq:search'> | |
65 <nick>Pete</nick> | |
66 <set xmlns='http://jabber.org/protocol/rsm'> | |
67 <max>3</max> | |
68 <after>peterpan@neverland.lit</after> | |
69 </set> | |
70 </query> | |
71 """ | |
72 request = RSMRequest.parse(parseXml(xml)) | |
73 self.assertEqual(3, request.max) | |
74 self.assertIdentical(None, request.index) | |
75 self.assertEqual(u'peterpan@neverland.lit', request.after) | |
76 self.assertIdentical(None, request.before) | |
77 | |
78 def test_parsePreviousPage(self): | |
79 """ | |
80 Parse a request element asking for a previous page. | |
81 """ | |
82 xml = """ | |
83 <query xmlns='jabber:iq:search'> | |
84 <nick>Pete</nick> | |
85 <set xmlns='http://jabber.org/protocol/rsm'> | |
86 <max>5</max> | |
87 <before>peterpan@pixyland.org</before> | |
88 </set> | |
89 </query> | |
90 """ | |
91 request = RSMRequest.parse(parseXml(xml)) | |
92 self.assertEqual(5, request.max) | |
93 self.assertIdentical(None, request.index) | |
94 self.assertIdentical(None, request.after) | |
95 self.assertEqual(u'peterpan@pixyland.org', request.before) | |
96 | |
97 def test_parseLastPage(self): | |
98 """ | |
99 Parse a request element asking for the last page. | |
100 """ | |
101 xml = """ | |
102 <query xmlns='jabber:iq:search'> | |
103 <nick>Pete</nick> | |
104 <set xmlns='http://jabber.org/protocol/rsm'> | |
105 <max>7</max> | |
106 <before/> | |
107 </set> | |
108 </query> | |
109 """ | |
110 request = RSMRequest.parse(parseXml(xml)) | |
111 self.assertEqual(7, request.max) | |
112 self.assertIdentical(None, request.index) | |
113 self.assertIdentical(None, request.after) | |
114 self.assertEqual('', request.before) | |
115 | |
116 def test_parseOutOfOrderPage(self): | |
117 """ | |
118 Parse a request element asking for a page out of order. | |
119 """ | |
120 xml = """ | |
121 <query xmlns='jabber:iq:search'> | |
122 <nick>Pete</nick> | |
123 <set xmlns='http://jabber.org/protocol/rsm'> | |
124 <max>9</max> | |
125 <index>371</index> | |
126 </set> | |
127 </query> | |
128 """ | |
129 request = RSMRequest.parse(parseXml(xml)) | |
130 self.assertEqual(9, request.max) | |
131 self.assertEqual(371, request.index) | |
132 self.assertIdentical(None, request.after) | |
133 self.assertIdentical(None, request.before) | |
134 | |
135 def test_parseItemCount(self): | |
136 """ | |
137 Parse a request element asking for the items count. | |
138 """ | |
139 xml = """ | |
140 <query xmlns='jabber:iq:search'> | |
141 <nick>Pete</nick> | |
142 <set xmlns='http://jabber.org/protocol/rsm'> | |
143 <max>0</max> | |
144 </set> | |
145 </query> | |
146 """ | |
147 request = RSMRequest.parse(parseXml(xml)) | |
148 self.assertEqual(0, request.max) | |
149 self.assertIdentical(None, request.index) | |
150 self.assertIdentical(None, request.after) | |
151 self.assertIdentical(None, request.before) | |
152 | |
153 def test_render(self): | |
154 """ | |
155 Embed a page request in the element. | |
156 """ | |
157 element = domish.Element(('jabber:iq:search', 'query')) | |
158 element.addElement('items')['max_items'] = u'10' | |
159 RSMRequest(1).render(element) | |
160 | |
161 self.assertEqual(u'10', element.items['max_items']) # not changed | |
162 | |
163 self.assertEqual(NS_RSM, element.set.uri) | |
164 self.assertEqual(u'1', ''.join(element.set.max.children)) | |
165 self.assertIdentical(None, element.set.after) | |
166 self.assertIdentical(None, element.set.before) | |
167 self.assertIdentical(None, element.set.index) | |
168 | |
169 def test_renderPubSub(self): | |
170 """ | |
171 Embed a page request in the pubsub element. | |
172 """ | |
173 element = domish.Element((pubsub.NS_PUBSUB, 'pubsub')) | |
174 element.addElement('items')['max_items'] = u'10' | |
175 RSMRequest(3).render(element) | |
176 | |
177 self.assertEqual(u'3', element.items['max_items']) # changed | |
178 | |
179 self.assertEqual(NS_RSM, element.set.uri) | |
180 self.assertEqual(u'3', ''.join(element.set.max.children)) | |
181 self.assertIdentical(None, element.set.after) | |
182 self.assertIdentical(None, element.set.before) | |
183 self.assertIdentical(None, element.set.index) | |
184 | |
185 def test_renderItems(self): | |
186 """ | |
187 Embed a page request in the element, specify items. | |
188 """ | |
189 element = domish.Element(('jabber:iq:search', 'query')) | |
190 RSMRequest(5, 127).render(element) | |
191 self.assertEqual(NS_RSM, element.set.uri) | |
192 self.assertEqual(u'5', ''.join(element.set.max.children)) | |
193 self.assertIdentical(None, element.set.after) | |
194 self.assertIdentical(None, element.set.before) | |
195 self.assertEqual(u'127', ''.join(element.set.index.children)) | |
196 | |
197 def test_renderAfter(self): | |
198 """ | |
199 Embed a page request in the element, specify after. | |
200 """ | |
201 element = domish.Element(('jabber:iq:search', 'query')) | |
202 RSMRequest(5, after=u'test').render(element) | |
203 self.assertEqual(NS_RSM, element.set.uri) | |
204 self.assertEqual(u'5', ''.join(element.set.max.children)) | |
205 self.assertEqual(u'test', ''.join(element.set.after.children)) | |
206 self.assertIdentical(None, element.set.before) | |
207 self.assertIdentical(None, element.set.index) | |
208 | |
209 def test_renderBefore(self): | |
210 """ | |
211 Embed a page request in the element, specify before. | |
212 """ | |
213 element = domish.Element(('jabber:iq:search', 'query')) | |
214 RSMRequest(5, before=u'test').render(element) | |
215 self.assertEqual(NS_RSM, element.set.uri) | |
216 self.assertEqual(u'5', ''.join(element.set.max.children)) | |
217 self.assertIdentical(None, element.set.after) | |
218 self.assertEqual(u'test', ''.join(element.set.before.children)) | |
219 self.assertIdentical(None, element.set.index) | |
220 | |
221 | |
222 class RSMResponseTest(unittest.TestCase): | |
223 """ | |
224 Tests for L{rsm.RSMResponse}. | |
225 """ | |
226 | |
227 def test___init__(self): | |
228 """ | |
229 Fail to initialize a RSMResponse with wrong attribute values. | |
230 """ | |
231 self.assertRaises(AssertionError, RSMResponse, count=u'1') | |
232 self.assertRaises(AssertionError, RSMResponse, index=127, first=u'127') | |
233 self.assertRaises(AssertionError, RSMResponse, index=127, last=u'351') | |
234 self.assertRaises(AssertionError, RSMResponse, first=u'127', last=u'351') | |
235 self.assertRaises(AssertionError, RSMResponse, index=u'127', | |
236 first=u'127', last=u'351') | |
237 self.assertRaises(AssertionError, RSMResponse, index=127, | |
238 first=127, last=u'351') | |
239 self.assertRaises(AssertionError, RSMResponse, index=127, | |
240 first=u'127', last=351) | |
241 | |
242 def test_parse(self): | |
243 """ | |
244 Parse a response element returning a page. | |
245 """ | |
246 xml = """ | |
247 <query xmlns='jabber:iq:search'> | |
248 <set xmlns='http://jabber.org/protocol/rsm'> | |
249 <first index='20'>stpeter@jabber.org</first> | |
250 <last>peterpan@neverland.lit</last> | |
251 <count>800</count> | |
252 </set> | |
253 </query> | |
254 """ | |
255 response = RSMResponse.parse(parseXml(xml)) | |
256 self.assertEqual(800, response.count) | |
257 self.assertEqual(20, response.index) | |
258 self.assertEqual(u'stpeter@jabber.org', response.first) | |
259 self.assertEqual(u'peterpan@neverland.lit', response.last) | |
260 | |
261 def test_parseEmptySet(self): | |
262 """ | |
263 Parse a response element returning an empty set. | |
264 """ | |
265 xml = """ | |
266 <query xmlns='jabber:iq:search'> | |
267 <set xmlns='http://jabber.org/protocol/rsm'> | |
268 <count>800</count> | |
269 </set> | |
270 </query> | |
271 """ | |
272 response = RSMResponse.parse(parseXml(xml)) | |
273 self.assertEqual(800, response.count) | |
274 self.assertIdentical(None, response.first) | |
275 self.assertIdentical(None, response.last) | |
276 self.assertIdentical(None, response.index) | |
277 | |
278 def test_render(self): | |
279 """ | |
280 Embed a page response in the element. | |
281 """ | |
282 element = domish.Element(('jabber:iq:search', 'query')) | |
283 RSMResponse(800, 20, u'stpeter@jabber.org', | |
284 u'peterpan@neverland.lit').render(element) | |
285 | |
286 self.assertEqual(NS_RSM, element.set.uri) | |
287 self.assertEqual(u'800', ''.join(element.set.count.children)) | |
288 self.assertEqual(u'stpeter@jabber.org', | |
289 ''.join(element.set.first.children)) | |
290 self.assertEqual(u'peterpan@neverland.lit', | |
291 ''.join(element.set.last.children)) | |
292 self.assertEqual(u'20', element.set.first['index']) | |
293 | |
294 def test_renderEmptySet(self): | |
295 """ | |
296 Embed a page response in the element, for empty set. | |
297 """ | |
298 element = domish.Element(('jabber:iq:search', 'query')) | |
299 RSMResponse(800).render(element) | |
300 | |
301 self.assertEqual(NS_RSM, element.set.uri) | |
302 self.assertEqual(u'800', ''.join(element.set.count.children)) | |
303 self.assertIdentical(None, element.set.first) | |
304 self.assertIdentical(None, element.set.last) | |
305 | |
306 | |
307 class PubSubClientTest(unittest.TestCase): | |
308 """ | |
309 Tests for L{rsm.PubSubClient}. | |
310 """ | |
311 timeout = 2 | |
312 | |
313 def setUp(self): | |
314 self.stub = XmlStreamStub() | |
315 self.protocol = PubSubClient() | |
316 self.protocol.xmlstream = self.stub.xmlstream | |
317 self.protocol.connectionInitialized() | |
318 | |
319 def test_items(self): | |
320 """ | |
321 Test sending items request to get the first page. | |
322 """ | |
323 def cb(items): | |
324 self.assertEquals(2, len(items)) | |
325 self.assertEquals([item1, item2], items) | |
326 rsm = self.protocol.getRSMResponse(ext_data['id']) | |
327 self.assertDictEqual(rsm, {'count': '800', 'index': '0', | |
328 'first': 'item1', 'last': 'item2'}) | |
329 | |
330 ext_data = {'id': unicode(uuid.uuid4()), 'rsm': RSMRequest(2)} | |
331 d = self.protocol.items(JID('pubsub.example.org'), 'test', | |
332 ext_data=ext_data) | |
333 d.addCallback(cb) | |
334 | |
335 iq = self.stub.output[-1] | |
336 self.assertEquals('pubsub.example.org', iq.getAttribute('to')) | |
337 self.assertEquals('get', iq.getAttribute('type')) | |
338 self.assertEquals('pubsub', iq.pubsub.name) | |
339 self.assertEquals(pubsub.NS_PUBSUB, iq.pubsub.uri) | |
340 children = list(domish.generateElementsQNamed(iq.pubsub.children, | |
341 'items', pubsub.NS_PUBSUB)) | |
342 self.assertEquals(1, len(children)) | |
343 child = children[0] | |
344 self.assertEquals('test', child['node']) | |
345 | |
346 set_elts = list(domish.generateElementsQNamed(iq.pubsub.children, | |
347 'set', NS_RSM)) | |
348 self.assertEquals(1, len(set_elts)) | |
349 set_elt = set_elts[0] | |
350 self.assertEquals(u'2', ''.join(set_elt.max.children)) | |
351 | |
352 response = toResponse(iq, 'result') | |
353 items = response.addElement((pubsub.NS_PUBSUB, | |
354 'pubsub')).addElement('items') | |
355 items['node'] = 'test' | |
356 item1 = items.addElement('item') | |
357 item1['id'] = 'item1' | |
358 item2 = items.addElement('item') | |
359 item2['id'] = 'item2' | |
360 RSMResponse(800, 0, u'item1', u'item2').render(response.pubsub) | |
361 self.stub.send(response) | |
362 | |
363 return d | |
364 | |
365 def test_itemsAfter(self): | |
366 """ | |
367 Test sending items request to get the next page. | |
368 """ | |
369 def cb(items): | |
370 self.assertEquals(2, len(items)) | |
371 self.assertEquals([item1, item2], items) | |
372 rsm = self.protocol.getRSMResponse(ext_data['id']) | |
373 self.assertDictEqual(rsm, {'count': '800', 'index': '2', | |
374 'first': 'item3', 'last': 'item4'}) | |
375 | |
376 ext_data = {'id': unicode(uuid.uuid4()), | |
377 'rsm': RSMRequest(2, after=u'item2')} | |
378 d = self.protocol.items(JID('pubsub.example.org'), 'test', | |
379 ext_data=ext_data) | |
380 d.addCallback(cb) | |
381 | |
382 iq = self.stub.output[-1] | |
383 self.assertEquals('pubsub.example.org', iq.getAttribute('to')) | |
384 self.assertEquals('get', iq.getAttribute('type')) | |
385 self.assertEquals('pubsub', iq.pubsub.name) | |
386 self.assertEquals(pubsub.NS_PUBSUB, iq.pubsub.uri) | |
387 children = list(domish.generateElementsQNamed(iq.pubsub.children, | |
388 'items', pubsub.NS_PUBSUB)) | |
389 self.assertEquals(1, len(children)) | |
390 child = children[0] | |
391 self.assertEquals('test', child['node']) | |
392 | |
393 set_elts = list(domish.generateElementsQNamed(iq.pubsub.children, | |
394 'set', NS_RSM)) | |
395 self.assertEquals(1, len(set_elts)) | |
396 set_elt = set_elts[0] | |
397 self.assertEquals(u'2', ''.join(set_elt.max.children)) | |
398 self.assertEquals(u'item2', ''.join(set_elt.after.children)) | |
399 | |
400 response = toResponse(iq, 'result') | |
401 items = response.addElement((pubsub.NS_PUBSUB, | |
402 'pubsub')).addElement('items') | |
403 items['node'] = 'test' | |
404 item1 = items.addElement('item') | |
405 item1['id'] = 'item3' | |
406 item2 = items.addElement('item') | |
407 item2['id'] = 'item4' | |
408 RSMResponse(800, 2, u'item3', u'item4').render(response.pubsub) | |
409 self.stub.send(response) | |
410 | |
411 return d | |
412 | |
413 def test_itemsBefore(self): | |
414 """ | |
415 Test sending items request to get the previous page. | |
416 """ | |
417 def cb(items): | |
418 self.assertEquals(2, len(items)) | |
419 self.assertEquals([item1, item2], items) | |
420 rsm = self.protocol.getRSMResponse(ext_data['id']) | |
421 self.assertDictEqual(rsm, {'count': '800', 'index': '0', | |
422 'first': 'item1', 'last': 'item2'}) | |
423 | |
424 ext_data = {'id': unicode(uuid.uuid4()), | |
425 'rsm': RSMRequest(2, before=u'item3')} | |
426 d = self.protocol.items(JID('pubsub.example.org'), 'test', | |
427 ext_data=ext_data) | |
428 d.addCallback(cb) | |
429 | |
430 iq = self.stub.output[-1] | |
431 self.assertEquals('pubsub.example.org', iq.getAttribute('to')) | |
432 self.assertEquals('get', iq.getAttribute('type')) | |
433 self.assertEquals('pubsub', iq.pubsub.name) | |
434 self.assertEquals(pubsub.NS_PUBSUB, iq.pubsub.uri) | |
435 children = list(domish.generateElementsQNamed(iq.pubsub.children, | |
436 'items', pubsub.NS_PUBSUB)) | |
437 self.assertEquals(1, len(children)) | |
438 child = children[0] | |
439 self.assertEquals('test', child['node']) | |
440 | |
441 set_elts = list(domish.generateElementsQNamed(iq.pubsub.children, | |
442 'set', NS_RSM)) | |
443 self.assertEquals(1, len(set_elts)) | |
444 set_elt = set_elts[0] | |
445 self.assertEquals(u'2', ''.join(set_elt.max.children)) | |
446 self.assertEquals(u'item3', ''.join(set_elt.before.children)) | |
447 | |
448 response = toResponse(iq, 'result') | |
449 items = response.addElement((pubsub.NS_PUBSUB, | |
450 'pubsub')).addElement('items') | |
451 items['node'] = 'test' | |
452 item1 = items.addElement('item') | |
453 item1['id'] = 'item1' | |
454 item2 = items.addElement('item') | |
455 item2['id'] = 'item2' | |
456 RSMResponse(800, 0, u'item1', u'item2').render(response.pubsub) | |
457 self.stub.send(response) | |
458 | |
459 return d | |
460 | |
461 def test_itemsIndex(self): | |
462 """ | |
463 Test sending items request to get a page out of order. | |
464 """ | |
465 def cb(items): | |
466 self.assertEquals(3, len(items)) | |
467 self.assertEquals([item1, item2, item3], items) | |
468 rsm = self.protocol.getRSMResponse(ext_data['id']) | |
469 self.assertDictEqual(rsm, {'count': '800', 'index': '3', | |
470 'first': 'item4', 'last': 'item6'}) | |
471 | |
472 ext_data = {'id': unicode(uuid.uuid4()), 'rsm': RSMRequest(3, 3)} | |
473 d = self.protocol.items(JID('pubsub.example.org'), 'test', | |
474 ext_data=ext_data) | |
475 d.addCallback(cb) | |
476 | |
477 iq = self.stub.output[-1] | |
478 self.assertEquals('pubsub.example.org', iq.getAttribute('to')) | |
479 self.assertEquals('get', iq.getAttribute('type')) | |
480 self.assertEquals('pubsub', iq.pubsub.name) | |
481 self.assertEquals(pubsub.NS_PUBSUB, iq.pubsub.uri) | |
482 children = list(domish.generateElementsQNamed(iq.pubsub.children, | |
483 'items', pubsub.NS_PUBSUB)) | |
484 self.assertEquals(1, len(children)) | |
485 child = children[0] | |
486 self.assertEquals('test', child['node']) | |
487 | |
488 set_elts = list(domish.generateElementsQNamed(iq.pubsub.children, | |
489 'set', NS_RSM)) | |
490 self.assertEquals(1, len(set_elts)) | |
491 set_elt = set_elts[0] | |
492 self.assertEquals(u'3', ''.join(set_elt.max.children)) | |
493 self.assertEquals(u'3', ''.join(set_elt.index.children)) | |
494 | |
495 response = toResponse(iq, 'result') | |
496 items = response.addElement((pubsub.NS_PUBSUB, | |
497 'pubsub')).addElement('items') | |
498 items['node'] = 'test' | |
499 item1 = items.addElement('item') | |
500 item1['id'] = 'item4' | |
501 item2 = items.addElement('item') | |
502 item2['id'] = 'item5' | |
503 item3 = items.addElement('item') | |
504 item3['id'] = 'item6' | |
505 RSMResponse(800, 3, u'item4', u'item6').render(response.pubsub) | |
506 self.stub.send(response) | |
507 | |
508 return d | |
509 | |
510 def test_itemsCount(self): | |
511 """ | |
512 Test sending items request to count them. | |
513 """ | |
514 def cb(items): | |
515 self.assertEquals(0, len(items)) | |
516 rsm = self.protocol.getRSMResponse(ext_data['id']) | |
517 self.assertDictEqual(rsm, {'count': '800'}) | |
518 | |
519 ext_data = {'id': unicode(uuid.uuid4()), 'rsm': RSMRequest(0)} | |
520 d = self.protocol.items(JID('pubsub.example.org'), 'test', | |
521 ext_data=ext_data) | |
522 d.addCallback(cb) | |
523 | |
524 iq = self.stub.output[-1] | |
525 self.assertEquals('pubsub.example.org', iq.getAttribute('to')) | |
526 self.assertEquals('get', iq.getAttribute('type')) | |
527 self.assertEquals('pubsub', iq.pubsub.name) | |
528 self.assertEquals(pubsub.NS_PUBSUB, iq.pubsub.uri) | |
529 children = list(domish.generateElementsQNamed(iq.pubsub.children, | |
530 'items', pubsub.NS_PUBSUB)) | |
531 self.assertEquals(1, len(children)) | |
532 child = children[0] | |
533 self.assertEquals('test', child['node']) | |
534 | |
535 set_elts = list(domish.generateElementsQNamed(iq.pubsub.children, | |
536 'set', NS_RSM)) | |
537 self.assertEquals(1, len(set_elts)) | |
538 set_elt = set_elts[0] | |
539 self.assertEquals(u'0', ''.join(set_elt.max.children)) | |
540 | |
541 response = toResponse(iq, 'result') | |
542 response.addElement((pubsub.NS_PUBSUB, 'pubsub')) | |
543 RSMResponse(800).render(response.pubsub) | |
544 self.stub.send(response) | |
545 | |
546 return d | |
547 | |
548 | |
549 class PubSubServiceTest(unittest.TestCase, TestableRequestHandlerMixin): | |
550 | |
551 def setUp(self): | |
552 self.stub = XmlStreamStub() | |
553 self.resource = pubsub.PubSubResource() | |
554 self.service = PubSubService(self.resource) | |
555 self.service.send = self.stub.xmlstream.send | |
556 | |
557 def test_on_items(self): | |
558 """ | |
559 On a items request, return the first item for the given node. | |
560 """ | |
561 xml = """ | |
562 <iq type='get' to='pubsub.example.org' | |
563 from='user@example.org'> | |
564 <pubsub xmlns='http://jabber.org/protocol/pubsub'> | |
565 <items node='test'/> | |
566 </pubsub> | |
567 <set xmlns='http://jabber.org/protocol/rsm'> | |
568 <max>1</max> | |
569 </set> | |
570 </iq> | |
571 """ | |
572 | |
573 def items(request): | |
574 rsm = RSMResponse(800, 0, u'item', u'item').toElement() | |
575 return defer.succeed([pubsub.Item('current'), rsm]) | |
576 | |
577 def cb(element): | |
578 self.assertEqual(pubsub.NS_PUBSUB, element.uri) | |
579 self.assertEqual(pubsub.NS_PUBSUB, element.items.uri) | |
580 self.assertEqual(1, len(element.items.children)) | |
581 item = element.items.children[-1] | |
582 self.assertTrue(domish.IElement.providedBy(item)) | |
583 self.assertEqual('item', item.name) | |
584 self.assertEqual(pubsub.NS_PUBSUB, item.uri) | |
585 self.assertEqual('current', item['id']) | |
586 self.assertEqual(NS_RSM, element.set.uri) | |
587 self.assertEqual('800', ''.join(element.set.count.children)) | |
588 self.assertEqual('0', element.set.first['index']) | |
589 self.assertEqual('item', ''.join(element.set.first.children)) | |
590 self.assertEqual('item', ''.join(element.set.last.children)) | |
591 | |
592 self.resource.items = items | |
593 verify.verifyObject(iwokkel.IPubSubResource, self.resource) | |
594 d = self.handleRequest(xml) | |
595 d.addCallback(cb) | |
596 return d | |
597 | |
598 def test_on_itemsIndex(self): | |
599 """ | |
600 On a items request, return some items out of order for the given node. | |
601 """ | |
602 xml = """ | |
603 <iq type='get' to='pubsub.example.org' | |
604 from='user@example.org'> | |
605 <pubsub xmlns='http://jabber.org/protocol/pubsub'> | |
606 <items node='test'/> | |
607 </pubsub> | |
608 <set xmlns='http://jabber.org/protocol/rsm'> | |
609 <max>2</max> | |
610 <index>3</index> | |
611 </set> | |
612 </iq> | |
613 """ | |
614 | |
615 def items(request): | |
616 rsm = RSMResponse(800, 3, u'i1', u'i2').toElement() | |
617 return defer.succeed([pubsub.Item('i1'), pubsub.Item('i2'), rsm]) | |
618 | |
619 def cb(element): | |
620 self.assertEqual(pubsub.NS_PUBSUB, element.uri) | |
621 self.assertEqual(pubsub.NS_PUBSUB, element.items.uri) | |
622 self.assertEqual(2, len(element.items.children)) | |
623 item = element.items.children[0] | |
624 self.assertTrue(domish.IElement.providedBy(item)) | |
625 self.assertEqual('item', item.name) | |
626 self.assertEqual(pubsub.NS_PUBSUB, item.uri) | |
627 self.assertEqual('i1', item['id']) | |
628 item = element.items.children[1] | |
629 self.assertTrue(domish.IElement.providedBy(item)) | |
630 self.assertEqual('item', item.name) | |
631 self.assertEqual(pubsub.NS_PUBSUB, item.uri) | |
632 self.assertEqual('i2', item['id']) | |
633 self.assertEqual(NS_RSM, element.set.uri) | |
634 self.assertEqual('800', ''.join(element.set.count.children)) | |
635 self.assertEqual('3', element.set.first['index']) | |
636 self.assertEqual('i1', ''.join(element.set.first.children)) | |
637 self.assertEqual('i2', ''.join(element.set.last.children)) | |
638 | |
639 self.resource.items = items | |
640 verify.verifyObject(iwokkel.IPubSubResource, self.resource) | |
641 d = self.handleRequest(xml) | |
642 d.addCallback(cb) | |
643 return d | |
644 | |
645 def test_on_itemsCount(self): | |
646 """ | |
647 On a items request, return the items count. | |
648 """ | |
649 xml = """ | |
650 <iq type='get' to='pubsub.example.org' | |
651 from='user@example.org'> | |
652 <pubsub xmlns='http://jabber.org/protocol/pubsub'> | |
653 <items node='test'/> | |
654 </pubsub> | |
655 <set xmlns='http://jabber.org/protocol/rsm'> | |
656 <max>0</max> | |
657 </set> | |
658 </iq> | |
659 """ | |
660 | |
661 def items(request): | |
662 rsm = RSMResponse(800).toElement() | |
663 return defer.succeed([rsm]) | |
664 | |
665 def cb(element): | |
666 self.assertEqual(pubsub.NS_PUBSUB, element.uri) | |
667 self.assertEqual(pubsub.NS_PUBSUB, element.items.uri) | |
668 self.assertEqual(0, len(element.items.children)) | |
669 self.assertEqual(NS_RSM, element.set.uri) | |
670 self.assertEqual('800', ''.join(element.set.count.children)) | |
671 self.assertEqual(None, element.set.first) | |
672 self.assertEqual(None, element.set.last) | |
673 | |
674 self.resource.items = items | |
675 verify.verifyObject(iwokkel.IPubSubResource, self.resource) | |
676 d = self.handleRequest(xml) | |
677 d.addCallback(cb) | |
678 return d |