2020-12-03 23:23:13 +00:00
|
|
|
import unittest
|
|
|
|
from slixmpp import Message, Presence, Iq, JID
|
|
|
|
from slixmpp.test import SlixTest
|
|
|
|
from slixmpp.plugins.xep_0045.stanza import (
|
|
|
|
MUCPresence,
|
|
|
|
MUCJoin,
|
|
|
|
MUCMessage,
|
|
|
|
MUCAdminQuery,
|
|
|
|
MUCAdminItem,
|
|
|
|
MUCHistory,
|
|
|
|
MUCOwnerQuery,
|
|
|
|
MUCOwnerDestroy,
|
|
|
|
MUCStatus,
|
|
|
|
MUCInvite,
|
|
|
|
MUCDecline,
|
2021-01-10 13:38:43 +00:00
|
|
|
MUCUserItem,
|
|
|
|
MUCActor,
|
2020-12-03 23:23:13 +00:00
|
|
|
)
|
|
|
|
from slixmpp.xmlstream import register_stanza_plugin, ET
|
|
|
|
|
|
|
|
|
|
|
|
class TestMUC(SlixTest):
|
|
|
|
|
|
|
|
def setUp(self):
|
2021-01-10 13:38:43 +00:00
|
|
|
register_stanza_plugin(MUCPresence, MUCUserItem)
|
|
|
|
register_stanza_plugin(MUCMessage, MUCUserItem)
|
|
|
|
register_stanza_plugin(MUCUserItem, MUCActor)
|
2020-12-03 23:23:13 +00:00
|
|
|
register_stanza_plugin(MUCMessage, MUCInvite)
|
|
|
|
register_stanza_plugin(MUCMessage, MUCDecline)
|
|
|
|
register_stanza_plugin(MUCMessage, MUCStatus)
|
|
|
|
register_stanza_plugin(MUCPresence, MUCStatus)
|
|
|
|
register_stanza_plugin(Presence, MUCPresence)
|
|
|
|
register_stanza_plugin(Presence, MUCJoin)
|
|
|
|
register_stanza_plugin(MUCJoin, MUCHistory)
|
|
|
|
register_stanza_plugin(Message, MUCMessage)
|
|
|
|
register_stanza_plugin(Iq, MUCAdminQuery)
|
|
|
|
register_stanza_plugin(Iq, MUCOwnerQuery)
|
|
|
|
register_stanza_plugin(MUCOwnerQuery, MUCOwnerDestroy)
|
|
|
|
register_stanza_plugin(MUCAdminQuery, MUCAdminItem, iterable=True)
|
|
|
|
|
2021-01-10 13:38:43 +00:00
|
|
|
|
2020-12-03 23:23:13 +00:00
|
|
|
def testPresence(self):
|
2021-01-10 13:38:43 +00:00
|
|
|
presence = Presence()
|
|
|
|
presence['from'] = JID('muc@service/nick')
|
|
|
|
presence['muc']['item']['affiliation'] = 'member'
|
|
|
|
presence['muc']['item']['role'] = 'participant'
|
|
|
|
presence['muc']['status_codes'] = (100, 110, 210)
|
|
|
|
|
|
|
|
self.check(presence, """
|
|
|
|
<presence from='muc@service/nick'>
|
|
|
|
<x xmlns='http://jabber.org/protocol/muc#user'>
|
|
|
|
<item affiliation='member' role='participant'/>
|
|
|
|
<status code='100'/>
|
|
|
|
<status code='110'/>
|
|
|
|
<status code='210'/>
|
|
|
|
</x>
|
|
|
|
</presence>
|
|
|
|
""", use_values=False)
|
|
|
|
|
|
|
|
def testPresenceReason(self):
|
|
|
|
presence = Presence()
|
|
|
|
presence['from'] = JID('muc@service/nick')
|
|
|
|
presence['muc']['item']['affiliation'] = 'member'
|
|
|
|
presence['muc']['item']['role'] = 'participant'
|
|
|
|
presence['muc']['item']['reason'] = 'coucou'
|
|
|
|
presence['muc']['item']['actor']['nick'] = 'JPR'
|
|
|
|
|
|
|
|
self.check(presence, """
|
|
|
|
<presence from='muc@service/nick'>
|
|
|
|
<x xmlns='http://jabber.org/protocol/muc#user'>
|
|
|
|
<item affiliation='member' role='participant'>
|
|
|
|
<actor nick="JPR"/>
|
|
|
|
<reason>coucou</reason>
|
|
|
|
</item>
|
|
|
|
</x>
|
|
|
|
</presence>
|
|
|
|
""", use_values=False)
|
|
|
|
|
|
|
|
|
|
|
|
def testPresenceLegacy(self):
|
2020-12-03 23:23:13 +00:00
|
|
|
presence = Presence()
|
|
|
|
presence['from'] = JID('muc@service/nick')
|
|
|
|
presence['muc']['affiliation'] = 'member'
|
|
|
|
presence['muc']['role'] = 'participant'
|
|
|
|
presence['muc']['status_codes'] = (100, 110, 210)
|
|
|
|
|
|
|
|
self.check(presence, """
|
|
|
|
<presence from='muc@service/nick'>
|
|
|
|
<x xmlns='http://jabber.org/protocol/muc#user'>
|
|
|
|
<item affiliation='member' role='participant'/>
|
|
|
|
<status code='100'/>
|
|
|
|
<status code='110'/>
|
|
|
|
<status code='210'/>
|
|
|
|
</x>
|
|
|
|
</presence>
|
|
|
|
""", use_values=False)
|
|
|
|
|
|
|
|
|
|
|
|
def testInvite(self):
|
|
|
|
message = Message()
|
|
|
|
message['from'] = 'user@server'
|
|
|
|
message['to'] = 'muc@service'
|
|
|
|
message['muc']['invite']['to'] = JID('user2@server2')
|
|
|
|
message['muc']['invite']['reason'] = 'Hey'
|
|
|
|
|
|
|
|
self.check(message, """
|
|
|
|
<message
|
|
|
|
from='user@server'
|
|
|
|
to='muc@service'>
|
|
|
|
<x xmlns='http://jabber.org/protocol/muc#user'>
|
|
|
|
<invite to='user2@server2'>
|
|
|
|
<reason>Hey</reason>
|
|
|
|
</invite>
|
|
|
|
</x>
|
|
|
|
</message>
|
|
|
|
""", use_values=False)
|
|
|
|
|
|
|
|
def testAdmin(self):
|
|
|
|
iq = Iq()
|
|
|
|
iq['id'] = '0'
|
|
|
|
iq['type'] = 'set'
|
|
|
|
iq.enable('mucadmin_query')
|
|
|
|
items = [
|
|
|
|
('none', 'test@example/a'),
|
|
|
|
('owner', 'owner@example/a'),
|
|
|
|
]
|
|
|
|
for aff, jid in items:
|
|
|
|
item_el = MUCAdminItem()
|
|
|
|
item_el['affiliation'] = aff
|
|
|
|
item_el['jid'] = jid
|
|
|
|
iq['mucadmin_query'].append(item_el)
|
|
|
|
self.check(iq, """
|
|
|
|
<iq type='set' id='0'>
|
|
|
|
<query xmlns='http://jabber.org/protocol/muc#admin'>
|
|
|
|
<item jid='test@example/a'
|
|
|
|
affiliation='none'/>
|
|
|
|
<item jid='owner@example/a'
|
|
|
|
affiliation='owner'/>
|
|
|
|
</query>
|
|
|
|
</iq>
|
|
|
|
""", use_values=False)
|
|
|
|
|
2021-01-10 13:38:43 +00:00
|
|
|
def testSetAffiliation(self):
|
|
|
|
iq = Iq()
|
|
|
|
iq['type'] = 'set'
|
|
|
|
iq['id'] = '1'
|
|
|
|
iq['mucadmin_query']['item']['jid'] = JID('test@example.com')
|
|
|
|
iq['mucadmin_query']['item']['affiliation'] = 'owner'
|
|
|
|
self.check(iq, """
|
|
|
|
<iq type='set' id='1'>
|
|
|
|
<query xmlns='http://jabber.org/protocol/muc#admin'>
|
|
|
|
<item jid='test@example.com'
|
|
|
|
affiliation='owner'/>
|
|
|
|
</query>
|
|
|
|
</iq>
|
|
|
|
""", use_values=False)
|
|
|
|
|
2020-12-03 23:23:13 +00:00
|
|
|
|
|
|
|
suite = unittest.TestLoader().loadTestsFromTestCase(TestMUC)
|