Ignore:
Timestamp:
Aug 15, 2011, 9:35:16 AM (9 years ago)
Author:
Ralph Meijer <ralphm@…>
Branch:
wokkel-muc-client-support-24
Message:

Redo admin requests using generic.Request.

This changes all role and affiliation management functionality to use a
subclass of generic.Request.

The methods for retrieving affiliation or role lists now return lists of
AdminItems, instead of modifying a Room instance and returning that. This
is because affiliation changes can also be done when not in the room.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • wokkel/test/test_muc.py

    r148 r150  
    378378            self.assertTrue(banned, 'Did not ban user')
    379379
    380         d = self.protocol.ban(self.occupantJID, banned, reason='Spam',
     380        d = self.protocol.ban(self.roomJID, banned, reason='Spam',
    381381                              sender=self.userJID)
    382382        d.addCallback(cb)
     
    405405            self.assertTrue(kicked, 'Did not kick user')
    406406
    407         d = self.protocol.kick(self.occupantJID, nick, reason='Spam',
     407        d = self.protocol.kick(self.roomJID, nick, reason='Spam',
    408408                               sender=self.userJID)
    409409        d.addCallback(cb)
     
    413413        self.assertTrue(xpath.matches(
    414414                u"/iq[@type='set' and @to='%s']/query/item"
    415                     "[@affiliation='none']" % (self.roomJID,),
     415                    "[@role='none']" % (self.roomJID,),
    416416                iq),
    417417            'Wrong kick stanza')
     
    800800
    801801
     802    def test_modifyAffiliationList(self):
     803
     804        entities = [JID('user1@test.example.org'),
     805                    JID('user2@test.example.org')]
     806        d = self.protocol.modifyAffiliationList(self.roomJID, entities,
     807                                                'admin')
     808
     809        iq = self.stub.output[-1]
     810        query = "/iq/query[@xmlns='%s']/item[@xmlns='%s']" % (muc.NS_MUC_ADMIN,
     811                                                              muc.NS_MUC_ADMIN)
     812        items = xpath.queryForNodes(query, iq)
     813        self.assertNotIdentical(None, items)
     814        self.assertEquals(entities[0], JID(items[0].getAttribute('jid')))
     815        self.assertEquals('admin', items[0].getAttribute('affiliation'))
     816        self.assertEquals(entities[1], JID(items[1].getAttribute('jid')))
     817        self.assertEquals('admin', items[1].getAttribute('affiliation'))
     818
     819        # Send a response to have the deferred fire.
     820        response = toResponse(iq, 'result')
     821        self.stub.send(response)
     822        return d
     823
     824
    802825    def test_grantVoice(self):
    803826        """
    804         Test granting voice to a user.
    805 
     827        Granting voice sends request to set role to 'participant'.
    806828        """
    807829        nick = 'TroubleMaker'
     
    809831            self.assertTrue(give_voice, 'Did not give voice user')
    810832
    811         d = self.protocol.grantVoice(self.occupantJID, nick,
     833        d = self.protocol.grantVoice(self.roomJID, nick,
    812834                                     sender=self.userJID)
    813835        d.addCallback(cb)
     
    817839        query = (u"/iq[@type='set' and @to='%s']/query/item"
    818840                     "[@role='participant']") % self.roomJID
     841        self.assertTrue(xpath.matches(query, iq), 'Wrong voice stanza')
     842
     843        response = toResponse(iq, 'result')
     844        self.stub.send(response)
     845        return d
     846
     847
     848    def test_revokeVoice(self):
     849        """
     850        Revoking voice sends request to set role to 'visitor'.
     851        """
     852        nick = 'TroubleMaker'
     853
     854        d = self.protocol.revokeVoice(self.roomJID, nick,
     855                                      reason="Trouble maker",
     856                                      sender=self.userJID)
     857
     858        iq = self.stub.output[-1]
     859
     860        query = (u"/iq[@type='set' and @to='%s']/query/item"
     861                     "[@role='visitor']") % self.roomJID
     862        self.assertTrue(xpath.matches(query, iq), 'Wrong voice stanza')
     863
     864        response = toResponse(iq, 'result')
     865        self.stub.send(response)
     866        return d
     867
     868
     869    def test_grantModerator(self):
     870        """
     871        Granting moderator privileges sends request to set role to 'moderator'.
     872        """
     873        nick = 'TroubleMaker'
     874
     875        d = self.protocol.grantModerator(self.roomJID, nick,
     876                                         sender=self.userJID)
     877
     878        iq = self.stub.output[-1]
     879
     880        query = (u"/iq[@type='set' and @to='%s']/query/item"
     881                     "[@role='moderator']") % self.roomJID
    819882        self.assertTrue(xpath.matches(query, iq), 'Wrong voice stanza')
    820883
     
    863926
    864927    def test_getMemberList(self):
    865         def cb(room):
    866             members = room.members
    867             self.assertEquals(1, len(members))
    868             user = members[0]
    869             self.assertEquals(JID(u'hag66@shakespeare.lit'), user.entity)
    870             self.assertEquals(u'thirdwitch', user.nick)
    871             self.assertEquals(u'participant', user.role)
    872 
    873         self._createRoom()
     928        """
     929        Retrieving the member list returns a list of L{muc.AdminItem}s
     930
     931        The request asks for the affiliation C{'member'}.
     932        """
     933        def cb(items):
     934            self.assertEquals(1, len(items))
     935            item = items[0]
     936            self.assertEquals(JID(u'hag66@shakespeare.lit'), item.entity)
     937            self.assertEquals(u'thirdwitch', item.nick)
     938            self.assertEquals(u'member', item.affiliation)
     939
    874940        d = self.protocol.getMemberList(self.roomJID)
    875941        d.addCallback(cb)
    876942
    877943        iq = self.stub.output[-1]
    878         query = iq.query
    879         self.assertNotIdentical(None, query)
    880         self.assertEquals(NS_MUC_ADMIN, query.uri)
     944        self.assertEquals('get', iq.getAttribute('type'))
     945        query = "/iq/query[@xmlns='%s']/item[@xmlns='%s']" % (muc.NS_MUC_ADMIN,
     946                                                              muc.NS_MUC_ADMIN)
     947        items = xpath.queryForNodes(query, iq)
     948        self.assertNotIdentical(None, items)
     949        self.assertEquals(1, len(items))
     950        self.assertEquals('member', items[0].getAttribute('affiliation'))
    881951
    882952        response = toResponse(iq, 'result')
     
    890960
    891961        return d
     962
     963
     964    def test_getAdminList(self):
     965        """
     966        Retrieving the admin list returns a list of L{muc.AdminItem}s
     967
     968        The request asks for the affiliation C{'admin'}.
     969        """
     970        d = self.protocol.getAdminList(self.roomJID)
     971
     972        iq = self.stub.output[-1]
     973        query = "/iq/query[@xmlns='%s']/item[@xmlns='%s']" % (muc.NS_MUC_ADMIN,
     974                                                              muc.NS_MUC_ADMIN)
     975        items = xpath.queryForNodes(query, iq)
     976        self.assertEquals('admin', items[0].getAttribute('affiliation'))
     977
     978        response = toResponse(iq, 'result')
     979        query = response.addElement((NS_MUC_ADMIN, 'query'))
     980        self.stub.send(response)
     981
     982        return d
     983
     984
     985    def test_getBanList(self):
     986        """
     987        Retrieving the ban list returns a list of L{muc.AdminItem}s
     988
     989        The request asks for the affiliation C{'outcast'}.
     990        """
     991        def cb(items):
     992            self.assertEquals(1, len(items))
     993            item = items[0]
     994            self.assertEquals(JID(u'hag66@shakespeare.lit'), item.entity)
     995            self.assertEquals(u'outcast', item.affiliation)
     996            self.assertEquals(u'Trouble making', item.reason)
     997
     998        d = self.protocol.getBanList(self.roomJID)
     999        d.addCallback(cb)
     1000
     1001        iq = self.stub.output[-1]
     1002        query = "/iq/query[@xmlns='%s']/item[@xmlns='%s']" % (muc.NS_MUC_ADMIN,
     1003                                                              muc.NS_MUC_ADMIN)
     1004        items = xpath.queryForNodes(query, iq)
     1005        self.assertEquals('outcast', items[0].getAttribute('affiliation'))
     1006
     1007        response = toResponse(iq, 'result')
     1008        query = response.addElement((NS_MUC_ADMIN, 'query'))
     1009        item = query.addElement('item')
     1010        item['affiliation'] ='outcast'
     1011        item['jid'] = 'hag66@shakespeare.lit'
     1012        item.addElement('reason', content='Trouble making')
     1013        self.stub.send(response)
     1014
     1015        return d
     1016
     1017
     1018    def test_getOwnerList(self):
     1019        """
     1020        Retrieving the owner list returns a list of L{muc.AdminItem}s
     1021
     1022        The request asks for the affiliation C{'owner'}.
     1023        """
     1024        d = self.protocol.getOwnerList(self.roomJID)
     1025
     1026        iq = self.stub.output[-1]
     1027        query = "/iq/query[@xmlns='%s']/item[@xmlns='%s']" % (muc.NS_MUC_ADMIN,
     1028                                                              muc.NS_MUC_ADMIN)
     1029        items = xpath.queryForNodes(query, iq)
     1030        self.assertEquals('owner', items[0].getAttribute('affiliation'))
     1031
     1032        response = toResponse(iq, 'result')
     1033        query = response.addElement((NS_MUC_ADMIN, 'query'))
     1034        self.stub.send(response)
     1035
     1036        return d
     1037
     1038
     1039    def test_getModeratorList(self):
     1040        """
     1041        Retrieving the moderator returns a list of L{muc.AdminItem}s.
     1042
     1043        The request asks for the role C{'moderator'}.
     1044        """
     1045
     1046        def cb(items):
     1047            self.assertEquals(1, len(items))
     1048            item = items[0]
     1049            self.assertEquals(JID(u'hag66@shakespeare.lit'), item.entity)
     1050            self.assertEquals(u'thirdwitch', item.nick)
     1051            self.assertEquals(u'moderator', item.role)
     1052
     1053        d = self.protocol.getModeratorList(self.roomJID)
     1054        d.addCallback(cb)
     1055
     1056        iq = self.stub.output[-1]
     1057        self.assertEquals('get', iq.getAttribute('type'))
     1058        query = "/iq/query[@xmlns='%s']/item[@xmlns='%s']" % (muc.NS_MUC_ADMIN,
     1059                                                              muc.NS_MUC_ADMIN)
     1060        items = xpath.queryForNodes(query, iq)
     1061        self.assertNotIdentical(None, items)
     1062        self.assertEquals(1, len(items))
     1063        self.assertEquals('moderator', items[0].getAttribute('role'))
     1064
     1065        response = toResponse(iq, 'result')
     1066        query = response.addElement((NS_MUC_ADMIN, 'query'))
     1067        item = query.addElement('item')
     1068        item['affiliation'] ='member'
     1069        item['jid'] = 'hag66@shakespeare.lit'
     1070        item['nick'] = 'thirdwitch'
     1071        item['role'] = 'moderator'
     1072        self.stub.send(response)
     1073
     1074        return d
Note: See TracChangeset for help on using the changeset viewer.