source: ralphm-patches/roster_item.patch @ 36:f2953cadca90

Last change on this file since 36:f2953cadca90 was 36:f2953cadca90, checked in by Ralph Meijer <ralphm@…>, 11 years ago

Work on roster item representation.

File size: 6.0 KB
  • wokkel/test/test_xmppim.py

    diff -r c9d1bf0b783d wokkel/test/test_xmppim.py
    a b  
    449449
    450450
    451451
     452class RosterItemTest(unittest.TestCase):
     453    """
     454    Tests for L{xmppim.RosterItem}.
     455    """
     456
     457    def test_toElement(self):
     458        item = xmppim.RosterItem(JID('user@example.org'))
     459        element = item.toElement()
     460        self.assertEquals('item', element.name)
     461        self.assertEquals(NS_ROSTER, element.uri)
     462        self.assertTrue(element.hasAttribute('subscription'))
     463        self.assertFalse(element.hasAttribute('ask'))
     464        self.assertFalse(element.hasAttribute('name'))
     465        self.assertEquals(0, len(list(element.elements())))
     466
     467
     468    def test_toElementJID(self):
     469        item = xmppim.RosterItem(JID('user@example.org'))
     470        element = item.toElement()
     471        self.assertEquals(u'user@example.org', element.getAttribute('jid'))
     472
     473
     474    def test_toElementSubscriptionNone(self):
     475        item = xmppim.RosterItem(JID('user@example.org'),
     476                                 subscriptionTo=False,
     477                                 subscriptionFrom=False)
     478        element = item.toElement()
     479        self.assertEquals('none', element.getAttribute('subscription'))
     480
     481
     482    def test_toElementSubscriptionTo(self):
     483        item = xmppim.RosterItem(JID('user@example.org'),
     484                                 subscriptionTo=True,
     485                                 subscriptionFrom=False)
     486        element = item.toElement()
     487        self.assertEquals('to', element.getAttribute('subscription'))
     488
     489
     490    def test_toElementSubscriptionFrom(self):
     491        item = xmppim.RosterItem(JID('user@example.org'),
     492                                 subscriptionTo=False,
     493                                 subscriptionFrom=True)
     494        element = item.toElement()
     495        self.assertEquals('from', element.getAttribute('subscription'))
     496
     497
     498    def test_toElementSubscriptionBoth(self):
     499        item = xmppim.RosterItem(JID('user@example.org'),
     500                                 subscriptionTo=True,
     501                                 subscriptionFrom=True)
     502        element = item.toElement()
     503        self.assertEquals('both', element.getAttribute('subscription'))
     504
     505
     506    def test_toElementRemove(self):
     507        item = xmppim.RosterItem(JID('user@example.org'),
     508                                 remove=True)
     509        element = item.toElement()
     510        self.assertEquals('remove', element.getAttribute('subscription'))
     511
     512
     513    def test_toElementAsk(self):
     514        item = xmppim.RosterItem(JID('user@example.org'),
     515                                 ask=True)
     516        element = item.toElement()
     517        self.assertEquals('subscribe', element.getAttribute('ask'))
     518
     519
     520    def test_toElementName(self):
     521        item = xmppim.RosterItem(JID('user@example.org'),
     522                                 name='Joe User')
     523        element = item.toElement()
     524        self.assertEquals(u'Joe User', element.getAttribute('name'))
     525
     526
     527    def test_toElementGroups(self):
     528        groups = set(['Friends', 'Jabber'])
     529        item = xmppim.RosterItem(JID('user@example.org'),
     530                                 groups=groups)
     531
     532        element = item.toElement()
     533        foundGroups = set()
     534        for child in element.elements():
     535            if child.uri == NS_ROSTER and child.name == 'group':
     536                foundGroups.add(unicode(child))
     537
     538        self.assertEqual(groups, foundGroups)
     539
     540
     541
    452542class RosterClientProtocolTest(unittest.TestCase):
    453543    """
    454544    Tests for L{xmppim.RosterClientProtocol}.
  • wokkel/xmppim.py

    diff -r c9d1bf0b783d wokkel/xmppim.py
    a b  
    588588    @ivar subscriptionFrom: Contact's subscription state. If C{True}, the
    589589                            contact is subscribed to the presence information
    590590                            of the roster owner.
    591     @type subscriptionTo: C{bool}
     591    @type subscriptionFrom: C{bool}
    592592    @ivar ask: Whether subscription is pending.
    593593    @type ask: C{bool}
    594594    @ivar groups: Set of groups this contact is categorized in. Groups are
     
    596596    @type groups: C{set}
    597597    """
    598598
    599     def __init__(self, jid):
     599    subscriptionStates = {(False, False): 'none',
     600                          (True, False): 'to',
     601                          (False, True): 'from',
     602                          (True, True): 'both'}
     603
     604    def __init__(self, jid, subscriptionTo=False, subscriptionFrom=False,
     605                       ask=None, name=False, groups=None, remove=False):
    600606        self.jid = jid
    601         self.name = None
    602         self.subscriptionTo = False
    603         self.subscriptionFrom = False
    604         self.ask = None
    605         self.groups = set()
     607        self.subscriptionTo = subscriptionTo
     608        self.subscriptionFrom = subscriptionFrom
     609        self.ask = ask
     610        self.name = name
     611        self.groups = groups or set()
     612        self.remove = remove
     613
     614
     615    def toElement(self):
     616        element = domish.Element((NS_ROSTER, 'item'))
     617        element['jid'] = self.jid.full()
     618
     619        if self.remove:
     620            subscription = 'remove'
     621        else:
     622            subscription = self.subscriptionStates[self.subscriptionTo,
     623                                                   self.subscriptionFrom]
     624        element['subscription'] = subscription
     625
     626        if self.ask:
     627            element['ask'] = 'subscribe'
     628        if self.name:
     629            element['name'] = self.name
     630
     631        if self.groups:
     632            for group in self.groups:
     633                element.addElement('group', content=group)
     634
     635        return element
     636
    606637
    607638
    608639class RosterClientProtocol(XMPPHandler):
     
    662693        """
    663694        iq = IQ(self.xmlstream, 'set')
    664695        iq.addElement((NS_ROSTER, 'query'))
    665         item = iq.query.addElement('item')
    666         item['jid'] = entity.full()
    667         item['subscription'] = 'remove'
     696        item = RosterItem(entity, remove=True)
     697        iq.query.addChild(item.toElement())
    668698        return iq.send()
    669699
    670700
Note: See TracBrowser for help on using the repository browser.