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