Merge branch 'muc-more' into 'master'

MUC: Fix invite/decline issue and add basic stanza tests

See merge request poezio/slixmpp!71
This commit is contained in:
Link Mauve 2020-12-04 00:30:13 +01:00
commit 922ad8d9ea
3 changed files with 105 additions and 5 deletions

View File

@ -31,6 +31,8 @@ from slixmpp.exceptions import IqError, IqTimeout
from slixmpp.plugins.xep_0045 import stanza from slixmpp.plugins.xep_0045 import stanza
from slixmpp.plugins.xep_0045.stanza import ( from slixmpp.plugins.xep_0045.stanza import (
MUCInvite,
MUCDecline,
MUCPresence, MUCPresence,
MUCJoin, MUCJoin,
MUCMessage, MUCMessage,
@ -64,6 +66,8 @@ class XEP_0045(BasePlugin):
self.rooms = {} self.rooms = {}
self.our_nicks = {} self.our_nicks = {}
# load MUC support in presence stanzas # load MUC support in presence stanzas
register_stanza_plugin(MUCMessage, MUCInvite)
register_stanza_plugin(MUCMessage, MUCDecline)
register_stanza_plugin(MUCMessage, MUCStatus) register_stanza_plugin(MUCMessage, MUCStatus)
register_stanza_plugin(MUCPresence, MUCStatus) register_stanza_plugin(MUCPresence, MUCStatus)
register_stanza_plugin(Presence, MUCPresence) register_stanza_plugin(Presence, MUCPresence)

View File

@ -2,9 +2,9 @@ import os
import re import re
import sys import sys
import unittest import unittest
import tabnanny
import compileall import compileall
class TestOverall(unittest.TestCase): class TestOverall(unittest.TestCase):
""" """
@ -18,9 +18,5 @@ class TestOverall(unittest.TestCase):
rx = re.compile('/[.]svn|.*26.*') rx = re.compile('/[.]svn|.*26.*')
self.assertTrue(compileall.compile_dir(src, rx=rx, quiet=True)) self.assertTrue(compileall.compile_dir(src, rx=rx, quiet=True))
def testTabNanny(self):
"""Testing that indentation is consistent"""
self.assertFalse(tabnanny.check('..%sslixmpp' % os.sep))
suite = unittest.TestLoader().loadTestsFromTestCase(TestOverall) suite = unittest.TestLoader().loadTestsFromTestCase(TestOverall)

View File

@ -0,0 +1,100 @@
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,
)
from slixmpp.xmlstream import register_stanza_plugin, ET
class TestMUC(SlixTest):
def setUp(self):
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)
def testPresence(self):
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)
suite = unittest.TestLoader().loadTestsFromTestCase(TestMUC)