view tests/unit/test_plugin_xep_0298.py @ 4309:b56b1eae7994

component email gateway: add multicasting: XEP-0033 multicasting is now supported both for incoming and outgoing messages. XEP-0033 metadata are converted to suitable Email headers and vice versa. Email address and JID are both supported, and delivery is done by the gateway when suitable on incoming messages. rel 450
author Goffi <goffi@goffi.org>
date Thu, 26 Sep 2024 16:12:01 +0200
parents 9447796408f6
children
line wrap: on
line source

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