From dcab3de1b4a5293f355f3ef6dd31a1878dfa88be Mon Sep 17 00:00:00 2001 From: Nicoco K Date: Thu, 18 Feb 2021 20:03:22 +0100 Subject: Privileged entities (XEP-0356) --- tests/test_stanza_xep_0356.py | 41 +++++++++++++++ tests/test_stream_xep_0356.py | 116 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 157 insertions(+) create mode 100644 tests/test_stanza_xep_0356.py create mode 100644 tests/test_stream_xep_0356.py (limited to 'tests') diff --git a/tests/test_stanza_xep_0356.py b/tests/test_stanza_xep_0356.py new file mode 100644 index 00000000..ef116db2 --- /dev/null +++ b/tests/test_stanza_xep_0356.py @@ -0,0 +1,41 @@ +import unittest +from slixmpp import Message +from slixmpp.test import SlixTest +from slixmpp.xmlstream import register_stanza_plugin + +from slixmpp.plugins.xep_0356 import stanza + + +class TestPermissions(SlixTest): + def setUp(self): + stanza.register() + + def testAdvertisePermission(self): + xmlstring = """ + + + + + + + + """ + msg = self.Message() + msg["from"] = "capulet.net" + msg["to"] = "pubub.capulet.lit" + # This raises AttributeError: 'NoneType' object has no attribute 'use_origin_id' + # msg["id"] = "id" + + for access, type_ in [ + ("roster", "both"), + ("message", "outgoing"), + ("presence", "managed_entity"), + ]: + msg["privilege"].add_perm(access, type_) + + self.check(msg, xmlstring) + # Should this one work? → # AttributeError: 'Message' object has no attribute 'permission' + # self.assertEqual(msg.permission["roster"], "both") + + +suite = unittest.TestLoader().loadTestsFromTestCase(TestPermissions) diff --git a/tests/test_stream_xep_0356.py b/tests/test_stream_xep_0356.py new file mode 100644 index 00000000..2949daad --- /dev/null +++ b/tests/test_stream_xep_0356.py @@ -0,0 +1,116 @@ +import unittest + +from slixmpp import ComponentXMPP, Iq, Message +from slixmpp.roster import RosterItem +from slixmpp.test import SlixTest + + +class TestPermissions(SlixTest): + def setUp(self): + self.stream_start( + mode="component", + plugins=["xep_0356"], + jid="pubsub.capulet.lit", + server="capulet.net", + ) + + def testPluginEnd(self): + exc = False + try: + self.xmpp.plugin.disable("xep_0356") + except Exception as e: + exc = True + self.assertFalse(exc) + + def testGrantedPrivileges(self): + # https://xmpp.org/extensions/xep-0356.html#example-4 + results = {"event": False} + self.xmpp.add_event_handler( + "privileges_advertised", lambda msg: results.__setitem__("event", True) + ) + self.recv( + """ + + + + + + + """ + ) + self.assertEqual(self.xmpp["xep_0356"].granted_privileges["roster"], "both") + self.assertEqual( + self.xmpp["xep_0356"].granted_privileges["message"], "outgoing" + ) + self.assertEqual(self.xmpp["xep_0356"].granted_privileges["presence"], "none") + 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) + + +suite = unittest.TestLoader().loadTestsFromTestCase(TestPermissions) -- cgit v1.2.3