import unittest from slixmpp import Message, JID, Iq from slixmpp.plugins.xep_0356 import permissions from slixmpp.test import SlixTest class TestPermissions(SlixTest): def setUp(self): self.stream_start( mode="component", plugins=["xep_0356", "xep_0045"], jid="pubsub.capulet.lit", server="capulet.lit", ) def testPluginEnd(self): exc = False try: self.xmpp.plugin.disable("xep_0356") except Exception as e: exc = True self.assertFalse(exc) def testGrantedPrivileges(self): results = {"event": False} x = self.xmpp["xep_0356"] self.xmpp.add_event_handler( "privileges_advertised", lambda msg: results.__setitem__("event", True) ) self.recv( """ """ ) server = JID("capulet.lit") self.assertEqual( x.granted_privileges[server].roster, permissions.RosterAccess.BOTH ) self.assertEqual( x.granted_privileges[server].message, permissions.MessagePermission.OUTGOING ) self.assertEqual( x.granted_privileges[server].presence, permissions.PresencePermission.NONE ) self.assertEqual( x.granted_privileges[server].iq["nope"], permissions.IqPermission.NONE ) self.assertEqual( x.granted_privileges[server].iq["some_ns"], permissions.IqPermission.GET ) self.assertEqual( x.granted_privileges[server].iq["some_other_ns"], permissions.IqPermission.BOTH ) self.assertTrue(results["event"]) def testGetRosterIq(self): iq = self.xmpp["xep_0356"]._make_get_roster("juliet@example.com") xmlstring = """ """ self.check(iq, xmlstring, use_values=False) def testSetRosterIq(self): jid = "juliet@example.com" items = { "friend1@example.com": { "name": "Friend 1", "subscription": "both", "groups": ["group1", "group2"], }, "friend2@example.com": { "name": "Friend 2", "subscription": "from", "groups": ["group3"], }, } iq = self.xmpp["xep_0356"]._make_set_roster(jid, items) xmlstring = f""" group1 group2 group3 """ self.check(iq, xmlstring, use_values=False) def testMakeOutgoingMessage(self): xmlstring = """ I do not hate you """ msg = Message() msg["from"] = "juliet@capulet.lit" msg["to"] = "romeo@montague.lit" msg["body"] = "I do not hate you" priv_msg = self.xmpp["xep_0356"]._make_privileged_message(msg) self.check(priv_msg, xmlstring, use_values=False) def testDetectServer(self): msg = Message() msg["from"] = "juliet@something" msg["to"] = "romeo@montague.lit" msg["body"] = "I do not hate you" priv_msg = self.xmpp["xep_0356"]._make_privileged_message(msg) assert priv_msg.get_to() == "something" assert priv_msg.get_from() == "pubsub.capulet.lit" def testIqOnBehalf(self): iq = Iq() iq["mucadmin_query"]["item"]["affiliation"] = "member" iq.set_from("juliet@xxx") iq.set_to("somemuc@conf") iq.set_type("get") self.xmpp["xep_0356"].granted_privileges["conf"].iq["http://jabber.org/protocol/muc#admin"] = permissions.IqPermission.BOTH r = self.xmpp.loop.create_task(self.xmpp["xep_0356"].send_privileged_iq(iq, iq_id="0")) self.send( """ """, use_values=False ) suite = unittest.TestLoader().loadTestsFromTestCase(TestPermissions)