changeset 4293:9447796408f6

tests (unit): add test for XEP-0298 plugin + fix XEP-0167: fix 447
author Goffi <goffi@goffi.org>
date Mon, 29 Jul 2024 03:49:26 +0200 (5 months ago)
parents dd0891d0b22b
children a0ed5c976bf8
files tests/unit/test_plugin_xep_0167.py tests/unit/test_plugin_xep_0298.py
diffstat 2 files changed, 86 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/tests/unit/test_plugin_xep_0167.py	Mon Jul 29 03:31:13 2024 +0200
+++ b/tests/unit/test_plugin_xep_0167.py	Mon Jul 29 03:49:26 2024 +0200
@@ -135,6 +135,7 @@
             "audio": {
                 "application_data": {
                     "media": "audio",
+                    "msid-semantic": "WMS",
                     "payload_types": {
                         96: {
                             "clockrate": 48000,
@@ -143,6 +144,7 @@
                             "parameters": {"sprop-stereo": "1"},
                         }
                     },
+                    "senders": "both",
                 },
                 "id": "audio",
                 "senders": "both",
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/unit/test_plugin_xep_0298.py	Mon Jul 29 03:49:26 2024 +0200
@@ -0,0 +1,84 @@
+from twisted.words.xish import domish
+from twisted.words.protocols.jabber import jid
+from libervia.backend.plugins.plugin_xep_0298 import NS_COIN, NS_CONFERENCE_INFO, XEP_0298
+from libervia.backend.core.constants import Const as C
+
+
+class TestXEP0298:
+    def test_add_conference_info(self, host):
+        """Conference info element is correctly added to jingle element"""
+        xep_0298 = XEP_0298(host)
+        jingle_elt = domish.Element((None, "jingle"))
+
+        conference_info_elt = xep_0298.add_conference_info(
+            jingle_elt, is_focus=True, room="test_room"
+        )
+
+        assert conference_info_elt.name == "conference-info"
+        assert conference_info_elt.uri == NS_CONFERENCE_INFO
+        assert conference_info_elt["isfocus"] == C.BOOL_TRUE
+        assert conference_info_elt["room"] == "test_room"
+
+    def test_add_user(self, host):
+        """User is correctly added to conference info element"""
+        xep_0298 = XEP_0298(host)
+        conference_info_elt = domish.Element((NS_CONFERENCE_INFO, "conference-info"))
+        entity = jid.JID("user@example.com/resource")
+
+        user_elt = xep_0298.add_user(conference_info_elt, entity)
+
+        assert user_elt.name == "user"
+        assert user_elt.parent.name == "users"
+        assert user_elt["entity"] == "xmpp:user%40example.com"
+
+    def test_add_multiple_users(self, host):
+        """Multiple users are correctly added to conference info element"""
+        xep_0298 = XEP_0298(host)
+        conference_info_elt = domish.Element((NS_CONFERENCE_INFO, "conference-info"))
+        entities = [jid.JID(f"user{i}@example.com/resource") for i in range(3)]
+
+        for entity in entities:
+            xep_0298.add_user(conference_info_elt, entity)
+
+        users_elt = next(conference_info_elt.elements(NS_CONFERENCE_INFO, "users"))
+        user_elts = list(users_elt.elements(NS_CONFERENCE_INFO, "user"))
+        assert len(user_elts) == 3
+        for i, user_elt in enumerate(user_elts):
+            assert user_elt["entity"] == f"xmpp:user{i}%40example.com"
+
+    def test_parse_with_conference_info(self, host):
+        """Jingle element with conference info is correctly parsed"""
+        xep_0298 = XEP_0298(host)
+        jingle_elt = domish.Element((None, "jingle"))
+        conference_info_elt = jingle_elt.addElement(
+            (NS_CONFERENCE_INFO, "conference-info")
+        )
+        users_elt = conference_info_elt.addElement("users")
+        user_elt = users_elt.addElement("user")
+        user_elt["entity"] = "xmpp:user%40example.com"
+
+        result = xep_0298.parse(jingle_elt)
+
+        assert "info" in result
+        assert "users" in result["info"]
+        assert len(result["info"]["users"]) == 1
+        assert str(result["info"]["users"][0]) == "user@example.com"
+
+    def test_parse_without_conference_info(self, host):
+        """Jingle element without conference info returns empty dict"""
+        xep_0298 = XEP_0298(host)
+        jingle_elt = domish.Element((None, "jingle"))
+
+        result = xep_0298.parse(jingle_elt)
+
+        assert result == {}
+
+    def test_coin_handler_disco_info(self, host):
+        """CoinHandler returns correct disco info"""
+        xep_0298 = XEP_0298(host)
+        handler = xep_0298.get_handler(None)
+
+        disco_info = handler.getDiscoInfo(None, None)
+
+        assert len(disco_info) == 1
+        assert disco_info[0] == NS_COIN