Changeset 60:a763a1289af8 in ralphm-patches
- Timestamp:
- Apr 30, 2012, 9:12:33 AM (10 years ago)
- Branch:
- default
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
roster_item.patch
r59 r60 35 35 NS_XML = 'http://www.w3.org/XML/1998/namespace' 36 36 NS_ROSTER = 'jabber:iq:roster' 37 @@ -449, 23 +450,373@@37 @@ -449,40 +450,621 @@ 38 38 39 39 … … 48 48 + item = xmppim.RosterItem(JID('user@example.org')) 49 49 + element = item.toElement() 50 + self.assertEqual s('item', element.name)51 + self.assertEqual s(NS_ROSTER, element.uri)50 + self.assertEqual('item', element.name) 51 + self.assertEqual(NS_ROSTER, element.uri) 52 52 + self.assertFalse(element.hasAttribute('subscription')) 53 53 + self.assertFalse(element.hasAttribute('ask')) … … 60 60 + item = xmppim.RosterItem(JID('user@example.org')) 61 61 + element = item.toElement() 62 + self.assertEqual s(u'user@example.org', element.getAttribute('jid'))62 + self.assertEqual(u'user@example.org', element.getAttribute('jid')) 63 63 + 64 64 + … … 76 76 + subscriptionFrom=False) 77 77 + element = item.toElement() 78 + self.assertEqual s('to', element.getAttribute('subscription'))78 + self.assertEqual('to', element.getAttribute('subscription')) 79 79 + 80 80 + … … 84 84 + subscriptionFrom=True) 85 85 + element = item.toElement() 86 + self.assertEqual s('from', element.getAttribute('subscription'))86 + self.assertEqual('from', element.getAttribute('subscription')) 87 87 + 88 88 + … … 92 92 + subscriptionFrom=True) 93 93 + element = item.toElement() 94 + self.assertEqual s('both', element.getAttribute('subscription'))94 + self.assertEqual('both', element.getAttribute('subscription')) 95 95 + 96 96 + … … 99 99 + item.remove = True 100 100 + element = item.toElement() 101 + self.assertEqual s('remove', element.getAttribute('subscription'))101 + self.assertEqual('remove', element.getAttribute('subscription')) 102 102 + 103 103 + … … 106 106 + item.pendingOut = True 107 107 + element = item.toElement() 108 + self.assertEqual s('subscribe', element.getAttribute('ask'))108 + self.assertEqual('subscribe', element.getAttribute('ask')) 109 109 + 110 110 + … … 113 113 + name='Joe User') 114 114 + element = item.toElement() 115 + self.assertEqual s(u'Joe User', element.getAttribute('name'))115 + self.assertEqual(u'Joe User', element.getAttribute('name')) 116 116 + 117 117 + … … 137 137 + item.approved = True 138 138 + element = item.toElement() 139 + self.assertEqual s(u'true', element.getAttribute('approved'))139 + self.assertEqual(u'true', element.getAttribute('approved')) 140 140 + 141 141 + … … 157 157 + self.assertFalse(item.pendingOut) 158 158 + self.assertFalse(item.approved) 159 + self.assertEqual s(set(), item.groups)159 + self.assertEqual(set(), item.groups) 160 160 + 161 161 + … … 345 345 + setattr, item, 'jid', 346 346 + JID('other@example.org')) 347 + self.assertEqual s(JID('other@example.org'), item.entity)347 + self.assertEqual(JID('other@example.org'), item.entity) 348 348 + 349 349 + … … 381 381 + Tests for L{xmppim.RosterRequest}. 382 382 + """ 383 + 384 + def test_fromElement(self): 385 + """ 386 + A bare roster request is parsed and missing information is None. 387 + """ 388 + xml = """ 389 + <iq type='get' to='this@example.org/Home' from='this@example.org'> 390 + <query xmlns='jabber:iq:roster'/> 391 + </iq> 392 + """ 393 + 394 + request = xmppim.RosterRequest.fromElement(parseXml(xml)) 395 + self.assertEqual('get', request.stanzaType) 396 + self.assertEqual(JID('this@example.org/Home'), request.recipient) 397 + self.assertEqual(JID('this@example.org'), request.sender) 398 + self.assertEqual(None, request.item) 399 + self.assertEqual(None, request.version) 400 + 401 + 402 + def test_fromElementItem(self): 403 + """ 404 + If an item is present, parse it and put it in the request item. 405 + """ 406 + xml = """ 407 + <iq type='set' to='this@example.org/Home' from='this@example.org'> 408 + <query xmlns='jabber:iq:roster'> 409 + <item jid='user@example.org'/> 410 + </query> 411 + </iq> 412 + """ 413 + 414 + request = xmppim.RosterRequest.fromElement(parseXml(xml)) 415 + self.assertNotIdentical(None, request.item) 416 + self.assertEqual(JID('user@example.org'), request.item.entity) 417 + 418 + 419 + def test_fromElementVersion(self): 420 + """ 421 + If a ver attribute is present, put it in the request version. 422 + """ 423 + xml = """ 424 + <iq type='set' to='this@example.org/Home' from='this@example.org'> 425 + <query xmlns='jabber:iq:roster' ver='ver72'> 426 + <item jid='user@example.org'/> 427 + </query> 428 + </iq> 429 + """ 430 + request = xmppim.RosterRequest.fromElement(parseXml(xml)) 431 + self.assertEqual('ver72', request.version) 432 + 433 + 434 + def test_fromElementVersionEmpty(self): 435 + """ 436 + The ver attribute may be empty. 437 + """ 438 + xml = """ 439 + <iq type='get' to='this@example.org/Home' from='this@example.org'> 440 + <query xmlns='jabber:iq:roster' ver=''/> 441 + </iq> 442 + """ 443 + request = xmppim.RosterRequest.fromElement(parseXml(xml)) 444 + self.assertEqual('', request.version) 445 + 446 + 447 + def test_toElement(self): 448 + """ 449 + A roster request has a query element in the roster namespace. 450 + """ 451 + request = xmppim.RosterRequest() 452 + element = request.toElement() 453 + children = element.elements() 454 + child = children.next() 455 + self.assertEqual(NS_ROSTER, child.uri) 456 + self.assertEqual('query', child.name) 457 + 458 + 459 + def test_toElementItem(self): 460 + """ 461 + If an item is set, it is rendered as a child of the query. 462 + """ 463 + request = xmppim.RosterRequest() 464 + request.item = xmppim.RosterItem(JID('user@example.org')) 465 + element = request.toElement() 466 + children = element.query.elements() 467 + child = children.next() 468 + self.assertEqual(NS_ROSTER, child.uri) 469 + self.assertEqual('item', child.name) 470 + 471 + 472 + def test_toElementVersion(self): 473 + """ 474 + If the roster version is set, a 'ver' attribute is added. 475 + """ 476 + request = xmppim.RosterRequest() 477 + request.version = 'ver72' 478 + element = request.toElement() 479 + self.assertEqual('ver72', element.query.getAttribute('ver')) 480 + 481 + 482 + def test_toElementVersionEmpty(self): 483 + """ 484 + If the roster version is the empty string, it should add 'ver', too. 485 + """ 486 + request = xmppim.RosterRequest() 487 + request.version = '' 488 + element = request.toElement() 489 + self.assertEqual('', element.query.getAttribute('ver')) 490 + 383 491 + 384 492 + … … 400 508 + 401 509 + def request(self, request): 510 + """ 511 + Stub for the request method on XMPPHandler. 512 + """ 402 513 + element = request.toElement() 403 514 + self.stub.xmlstream.send(element) … … 414 525 # Inspect outgoing iq request 415 526 416 @@ -479,10 +830,128 @@ 417 self.assertEquals(1, len(children)) 527 iq = self.stub.output[-1] 528 - self.assertEquals('set', iq.getAttribute('type')) 529 + self.assertEqual('set', iq.getAttribute('type')) 530 self.assertNotIdentical(None, iq.query) 531 - self.assertEquals(NS_ROSTER, iq.query.uri) 532 + self.assertEqual(NS_ROSTER, iq.query.uri) 533 534 children = list(domish.generateElementsQNamed(iq.query.children, 535 'item', NS_ROSTER)) 536 - self.assertEquals(1, len(children)) 537 + self.assertEqual(1, len(children)) 418 538 child = children[0] 419 539 - self.assertEquals('test@example.org', child['jid']) 420 540 - self.assertEquals('remove', child['subscription']) 421 + self.assertEquals('remove', child.getAttribute('subscription')) 541 + self.assertEqual('test@example.org', child['jid']) 542 + self.assertEqual('remove', child.getAttribute('subscription')) 422 543 423 544 # Fake successful response … … 430 551 + 431 552 + def test_getRoster(self): 553 + """ 554 + A request for the roster is sent out and the response is parsed. 555 + """ 432 556 + def cb(roster): 433 557 + self.assertIn(JID('user@example.org'), roster) 434 558 + 435 +436 559 + d = self.service.getRoster() 437 560 + d.addCallback(cb) … … 440 563 + 441 564 + iq = self.stub.output[-1] 442 + self.assertEqual s('get', iq.getAttribute('type'))565 + self.assertEqual('get', iq.getAttribute('type')) 443 566 + self.assertNotIdentical(None, iq.query) 444 + self.assertEqual s(NS_ROSTER, iq.query.uri)567 + self.assertEqual(NS_ROSTER, iq.query.uri) 445 568 + 446 569 + # Fake successful response … … 472 595 + 473 596 + def cb(result): 474 + self.assertEqual s(1, len(items))475 + self.assertEqual s(JID('user@example.org'), items[0].entity)597 + self.assertEqual(1, len(items)) 598 + self.assertEqual(JID('user@example.org'), items[0].entity) 476 599 + 477 600 + self.service.onRosterSet = onRosterSet … … 505 628 + 506 629 + def cb(result): 507 + self.assertEqual s([JID('user@example.org')], entities)630 + self.assertEqual([JID('user@example.org')], entities) 508 631 + 509 632 + self.service.onRosterRemove = onRosterRemove … … 537 660 + 538 661 + def cb(result): 539 + self.assertEqual s(1, len(requests), "push was not called")540 + self.assertEqual s(JID('user@example.org'), requests[0].item.entity)662 + self.assertEqual(1, len(requests), "push was not called") 663 + self.assertEqual(JID('user@example.org'), requests[0].item.entity) 541 664 + 542 665 + self.service.push = push … … 591 714 @type name: C{unicode} 592 715 @ivar subscriptionTo: Subscription state to contact's presence. If C{True}, 593 @@ -616,45 +621,17 2@@716 @@ -616,45 +621,174 @@ 594 717 @ivar subscriptionFrom: Contact's subscription state. If C{True}, the 595 718 contact is subscribed to the presence information … … 754 877 + def toElement(self): 755 878 + element = Request.toElement(self) 756 + element.addElement((NS_ROSTER, 'query')) 879 + query = element.addElement((NS_ROSTER, 'query')) 880 + if self.version is not None: 881 + query['ver'] = self.version 757 882 + if self.item: 758 + element.query.addChild(self.item.toElement())883 + query.addChild(self.item.toElement()) 759 884 + return element 760 885 + … … 790 915 def getRoster(self): 791 916 """ 792 @@ -668,14 +80 0,13 @@917 @@ -668,14 +802,13 @@ 793 918 roster = {} 794 919 for element in domish.generateElementsQNamed(result.query.children, … … 809 934 return d 810 935 811 @@ -688,44 +8 19,50 @@936 @@ -688,44 +821,50 @@ 812 937 @type entity: L{JID<twisted.words.protocols.jabber.jid.JID>} 813 938 @rtype: L{twisted.internet.defer.Deferred}
Note: See TracChangeset
for help on using the changeset viewer.