import unittest
from slixmpp import Message, Iq, JID
from slixmpp.test import SlixTest
from slixmpp.plugins.xep_0425 import stanza


class TestModeration(SlixTest):

    def setUp(self):
        stanza.register_plugins()

    def testModerate(self):
        iq = Iq()
        iq['type'] = 'set'
        iq['id'] = 'a'
        iq['apply_to']['id'] = 'some-id'
        iq['apply_to']['moderate'].enable('retract')
        iq['apply_to']['moderate']['reason'] = 'R'

        self.check(iq, """
<iq type='set' id='a'>
  <apply-to id="some-id" xmlns="urn:xmpp:fasten:0">
    <moderate xmlns='urn:xmpp:message-moderate:0'>
      <retract xmlns='urn:xmpp:message-retract:0'/>
      <reason>R</reason>
    </moderate>
  </apply-to>
</iq>
        """, use_values=False)

    def testModerated(self):
        message = Message()
        message['moderated']['by'] = JID('toto@titi')
        message['moderated']['retracted']['stamp'] = '2019-09-20T23:09:32Z'
        message['moderated']['reason'] = 'R'

        self.check(message, """
<message>
  <moderated xmlns="urn:xmpp:message-moderate:0" by="toto@titi">
    <retracted stamp="2019-09-20T23:09:32Z" xmlns="urn:xmpp:message-retract:0" />
    <reason>R</reason>
  </moderated>
</message>
        """)


suite = unittest.TestLoader().loadTestsFromTestCase(TestModeration)